diff --git a/build/contracts/Address.json b/build/contracts/Address.json
new file mode 100644
index 0000000..8e24fff
--- /dev/null
+++ b/build/contracts/Address.json
@@ -0,0 +1,8064 @@
+{
+ "contractName": "Address",
+ "abi": [],
+ "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://39a05eec7083dfa0cc7e0cbfe6cd1bd085a340af1ede93fdff3ad047c5fb3d8e\",\"dweb:/ipfs/QmVApz5fCUq2QC8gKTsNNdCmcedJ3ETHp68zR5N3WUKS4r\"]}},\"version\":1}",
+ "bytecode": "0x60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220439ae0d86af800954602f701767ac875c2ea279968d533930bfd25fb9a8ea56264736f6c63430008060033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220439ae0d86af800954602f701767ac875c2ea279968d533930bfd25fb9a8ea56264736f6c63430008060033",
+ "immutableReferences": {},
+ "generatedSources": [],
+ "deployedGeneratedSources": [],
+ "sourceMap": "126:7729:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "deployedSourceMap": "126:7729:6:-:0;;;;;;;;",
+ "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n assembly {\n size := extcodesize(account)\n }\n return size > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n",
+ "sourcePath": "@openzeppelin/contracts/utils/Address.sol",
+ "ast": {
+ "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
+ "exportedSymbols": {
+ "Address": [
+ 1505
+ ]
+ },
+ "id": 1506,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1210,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:6"
+ },
+ {
+ "abstract": false,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "library",
+ "documentation": {
+ "id": 1211,
+ "nodeType": "StructuredDocumentation",
+ "src": "58:67:6",
+ "text": " @dev Collection of functions related to the address type"
+ },
+ "fullyImplemented": true,
+ "id": 1505,
+ "linearizedBaseContracts": [
+ 1505
+ ],
+ "name": "Address",
+ "nameLocation": "134:7:6",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "body": {
+ "id": 1227,
+ "nodeType": "Block",
+ "src": "784:311:6",
+ "statements": [
+ {
+ "assignments": [
+ 1220
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1220,
+ "mutability": "mutable",
+ "name": "size",
+ "nameLocation": "989:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1227,
+ "src": "981:12:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1219,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "981:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1221,
+ "nodeType": "VariableDeclarationStatement",
+ "src": "981:12:6"
+ },
+ {
+ "AST": {
+ "nodeType": "YulBlock",
+ "src": "1012:52:6",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "1026:28:6",
+ "value": {
+ "arguments": [
+ {
+ "name": "account",
+ "nodeType": "YulIdentifier",
+ "src": "1046:7:6"
+ }
+ ],
+ "functionName": {
+ "name": "extcodesize",
+ "nodeType": "YulIdentifier",
+ "src": "1034:11:6"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1034:20:6"
+ },
+ "variableNames": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "1026:4:6"
+ }
+ ]
+ }
+ ]
+ },
+ "evmVersion": "berlin",
+ "externalReferences": [
+ {
+ "declaration": 1214,
+ "isOffset": false,
+ "isSlot": false,
+ "src": "1046:7:6",
+ "valueSize": 1
+ },
+ {
+ "declaration": 1220,
+ "isOffset": false,
+ "isSlot": false,
+ "src": "1026:4:6",
+ "valueSize": 1
+ }
+ ],
+ "id": 1222,
+ "nodeType": "InlineAssembly",
+ "src": "1003:61:6"
+ },
+ {
+ "expression": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1225,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1223,
+ "name": "size",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1220,
+ "src": "1080:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1224,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1087:1:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1080:8:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 1218,
+ "id": 1226,
+ "nodeType": "Return",
+ "src": "1073:15:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1212,
+ "nodeType": "StructuredDocumentation",
+ "src": "148:565:6",
+ "text": " @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n - an externally-owned account\n - a contract in construction\n - an address where a contract will be created\n - an address where a contract lived, but was destroyed\n ===="
+ },
+ "id": 1228,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "isContract",
+ "nameLocation": "727:10:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1215,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1214,
+ "mutability": "mutable",
+ "name": "account",
+ "nameLocation": "746:7:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1228,
+ "src": "738:15:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1213,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "738:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "737:17:6"
+ },
+ "returnParameters": {
+ "id": 1218,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1217,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1228,
+ "src": "778:4:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1216,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "778:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "777:6:6"
+ },
+ "scope": 1505,
+ "src": "718:377:6",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1261,
+ "nodeType": "Block",
+ "src": "2083:241:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1243,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1239,
+ "name": "this",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967268,
+ "src": "2109:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_Address_$1505",
+ "typeString": "library Address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_Address_$1505",
+ "typeString": "library Address"
+ }
+ ],
+ "id": 1238,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "2101:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 1237,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2101:7:6",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1240,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2101:13:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 1241,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "balance",
+ "nodeType": "MemberAccess",
+ "src": "2101:21:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">=",
+ "rightExpression": {
+ "id": 1242,
+ "name": "amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1233,
+ "src": "2126:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "2101:31:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "416464726573733a20696e73756666696369656e742062616c616e6365",
+ "id": 1244,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2134:31:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
+ "typeString": "literal_string \"Address: insufficient balance\""
+ },
+ "value": "Address: insufficient balance"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
+ "typeString": "literal_string \"Address: insufficient balance\""
+ }
+ ],
+ "id": 1236,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "2093:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1245,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2093:73:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1246,
+ "nodeType": "ExpressionStatement",
+ "src": "2093:73:6"
+ },
+ {
+ "assignments": [
+ 1248,
+ null
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1248,
+ "mutability": "mutable",
+ "name": "success",
+ "nameLocation": "2183:7:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1261,
+ "src": "2178:12:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1247,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "2178:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ },
+ null
+ ],
+ "id": 1255,
+ "initialValue": {
+ "arguments": [
+ {
+ "hexValue": "",
+ "id": 1253,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2226:2:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ },
+ "value": ""
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ }
+ ],
+ "expression": {
+ "id": 1249,
+ "name": "recipient",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1231,
+ "src": "2196:9:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "id": 1250,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "call",
+ "nodeType": "MemberAccess",
+ "src": "2196:14:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
+ "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
+ }
+ },
+ "id": 1252,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "names": [
+ "value"
+ ],
+ "nodeType": "FunctionCallOptions",
+ "options": [
+ {
+ "id": 1251,
+ "name": "amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1233,
+ "src": "2218:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "src": "2196:29:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
+ "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
+ }
+ },
+ "id": 1254,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2196:33:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
+ "typeString": "tuple(bool,bytes memory)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "2177:52:6"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1257,
+ "name": "success",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1248,
+ "src": "2247:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564",
+ "id": 1258,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2256:60:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
+ "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
+ },
+ "value": "Address: unable to send value, recipient may have reverted"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
+ "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
+ }
+ ],
+ "id": 1256,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "2239:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1259,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2239:78:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1260,
+ "nodeType": "ExpressionStatement",
+ "src": "2239:78:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1229,
+ "nodeType": "StructuredDocumentation",
+ "src": "1101:906:6",
+ "text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."
+ },
+ "id": 1262,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "sendValue",
+ "nameLocation": "2021:9:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1234,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1231,
+ "mutability": "mutable",
+ "name": "recipient",
+ "nameLocation": "2047:9:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1262,
+ "src": "2031:25:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ "typeName": {
+ "id": 1230,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2031:15:6",
+ "stateMutability": "payable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1233,
+ "mutability": "mutable",
+ "name": "amount",
+ "nameLocation": "2066:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1262,
+ "src": "2058:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1232,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2058:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2030:43:6"
+ },
+ "returnParameters": {
+ "id": 1235,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2083:0:6"
+ },
+ "scope": 1505,
+ "src": "2012:312:6",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1278,
+ "nodeType": "Block",
+ "src": "3155:84:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1273,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1265,
+ "src": "3185:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 1274,
+ "name": "data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1267,
+ "src": "3193:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564",
+ "id": 1275,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3199:32:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
+ "typeString": "literal_string \"Address: low-level call failed\""
+ },
+ "value": "Address: low-level call failed"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
+ "typeString": "literal_string \"Address: low-level call failed\""
+ }
+ ],
+ "id": 1272,
+ "name": "functionCall",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 1279,
+ 1299
+ ],
+ "referencedDeclaration": 1299,
+ "src": "3172:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
+ }
+ },
+ "id": 1276,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3172:60:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1271,
+ "id": 1277,
+ "nodeType": "Return",
+ "src": "3165:67:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1263,
+ "nodeType": "StructuredDocumentation",
+ "src": "2330:731:6",
+ "text": " @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"
+ },
+ "id": 1279,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "functionCall",
+ "nameLocation": "3075:12:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1268,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1265,
+ "mutability": "mutable",
+ "name": "target",
+ "nameLocation": "3096:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1279,
+ "src": "3088:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1264,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3088:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1267,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "3117:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1279,
+ "src": "3104:17:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1266,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "3104:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3087:35:6"
+ },
+ "returnParameters": {
+ "id": 1271,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1270,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1279,
+ "src": "3141:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1269,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "3141:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3140:14:6"
+ },
+ "scope": 1505,
+ "src": "3066:173:6",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1298,
+ "nodeType": "Block",
+ "src": "3608:76:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1292,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1282,
+ "src": "3647:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 1293,
+ "name": "data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1284,
+ "src": "3655:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "hexValue": "30",
+ "id": 1294,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3661:1:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ {
+ "id": 1295,
+ "name": "errorMessage",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1286,
+ "src": "3664:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 1291,
+ "name": "functionCallWithValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 1319,
+ 1369
+ ],
+ "referencedDeclaration": 1369,
+ "src": "3625:21:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
+ }
+ },
+ "id": 1296,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3625:52:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1290,
+ "id": 1297,
+ "nodeType": "Return",
+ "src": "3618:59:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1280,
+ "nodeType": "StructuredDocumentation",
+ "src": "3245:211:6",
+ "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
+ },
+ "id": 1299,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "functionCall",
+ "nameLocation": "3470:12:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1287,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1282,
+ "mutability": "mutable",
+ "name": "target",
+ "nameLocation": "3500:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1299,
+ "src": "3492:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1281,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3492:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1284,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "3529:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1299,
+ "src": "3516:17:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1283,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "3516:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1286,
+ "mutability": "mutable",
+ "name": "errorMessage",
+ "nameLocation": "3557:12:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1299,
+ "src": "3543:26:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1285,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "3543:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3482:93:6"
+ },
+ "returnParameters": {
+ "id": 1290,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1289,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1299,
+ "src": "3594:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1288,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "3594:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3593:14:6"
+ },
+ "scope": 1505,
+ "src": "3461:223:6",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1318,
+ "nodeType": "Block",
+ "src": "4189:111:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1312,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1302,
+ "src": "4228:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 1313,
+ "name": "data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1304,
+ "src": "4236:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "id": 1314,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1306,
+ "src": "4242:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564",
+ "id": 1315,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4249:43:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
+ "typeString": "literal_string \"Address: low-level call with value failed\""
+ },
+ "value": "Address: low-level call with value failed"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
+ "typeString": "literal_string \"Address: low-level call with value failed\""
+ }
+ ],
+ "id": 1311,
+ "name": "functionCallWithValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 1319,
+ 1369
+ ],
+ "referencedDeclaration": 1369,
+ "src": "4206:21:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
+ }
+ },
+ "id": 1316,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4206:87:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1310,
+ "id": 1317,
+ "nodeType": "Return",
+ "src": "4199:94:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1300,
+ "nodeType": "StructuredDocumentation",
+ "src": "3690:351:6",
+ "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"
+ },
+ "id": 1319,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "functionCallWithValue",
+ "nameLocation": "4055:21:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1307,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1302,
+ "mutability": "mutable",
+ "name": "target",
+ "nameLocation": "4094:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1319,
+ "src": "4086:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1301,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4086:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1304,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "4123:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1319,
+ "src": "4110:17:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1303,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "4110:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1306,
+ "mutability": "mutable",
+ "name": "value",
+ "nameLocation": "4145:5:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1319,
+ "src": "4137:13:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1305,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4137:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4076:80:6"
+ },
+ "returnParameters": {
+ "id": 1310,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1309,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1319,
+ "src": "4175:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1308,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "4175:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4174:14:6"
+ },
+ "scope": 1505,
+ "src": "4046:254:6",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1368,
+ "nodeType": "Block",
+ "src": "4727:320:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1340,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1336,
+ "name": "this",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967268,
+ "src": "4753:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_Address_$1505",
+ "typeString": "library Address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_Address_$1505",
+ "typeString": "library Address"
+ }
+ ],
+ "id": 1335,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "4745:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 1334,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4745:7:6",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1337,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4745:13:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 1338,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "balance",
+ "nodeType": "MemberAccess",
+ "src": "4745:21:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">=",
+ "rightExpression": {
+ "id": 1339,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1326,
+ "src": "4770:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "4745:30:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c",
+ "id": 1341,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4777:40:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
+ "typeString": "literal_string \"Address: insufficient balance for call\""
+ },
+ "value": "Address: insufficient balance for call"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
+ "typeString": "literal_string \"Address: insufficient balance for call\""
+ }
+ ],
+ "id": 1333,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "4737:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1342,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4737:81:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1343,
+ "nodeType": "ExpressionStatement",
+ "src": "4737:81:6"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 1346,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1322,
+ "src": "4847:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 1345,
+ "name": "isContract",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1228,
+ "src": "4836:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
+ "typeString": "function (address) view returns (bool)"
+ }
+ },
+ "id": 1347,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4836:18:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
+ "id": 1348,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4856:31:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
+ "typeString": "literal_string \"Address: call to non-contract\""
+ },
+ "value": "Address: call to non-contract"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
+ "typeString": "literal_string \"Address: call to non-contract\""
+ }
+ ],
+ "id": 1344,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "4828:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1349,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4828:60:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1350,
+ "nodeType": "ExpressionStatement",
+ "src": "4828:60:6"
+ },
+ {
+ "assignments": [
+ 1352,
+ 1354
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1352,
+ "mutability": "mutable",
+ "name": "success",
+ "nameLocation": "4905:7:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1368,
+ "src": "4900:12:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1351,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "4900:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1354,
+ "mutability": "mutable",
+ "name": "returndata",
+ "nameLocation": "4927:10:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1368,
+ "src": "4914:23:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1353,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "4914:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1361,
+ "initialValue": {
+ "arguments": [
+ {
+ "id": 1359,
+ "name": "data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1324,
+ "src": "4967:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "id": 1355,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1322,
+ "src": "4941:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 1356,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "call",
+ "nodeType": "MemberAccess",
+ "src": "4941:11:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
+ "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
+ }
+ },
+ "id": 1358,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "names": [
+ "value"
+ ],
+ "nodeType": "FunctionCallOptions",
+ "options": [
+ {
+ "id": 1357,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1326,
+ "src": "4960:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "src": "4941:25:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
+ "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
+ }
+ },
+ "id": 1360,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4941:31:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
+ "typeString": "tuple(bool,bytes memory)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "4899:73:6"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1363,
+ "name": "success",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1352,
+ "src": "5006:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "id": 1364,
+ "name": "returndata",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1354,
+ "src": "5015:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "id": 1365,
+ "name": "errorMessage",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1328,
+ "src": "5027:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 1362,
+ "name": "verifyCallResult",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1504,
+ "src": "4989:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
+ }
+ },
+ "id": 1366,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4989:51:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1332,
+ "id": 1367,
+ "nodeType": "Return",
+ "src": "4982:58:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1320,
+ "nodeType": "StructuredDocumentation",
+ "src": "4306:237:6",
+ "text": " @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
+ },
+ "id": 1369,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "functionCallWithValue",
+ "nameLocation": "4557:21:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1329,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1322,
+ "mutability": "mutable",
+ "name": "target",
+ "nameLocation": "4596:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1369,
+ "src": "4588:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1321,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4588:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1324,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "4625:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1369,
+ "src": "4612:17:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1323,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "4612:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1326,
+ "mutability": "mutable",
+ "name": "value",
+ "nameLocation": "4647:5:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1369,
+ "src": "4639:13:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1325,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4639:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1328,
+ "mutability": "mutable",
+ "name": "errorMessage",
+ "nameLocation": "4676:12:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1369,
+ "src": "4662:26:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1327,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "4662:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4578:116:6"
+ },
+ "returnParameters": {
+ "id": 1332,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1331,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1369,
+ "src": "4713:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1330,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "4713:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4712:14:6"
+ },
+ "scope": 1505,
+ "src": "4548:499:6",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1385,
+ "nodeType": "Block",
+ "src": "5324:97:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1380,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1372,
+ "src": "5360:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 1381,
+ "name": "data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1374,
+ "src": "5368:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "hexValue": "416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564",
+ "id": 1382,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5374:39:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
+ "typeString": "literal_string \"Address: low-level static call failed\""
+ },
+ "value": "Address: low-level static call failed"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
+ "typeString": "literal_string \"Address: low-level static call failed\""
+ }
+ ],
+ "id": 1379,
+ "name": "functionStaticCall",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 1386,
+ 1421
+ ],
+ "referencedDeclaration": 1421,
+ "src": "5341:18:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (address,bytes memory,string memory) view returns (bytes memory)"
+ }
+ },
+ "id": 1383,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5341:73:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1378,
+ "id": 1384,
+ "nodeType": "Return",
+ "src": "5334:80:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1370,
+ "nodeType": "StructuredDocumentation",
+ "src": "5053:166:6",
+ "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
+ },
+ "id": 1386,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "functionStaticCall",
+ "nameLocation": "5233:18:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1375,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1372,
+ "mutability": "mutable",
+ "name": "target",
+ "nameLocation": "5260:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1386,
+ "src": "5252:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1371,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5252:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1374,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "5281:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1386,
+ "src": "5268:17:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1373,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "5268:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "5251:35:6"
+ },
+ "returnParameters": {
+ "id": 1378,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1377,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1386,
+ "src": "5310:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1376,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "5310:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "5309:14:6"
+ },
+ "scope": 1505,
+ "src": "5224:197:6",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1420,
+ "nodeType": "Block",
+ "src": "5763:228:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 1400,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1389,
+ "src": "5792:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 1399,
+ "name": "isContract",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1228,
+ "src": "5781:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
+ "typeString": "function (address) view returns (bool)"
+ }
+ },
+ "id": 1401,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5781:18:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e7472616374",
+ "id": 1402,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5801:38:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
+ "typeString": "literal_string \"Address: static call to non-contract\""
+ },
+ "value": "Address: static call to non-contract"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
+ "typeString": "literal_string \"Address: static call to non-contract\""
+ }
+ ],
+ "id": 1398,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "5773:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1403,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5773:67:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1404,
+ "nodeType": "ExpressionStatement",
+ "src": "5773:67:6"
+ },
+ {
+ "assignments": [
+ 1406,
+ 1408
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1406,
+ "mutability": "mutable",
+ "name": "success",
+ "nameLocation": "5857:7:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1420,
+ "src": "5852:12:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1405,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "5852:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1408,
+ "mutability": "mutable",
+ "name": "returndata",
+ "nameLocation": "5879:10:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1420,
+ "src": "5866:23:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1407,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "5866:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1413,
+ "initialValue": {
+ "arguments": [
+ {
+ "id": 1411,
+ "name": "data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1391,
+ "src": "5911:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "id": 1409,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1389,
+ "src": "5893:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 1410,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "staticcall",
+ "nodeType": "MemberAccess",
+ "src": "5893:17:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
+ "typeString": "function (bytes memory) view returns (bool,bytes memory)"
+ }
+ },
+ "id": 1412,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5893:23:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
+ "typeString": "tuple(bool,bytes memory)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "5851:65:6"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1415,
+ "name": "success",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1406,
+ "src": "5950:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "id": 1416,
+ "name": "returndata",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1408,
+ "src": "5959:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "id": 1417,
+ "name": "errorMessage",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1393,
+ "src": "5971:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 1414,
+ "name": "verifyCallResult",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1504,
+ "src": "5933:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
+ }
+ },
+ "id": 1418,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5933:51:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1397,
+ "id": 1419,
+ "nodeType": "Return",
+ "src": "5926:58:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1387,
+ "nodeType": "StructuredDocumentation",
+ "src": "5427:173:6",
+ "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
+ },
+ "id": 1421,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "functionStaticCall",
+ "nameLocation": "5614:18:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1394,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1389,
+ "mutability": "mutable",
+ "name": "target",
+ "nameLocation": "5650:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1421,
+ "src": "5642:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1388,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5642:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1391,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "5679:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1421,
+ "src": "5666:17:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1390,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "5666:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1393,
+ "mutability": "mutable",
+ "name": "errorMessage",
+ "nameLocation": "5707:12:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1421,
+ "src": "5693:26:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1392,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "5693:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "5632:93:6"
+ },
+ "returnParameters": {
+ "id": 1397,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1396,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1421,
+ "src": "5749:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1395,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "5749:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "5748:14:6"
+ },
+ "scope": 1505,
+ "src": "5605:386:6",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1437,
+ "nodeType": "Block",
+ "src": "6267:101:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1432,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1424,
+ "src": "6305:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 1433,
+ "name": "data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1426,
+ "src": "6313:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "hexValue": "416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564",
+ "id": 1434,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6319:41:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
+ "typeString": "literal_string \"Address: low-level delegate call failed\""
+ },
+ "value": "Address: low-level delegate call failed"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
+ "typeString": "literal_string \"Address: low-level delegate call failed\""
+ }
+ ],
+ "id": 1431,
+ "name": "functionDelegateCall",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 1438,
+ 1473
+ ],
+ "referencedDeclaration": 1473,
+ "src": "6284:20:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
+ }
+ },
+ "id": 1435,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6284:77:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1430,
+ "id": 1436,
+ "nodeType": "Return",
+ "src": "6277:84:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1422,
+ "nodeType": "StructuredDocumentation",
+ "src": "5997:168:6",
+ "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
+ },
+ "id": 1438,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "functionDelegateCall",
+ "nameLocation": "6179:20:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1427,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1424,
+ "mutability": "mutable",
+ "name": "target",
+ "nameLocation": "6208:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1438,
+ "src": "6200:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1423,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6200:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1426,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "6229:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1438,
+ "src": "6216:17:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1425,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "6216:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "6199:35:6"
+ },
+ "returnParameters": {
+ "id": 1430,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1429,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1438,
+ "src": "6253:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1428,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "6253:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "6252:14:6"
+ },
+ "scope": 1505,
+ "src": "6170:198:6",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1472,
+ "nodeType": "Block",
+ "src": "6709:232:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 1452,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1441,
+ "src": "6738:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 1451,
+ "name": "isContract",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1228,
+ "src": "6727:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
+ "typeString": "function (address) view returns (bool)"
+ }
+ },
+ "id": 1453,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6727:18:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374",
+ "id": 1454,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6747:40:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
+ "typeString": "literal_string \"Address: delegate call to non-contract\""
+ },
+ "value": "Address: delegate call to non-contract"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
+ "typeString": "literal_string \"Address: delegate call to non-contract\""
+ }
+ ],
+ "id": 1450,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "6719:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1455,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6719:69:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1456,
+ "nodeType": "ExpressionStatement",
+ "src": "6719:69:6"
+ },
+ {
+ "assignments": [
+ 1458,
+ 1460
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1458,
+ "mutability": "mutable",
+ "name": "success",
+ "nameLocation": "6805:7:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1472,
+ "src": "6800:12:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1457,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "6800:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1460,
+ "mutability": "mutable",
+ "name": "returndata",
+ "nameLocation": "6827:10:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1472,
+ "src": "6814:23:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1459,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "6814:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1465,
+ "initialValue": {
+ "arguments": [
+ {
+ "id": 1463,
+ "name": "data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1443,
+ "src": "6861:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "id": 1461,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1441,
+ "src": "6841:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 1462,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "delegatecall",
+ "nodeType": "MemberAccess",
+ "src": "6841:19:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
+ "typeString": "function (bytes memory) returns (bool,bytes memory)"
+ }
+ },
+ "id": 1464,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6841:25:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
+ "typeString": "tuple(bool,bytes memory)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "6799:67:6"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1467,
+ "name": "success",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1458,
+ "src": "6900:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "id": 1468,
+ "name": "returndata",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1460,
+ "src": "6909:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "id": 1469,
+ "name": "errorMessage",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1445,
+ "src": "6921:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 1466,
+ "name": "verifyCallResult",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1504,
+ "src": "6883:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
+ }
+ },
+ "id": 1470,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6883:51:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1449,
+ "id": 1471,
+ "nodeType": "Return",
+ "src": "6876:58:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1439,
+ "nodeType": "StructuredDocumentation",
+ "src": "6374:175:6",
+ "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
+ },
+ "id": 1473,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "functionDelegateCall",
+ "nameLocation": "6563:20:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1446,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1441,
+ "mutability": "mutable",
+ "name": "target",
+ "nameLocation": "6601:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1473,
+ "src": "6593:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1440,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6593:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1443,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "6630:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1473,
+ "src": "6617:17:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1442,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "6617:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1445,
+ "mutability": "mutable",
+ "name": "errorMessage",
+ "nameLocation": "6658:12:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1473,
+ "src": "6644:26:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1444,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "6644:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "6583:93:6"
+ },
+ "returnParameters": {
+ "id": 1449,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1448,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1473,
+ "src": "6695:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1447,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "6695:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "6694:14:6"
+ },
+ "scope": 1505,
+ "src": "6554:387:6",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1503,
+ "nodeType": "Block",
+ "src": "7321:532:6",
+ "statements": [
+ {
+ "condition": {
+ "id": 1485,
+ "name": "success",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1476,
+ "src": "7335:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 1501,
+ "nodeType": "Block",
+ "src": "7392:455:6",
+ "statements": [
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1492,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "id": 1489,
+ "name": "returndata",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1478,
+ "src": "7476:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 1490,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "src": "7476:17:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1491,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7496:1:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "7476:21:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 1499,
+ "nodeType": "Block",
+ "src": "7784:53:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1496,
+ "name": "errorMessage",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1480,
+ "src": "7809:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 1495,
+ "name": "revert",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967277,
+ 4294967277
+ ],
+ "referencedDeclaration": 4294967277,
+ "src": "7802:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (string memory) pure"
+ }
+ },
+ "id": 1497,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7802:20:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1498,
+ "nodeType": "ExpressionStatement",
+ "src": "7802:20:6"
+ }
+ ]
+ },
+ "id": 1500,
+ "nodeType": "IfStatement",
+ "src": "7472:365:6",
+ "trueBody": {
+ "id": 1494,
+ "nodeType": "Block",
+ "src": "7499:279:6",
+ "statements": [
+ {
+ "AST": {
+ "nodeType": "YulBlock",
+ "src": "7619:145:6",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "7641:40:6",
+ "value": {
+ "arguments": [
+ {
+ "name": "returndata",
+ "nodeType": "YulIdentifier",
+ "src": "7670:10:6"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "7664:5:6"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7664:17:6"
+ },
+ "variables": [
+ {
+ "name": "returndata_size",
+ "nodeType": "YulTypedName",
+ "src": "7645:15:6",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "7713:2:6",
+ "type": "",
+ "value": "32"
+ },
+ {
+ "name": "returndata",
+ "nodeType": "YulIdentifier",
+ "src": "7717:10:6"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "7709:3:6"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7709:19:6"
+ },
+ {
+ "name": "returndata_size",
+ "nodeType": "YulIdentifier",
+ "src": "7730:15:6"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "7702:6:6"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7702:44:6"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "7702:44:6"
+ }
+ ]
+ },
+ "evmVersion": "berlin",
+ "externalReferences": [
+ {
+ "declaration": 1478,
+ "isOffset": false,
+ "isSlot": false,
+ "src": "7670:10:6",
+ "valueSize": 1
+ },
+ {
+ "declaration": 1478,
+ "isOffset": false,
+ "isSlot": false,
+ "src": "7717:10:6",
+ "valueSize": 1
+ }
+ ],
+ "id": 1493,
+ "nodeType": "InlineAssembly",
+ "src": "7610:154:6"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "id": 1502,
+ "nodeType": "IfStatement",
+ "src": "7331:516:6",
+ "trueBody": {
+ "id": 1488,
+ "nodeType": "Block",
+ "src": "7344:42:6",
+ "statements": [
+ {
+ "expression": {
+ "id": 1486,
+ "name": "returndata",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1478,
+ "src": "7365:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1484,
+ "id": 1487,
+ "nodeType": "Return",
+ "src": "7358:17:6"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1474,
+ "nodeType": "StructuredDocumentation",
+ "src": "6947:209:6",
+ "text": " @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason using the provided one.\n _Available since v4.3._"
+ },
+ "id": 1504,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "verifyCallResult",
+ "nameLocation": "7170:16:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1481,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1476,
+ "mutability": "mutable",
+ "name": "success",
+ "nameLocation": "7201:7:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1504,
+ "src": "7196:12:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1475,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "7196:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1478,
+ "mutability": "mutable",
+ "name": "returndata",
+ "nameLocation": "7231:10:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1504,
+ "src": "7218:23:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1477,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "7218:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1480,
+ "mutability": "mutable",
+ "name": "errorMessage",
+ "nameLocation": "7265:12:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1504,
+ "src": "7251:26:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1479,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "7251:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "7186:97:6"
+ },
+ "returnParameters": {
+ "id": 1484,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1483,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1504,
+ "src": "7307:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1482,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "7307:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "7306:14:6"
+ },
+ "scope": 1505,
+ "src": "7161:692:6",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 1506,
+ "src": "126:7729:6",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:7823:6"
+ },
+ "legacyAST": {
+ "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
+ "exportedSymbols": {
+ "Address": [
+ 1505
+ ]
+ },
+ "id": 1506,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1210,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:6"
+ },
+ {
+ "abstract": false,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "library",
+ "documentation": {
+ "id": 1211,
+ "nodeType": "StructuredDocumentation",
+ "src": "58:67:6",
+ "text": " @dev Collection of functions related to the address type"
+ },
+ "fullyImplemented": true,
+ "id": 1505,
+ "linearizedBaseContracts": [
+ 1505
+ ],
+ "name": "Address",
+ "nameLocation": "134:7:6",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "body": {
+ "id": 1227,
+ "nodeType": "Block",
+ "src": "784:311:6",
+ "statements": [
+ {
+ "assignments": [
+ 1220
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1220,
+ "mutability": "mutable",
+ "name": "size",
+ "nameLocation": "989:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1227,
+ "src": "981:12:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1219,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "981:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1221,
+ "nodeType": "VariableDeclarationStatement",
+ "src": "981:12:6"
+ },
+ {
+ "AST": {
+ "nodeType": "YulBlock",
+ "src": "1012:52:6",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "1026:28:6",
+ "value": {
+ "arguments": [
+ {
+ "name": "account",
+ "nodeType": "YulIdentifier",
+ "src": "1046:7:6"
+ }
+ ],
+ "functionName": {
+ "name": "extcodesize",
+ "nodeType": "YulIdentifier",
+ "src": "1034:11:6"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1034:20:6"
+ },
+ "variableNames": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "1026:4:6"
+ }
+ ]
+ }
+ ]
+ },
+ "evmVersion": "berlin",
+ "externalReferences": [
+ {
+ "declaration": 1214,
+ "isOffset": false,
+ "isSlot": false,
+ "src": "1046:7:6",
+ "valueSize": 1
+ },
+ {
+ "declaration": 1220,
+ "isOffset": false,
+ "isSlot": false,
+ "src": "1026:4:6",
+ "valueSize": 1
+ }
+ ],
+ "id": 1222,
+ "nodeType": "InlineAssembly",
+ "src": "1003:61:6"
+ },
+ {
+ "expression": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1225,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1223,
+ "name": "size",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1220,
+ "src": "1080:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1224,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1087:1:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1080:8:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 1218,
+ "id": 1226,
+ "nodeType": "Return",
+ "src": "1073:15:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1212,
+ "nodeType": "StructuredDocumentation",
+ "src": "148:565:6",
+ "text": " @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n - an externally-owned account\n - a contract in construction\n - an address where a contract will be created\n - an address where a contract lived, but was destroyed\n ===="
+ },
+ "id": 1228,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "isContract",
+ "nameLocation": "727:10:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1215,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1214,
+ "mutability": "mutable",
+ "name": "account",
+ "nameLocation": "746:7:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1228,
+ "src": "738:15:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1213,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "738:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "737:17:6"
+ },
+ "returnParameters": {
+ "id": 1218,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1217,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1228,
+ "src": "778:4:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1216,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "778:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "777:6:6"
+ },
+ "scope": 1505,
+ "src": "718:377:6",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1261,
+ "nodeType": "Block",
+ "src": "2083:241:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1243,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1239,
+ "name": "this",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967268,
+ "src": "2109:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_Address_$1505",
+ "typeString": "library Address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_Address_$1505",
+ "typeString": "library Address"
+ }
+ ],
+ "id": 1238,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "2101:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 1237,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2101:7:6",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1240,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2101:13:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 1241,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "balance",
+ "nodeType": "MemberAccess",
+ "src": "2101:21:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">=",
+ "rightExpression": {
+ "id": 1242,
+ "name": "amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1233,
+ "src": "2126:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "2101:31:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "416464726573733a20696e73756666696369656e742062616c616e6365",
+ "id": 1244,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2134:31:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
+ "typeString": "literal_string \"Address: insufficient balance\""
+ },
+ "value": "Address: insufficient balance"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
+ "typeString": "literal_string \"Address: insufficient balance\""
+ }
+ ],
+ "id": 1236,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "2093:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1245,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2093:73:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1246,
+ "nodeType": "ExpressionStatement",
+ "src": "2093:73:6"
+ },
+ {
+ "assignments": [
+ 1248,
+ null
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1248,
+ "mutability": "mutable",
+ "name": "success",
+ "nameLocation": "2183:7:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1261,
+ "src": "2178:12:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1247,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "2178:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ },
+ null
+ ],
+ "id": 1255,
+ "initialValue": {
+ "arguments": [
+ {
+ "hexValue": "",
+ "id": 1253,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2226:2:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ },
+ "value": ""
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ }
+ ],
+ "expression": {
+ "id": 1249,
+ "name": "recipient",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1231,
+ "src": "2196:9:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "id": 1250,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "call",
+ "nodeType": "MemberAccess",
+ "src": "2196:14:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
+ "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
+ }
+ },
+ "id": 1252,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "names": [
+ "value"
+ ],
+ "nodeType": "FunctionCallOptions",
+ "options": [
+ {
+ "id": 1251,
+ "name": "amount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1233,
+ "src": "2218:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "src": "2196:29:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
+ "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
+ }
+ },
+ "id": 1254,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2196:33:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
+ "typeString": "tuple(bool,bytes memory)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "2177:52:6"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1257,
+ "name": "success",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1248,
+ "src": "2247:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564",
+ "id": 1258,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2256:60:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
+ "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
+ },
+ "value": "Address: unable to send value, recipient may have reverted"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
+ "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
+ }
+ ],
+ "id": 1256,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "2239:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1259,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2239:78:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1260,
+ "nodeType": "ExpressionStatement",
+ "src": "2239:78:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1229,
+ "nodeType": "StructuredDocumentation",
+ "src": "1101:906:6",
+ "text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."
+ },
+ "id": 1262,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "sendValue",
+ "nameLocation": "2021:9:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1234,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1231,
+ "mutability": "mutable",
+ "name": "recipient",
+ "nameLocation": "2047:9:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1262,
+ "src": "2031:25:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ },
+ "typeName": {
+ "id": 1230,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2031:15:6",
+ "stateMutability": "payable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1233,
+ "mutability": "mutable",
+ "name": "amount",
+ "nameLocation": "2066:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1262,
+ "src": "2058:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1232,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2058:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2030:43:6"
+ },
+ "returnParameters": {
+ "id": 1235,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2083:0:6"
+ },
+ "scope": 1505,
+ "src": "2012:312:6",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1278,
+ "nodeType": "Block",
+ "src": "3155:84:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1273,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1265,
+ "src": "3185:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 1274,
+ "name": "data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1267,
+ "src": "3193:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564",
+ "id": 1275,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3199:32:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
+ "typeString": "literal_string \"Address: low-level call failed\""
+ },
+ "value": "Address: low-level call failed"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
+ "typeString": "literal_string \"Address: low-level call failed\""
+ }
+ ],
+ "id": 1272,
+ "name": "functionCall",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 1279,
+ 1299
+ ],
+ "referencedDeclaration": 1299,
+ "src": "3172:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
+ }
+ },
+ "id": 1276,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3172:60:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1271,
+ "id": 1277,
+ "nodeType": "Return",
+ "src": "3165:67:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1263,
+ "nodeType": "StructuredDocumentation",
+ "src": "2330:731:6",
+ "text": " @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"
+ },
+ "id": 1279,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "functionCall",
+ "nameLocation": "3075:12:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1268,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1265,
+ "mutability": "mutable",
+ "name": "target",
+ "nameLocation": "3096:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1279,
+ "src": "3088:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1264,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3088:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1267,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "3117:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1279,
+ "src": "3104:17:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1266,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "3104:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3087:35:6"
+ },
+ "returnParameters": {
+ "id": 1271,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1270,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1279,
+ "src": "3141:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1269,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "3141:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3140:14:6"
+ },
+ "scope": 1505,
+ "src": "3066:173:6",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1298,
+ "nodeType": "Block",
+ "src": "3608:76:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1292,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1282,
+ "src": "3647:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 1293,
+ "name": "data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1284,
+ "src": "3655:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "hexValue": "30",
+ "id": 1294,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3661:1:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ {
+ "id": 1295,
+ "name": "errorMessage",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1286,
+ "src": "3664:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 1291,
+ "name": "functionCallWithValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 1319,
+ 1369
+ ],
+ "referencedDeclaration": 1369,
+ "src": "3625:21:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
+ }
+ },
+ "id": 1296,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3625:52:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1290,
+ "id": 1297,
+ "nodeType": "Return",
+ "src": "3618:59:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1280,
+ "nodeType": "StructuredDocumentation",
+ "src": "3245:211:6",
+ "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
+ },
+ "id": 1299,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "functionCall",
+ "nameLocation": "3470:12:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1287,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1282,
+ "mutability": "mutable",
+ "name": "target",
+ "nameLocation": "3500:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1299,
+ "src": "3492:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1281,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3492:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1284,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "3529:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1299,
+ "src": "3516:17:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1283,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "3516:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1286,
+ "mutability": "mutable",
+ "name": "errorMessage",
+ "nameLocation": "3557:12:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1299,
+ "src": "3543:26:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1285,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "3543:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3482:93:6"
+ },
+ "returnParameters": {
+ "id": 1290,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1289,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1299,
+ "src": "3594:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1288,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "3594:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3593:14:6"
+ },
+ "scope": 1505,
+ "src": "3461:223:6",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1318,
+ "nodeType": "Block",
+ "src": "4189:111:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1312,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1302,
+ "src": "4228:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 1313,
+ "name": "data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1304,
+ "src": "4236:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "id": 1314,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1306,
+ "src": "4242:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564",
+ "id": 1315,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4249:43:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
+ "typeString": "literal_string \"Address: low-level call with value failed\""
+ },
+ "value": "Address: low-level call with value failed"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
+ "typeString": "literal_string \"Address: low-level call with value failed\""
+ }
+ ],
+ "id": 1311,
+ "name": "functionCallWithValue",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 1319,
+ 1369
+ ],
+ "referencedDeclaration": 1369,
+ "src": "4206:21:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
+ }
+ },
+ "id": 1316,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4206:87:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1310,
+ "id": 1317,
+ "nodeType": "Return",
+ "src": "4199:94:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1300,
+ "nodeType": "StructuredDocumentation",
+ "src": "3690:351:6",
+ "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"
+ },
+ "id": 1319,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "functionCallWithValue",
+ "nameLocation": "4055:21:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1307,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1302,
+ "mutability": "mutable",
+ "name": "target",
+ "nameLocation": "4094:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1319,
+ "src": "4086:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1301,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4086:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1304,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "4123:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1319,
+ "src": "4110:17:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1303,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "4110:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1306,
+ "mutability": "mutable",
+ "name": "value",
+ "nameLocation": "4145:5:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1319,
+ "src": "4137:13:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1305,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4137:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4076:80:6"
+ },
+ "returnParameters": {
+ "id": 1310,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1309,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1319,
+ "src": "4175:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1308,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "4175:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4174:14:6"
+ },
+ "scope": 1505,
+ "src": "4046:254:6",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1368,
+ "nodeType": "Block",
+ "src": "4727:320:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1340,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1336,
+ "name": "this",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967268,
+ "src": "4753:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_Address_$1505",
+ "typeString": "library Address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_Address_$1505",
+ "typeString": "library Address"
+ }
+ ],
+ "id": 1335,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "4745:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 1334,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4745:7:6",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1337,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4745:13:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 1338,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "balance",
+ "nodeType": "MemberAccess",
+ "src": "4745:21:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">=",
+ "rightExpression": {
+ "id": 1339,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1326,
+ "src": "4770:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "4745:30:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c",
+ "id": 1341,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4777:40:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
+ "typeString": "literal_string \"Address: insufficient balance for call\""
+ },
+ "value": "Address: insufficient balance for call"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
+ "typeString": "literal_string \"Address: insufficient balance for call\""
+ }
+ ],
+ "id": 1333,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "4737:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1342,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4737:81:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1343,
+ "nodeType": "ExpressionStatement",
+ "src": "4737:81:6"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 1346,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1322,
+ "src": "4847:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 1345,
+ "name": "isContract",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1228,
+ "src": "4836:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
+ "typeString": "function (address) view returns (bool)"
+ }
+ },
+ "id": 1347,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4836:18:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
+ "id": 1348,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4856:31:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
+ "typeString": "literal_string \"Address: call to non-contract\""
+ },
+ "value": "Address: call to non-contract"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
+ "typeString": "literal_string \"Address: call to non-contract\""
+ }
+ ],
+ "id": 1344,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "4828:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1349,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4828:60:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1350,
+ "nodeType": "ExpressionStatement",
+ "src": "4828:60:6"
+ },
+ {
+ "assignments": [
+ 1352,
+ 1354
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1352,
+ "mutability": "mutable",
+ "name": "success",
+ "nameLocation": "4905:7:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1368,
+ "src": "4900:12:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1351,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "4900:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1354,
+ "mutability": "mutable",
+ "name": "returndata",
+ "nameLocation": "4927:10:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1368,
+ "src": "4914:23:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1353,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "4914:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1361,
+ "initialValue": {
+ "arguments": [
+ {
+ "id": 1359,
+ "name": "data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1324,
+ "src": "4967:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "id": 1355,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1322,
+ "src": "4941:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 1356,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "call",
+ "nodeType": "MemberAccess",
+ "src": "4941:11:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
+ "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
+ }
+ },
+ "id": 1358,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "names": [
+ "value"
+ ],
+ "nodeType": "FunctionCallOptions",
+ "options": [
+ {
+ "id": 1357,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1326,
+ "src": "4960:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "src": "4941:25:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
+ "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
+ }
+ },
+ "id": 1360,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4941:31:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
+ "typeString": "tuple(bool,bytes memory)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "4899:73:6"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1363,
+ "name": "success",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1352,
+ "src": "5006:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "id": 1364,
+ "name": "returndata",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1354,
+ "src": "5015:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "id": 1365,
+ "name": "errorMessage",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1328,
+ "src": "5027:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 1362,
+ "name": "verifyCallResult",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1504,
+ "src": "4989:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
+ }
+ },
+ "id": 1366,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4989:51:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1332,
+ "id": 1367,
+ "nodeType": "Return",
+ "src": "4982:58:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1320,
+ "nodeType": "StructuredDocumentation",
+ "src": "4306:237:6",
+ "text": " @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
+ },
+ "id": 1369,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "functionCallWithValue",
+ "nameLocation": "4557:21:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1329,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1322,
+ "mutability": "mutable",
+ "name": "target",
+ "nameLocation": "4596:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1369,
+ "src": "4588:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1321,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4588:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1324,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "4625:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1369,
+ "src": "4612:17:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1323,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "4612:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1326,
+ "mutability": "mutable",
+ "name": "value",
+ "nameLocation": "4647:5:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1369,
+ "src": "4639:13:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1325,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4639:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1328,
+ "mutability": "mutable",
+ "name": "errorMessage",
+ "nameLocation": "4676:12:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1369,
+ "src": "4662:26:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1327,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "4662:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4578:116:6"
+ },
+ "returnParameters": {
+ "id": 1332,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1331,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1369,
+ "src": "4713:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1330,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "4713:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4712:14:6"
+ },
+ "scope": 1505,
+ "src": "4548:499:6",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1385,
+ "nodeType": "Block",
+ "src": "5324:97:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1380,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1372,
+ "src": "5360:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 1381,
+ "name": "data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1374,
+ "src": "5368:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "hexValue": "416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564",
+ "id": 1382,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5374:39:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
+ "typeString": "literal_string \"Address: low-level static call failed\""
+ },
+ "value": "Address: low-level static call failed"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
+ "typeString": "literal_string \"Address: low-level static call failed\""
+ }
+ ],
+ "id": 1379,
+ "name": "functionStaticCall",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 1386,
+ 1421
+ ],
+ "referencedDeclaration": 1421,
+ "src": "5341:18:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (address,bytes memory,string memory) view returns (bytes memory)"
+ }
+ },
+ "id": 1383,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5341:73:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1378,
+ "id": 1384,
+ "nodeType": "Return",
+ "src": "5334:80:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1370,
+ "nodeType": "StructuredDocumentation",
+ "src": "5053:166:6",
+ "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
+ },
+ "id": 1386,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "functionStaticCall",
+ "nameLocation": "5233:18:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1375,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1372,
+ "mutability": "mutable",
+ "name": "target",
+ "nameLocation": "5260:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1386,
+ "src": "5252:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1371,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5252:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1374,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "5281:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1386,
+ "src": "5268:17:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1373,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "5268:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "5251:35:6"
+ },
+ "returnParameters": {
+ "id": 1378,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1377,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1386,
+ "src": "5310:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1376,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "5310:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "5309:14:6"
+ },
+ "scope": 1505,
+ "src": "5224:197:6",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1420,
+ "nodeType": "Block",
+ "src": "5763:228:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 1400,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1389,
+ "src": "5792:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 1399,
+ "name": "isContract",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1228,
+ "src": "5781:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
+ "typeString": "function (address) view returns (bool)"
+ }
+ },
+ "id": 1401,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5781:18:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e7472616374",
+ "id": 1402,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5801:38:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
+ "typeString": "literal_string \"Address: static call to non-contract\""
+ },
+ "value": "Address: static call to non-contract"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
+ "typeString": "literal_string \"Address: static call to non-contract\""
+ }
+ ],
+ "id": 1398,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "5773:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1403,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5773:67:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1404,
+ "nodeType": "ExpressionStatement",
+ "src": "5773:67:6"
+ },
+ {
+ "assignments": [
+ 1406,
+ 1408
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1406,
+ "mutability": "mutable",
+ "name": "success",
+ "nameLocation": "5857:7:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1420,
+ "src": "5852:12:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1405,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "5852:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1408,
+ "mutability": "mutable",
+ "name": "returndata",
+ "nameLocation": "5879:10:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1420,
+ "src": "5866:23:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1407,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "5866:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1413,
+ "initialValue": {
+ "arguments": [
+ {
+ "id": 1411,
+ "name": "data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1391,
+ "src": "5911:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "id": 1409,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1389,
+ "src": "5893:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 1410,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "staticcall",
+ "nodeType": "MemberAccess",
+ "src": "5893:17:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
+ "typeString": "function (bytes memory) view returns (bool,bytes memory)"
+ }
+ },
+ "id": 1412,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5893:23:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
+ "typeString": "tuple(bool,bytes memory)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "5851:65:6"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1415,
+ "name": "success",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1406,
+ "src": "5950:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "id": 1416,
+ "name": "returndata",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1408,
+ "src": "5959:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "id": 1417,
+ "name": "errorMessage",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1393,
+ "src": "5971:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 1414,
+ "name": "verifyCallResult",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1504,
+ "src": "5933:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
+ }
+ },
+ "id": 1418,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5933:51:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1397,
+ "id": 1419,
+ "nodeType": "Return",
+ "src": "5926:58:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1387,
+ "nodeType": "StructuredDocumentation",
+ "src": "5427:173:6",
+ "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
+ },
+ "id": 1421,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "functionStaticCall",
+ "nameLocation": "5614:18:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1394,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1389,
+ "mutability": "mutable",
+ "name": "target",
+ "nameLocation": "5650:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1421,
+ "src": "5642:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1388,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5642:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1391,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "5679:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1421,
+ "src": "5666:17:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1390,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "5666:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1393,
+ "mutability": "mutable",
+ "name": "errorMessage",
+ "nameLocation": "5707:12:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1421,
+ "src": "5693:26:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1392,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "5693:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "5632:93:6"
+ },
+ "returnParameters": {
+ "id": 1397,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1396,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1421,
+ "src": "5749:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1395,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "5749:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "5748:14:6"
+ },
+ "scope": 1505,
+ "src": "5605:386:6",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1437,
+ "nodeType": "Block",
+ "src": "6267:101:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1432,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1424,
+ "src": "6305:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 1433,
+ "name": "data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1426,
+ "src": "6313:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "hexValue": "416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564",
+ "id": 1434,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6319:41:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
+ "typeString": "literal_string \"Address: low-level delegate call failed\""
+ },
+ "value": "Address: low-level delegate call failed"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
+ "typeString": "literal_string \"Address: low-level delegate call failed\""
+ }
+ ],
+ "id": 1431,
+ "name": "functionDelegateCall",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 1438,
+ 1473
+ ],
+ "referencedDeclaration": 1473,
+ "src": "6284:20:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
+ }
+ },
+ "id": 1435,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6284:77:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1430,
+ "id": 1436,
+ "nodeType": "Return",
+ "src": "6277:84:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1422,
+ "nodeType": "StructuredDocumentation",
+ "src": "5997:168:6",
+ "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
+ },
+ "id": 1438,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "functionDelegateCall",
+ "nameLocation": "6179:20:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1427,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1424,
+ "mutability": "mutable",
+ "name": "target",
+ "nameLocation": "6208:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1438,
+ "src": "6200:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1423,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6200:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1426,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "6229:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1438,
+ "src": "6216:17:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1425,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "6216:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "6199:35:6"
+ },
+ "returnParameters": {
+ "id": 1430,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1429,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1438,
+ "src": "6253:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1428,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "6253:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "6252:14:6"
+ },
+ "scope": 1505,
+ "src": "6170:198:6",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1472,
+ "nodeType": "Block",
+ "src": "6709:232:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 1452,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1441,
+ "src": "6738:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 1451,
+ "name": "isContract",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1228,
+ "src": "6727:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
+ "typeString": "function (address) view returns (bool)"
+ }
+ },
+ "id": 1453,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6727:18:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374",
+ "id": 1454,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6747:40:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
+ "typeString": "literal_string \"Address: delegate call to non-contract\""
+ },
+ "value": "Address: delegate call to non-contract"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
+ "typeString": "literal_string \"Address: delegate call to non-contract\""
+ }
+ ],
+ "id": 1450,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "6719:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1455,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6719:69:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1456,
+ "nodeType": "ExpressionStatement",
+ "src": "6719:69:6"
+ },
+ {
+ "assignments": [
+ 1458,
+ 1460
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1458,
+ "mutability": "mutable",
+ "name": "success",
+ "nameLocation": "6805:7:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1472,
+ "src": "6800:12:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1457,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "6800:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1460,
+ "mutability": "mutable",
+ "name": "returndata",
+ "nameLocation": "6827:10:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1472,
+ "src": "6814:23:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1459,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "6814:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1465,
+ "initialValue": {
+ "arguments": [
+ {
+ "id": 1463,
+ "name": "data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1443,
+ "src": "6861:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "id": 1461,
+ "name": "target",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1441,
+ "src": "6841:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 1462,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "delegatecall",
+ "nodeType": "MemberAccess",
+ "src": "6841:19:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
+ "typeString": "function (bytes memory) returns (bool,bytes memory)"
+ }
+ },
+ "id": 1464,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6841:25:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
+ "typeString": "tuple(bool,bytes memory)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "6799:67:6"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1467,
+ "name": "success",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1458,
+ "src": "6900:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "id": 1468,
+ "name": "returndata",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1460,
+ "src": "6909:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "id": 1469,
+ "name": "errorMessage",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1445,
+ "src": "6921:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 1466,
+ "name": "verifyCallResult",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1504,
+ "src": "6883:16:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
+ }
+ },
+ "id": 1470,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6883:51:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1449,
+ "id": 1471,
+ "nodeType": "Return",
+ "src": "6876:58:6"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1439,
+ "nodeType": "StructuredDocumentation",
+ "src": "6374:175:6",
+ "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
+ },
+ "id": 1473,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "functionDelegateCall",
+ "nameLocation": "6563:20:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1446,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1441,
+ "mutability": "mutable",
+ "name": "target",
+ "nameLocation": "6601:6:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1473,
+ "src": "6593:14:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1440,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6593:7:6",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1443,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "6630:4:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1473,
+ "src": "6617:17:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1442,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "6617:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1445,
+ "mutability": "mutable",
+ "name": "errorMessage",
+ "nameLocation": "6658:12:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1473,
+ "src": "6644:26:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1444,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "6644:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "6583:93:6"
+ },
+ "returnParameters": {
+ "id": 1449,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1448,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1473,
+ "src": "6695:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1447,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "6695:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "6694:14:6"
+ },
+ "scope": 1505,
+ "src": "6554:387:6",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1503,
+ "nodeType": "Block",
+ "src": "7321:532:6",
+ "statements": [
+ {
+ "condition": {
+ "id": 1485,
+ "name": "success",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1476,
+ "src": "7335:7:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 1501,
+ "nodeType": "Block",
+ "src": "7392:455:6",
+ "statements": [
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1492,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "id": 1489,
+ "name": "returndata",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1478,
+ "src": "7476:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 1490,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "src": "7476:17:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1491,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7496:1:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "7476:21:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 1499,
+ "nodeType": "Block",
+ "src": "7784:53:6",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1496,
+ "name": "errorMessage",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1480,
+ "src": "7809:12:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 1495,
+ "name": "revert",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967277,
+ 4294967277
+ ],
+ "referencedDeclaration": 4294967277,
+ "src": "7802:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (string memory) pure"
+ }
+ },
+ "id": 1497,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7802:20:6",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1498,
+ "nodeType": "ExpressionStatement",
+ "src": "7802:20:6"
+ }
+ ]
+ },
+ "id": 1500,
+ "nodeType": "IfStatement",
+ "src": "7472:365:6",
+ "trueBody": {
+ "id": 1494,
+ "nodeType": "Block",
+ "src": "7499:279:6",
+ "statements": [
+ {
+ "AST": {
+ "nodeType": "YulBlock",
+ "src": "7619:145:6",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "7641:40:6",
+ "value": {
+ "arguments": [
+ {
+ "name": "returndata",
+ "nodeType": "YulIdentifier",
+ "src": "7670:10:6"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "7664:5:6"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7664:17:6"
+ },
+ "variables": [
+ {
+ "name": "returndata_size",
+ "nodeType": "YulTypedName",
+ "src": "7645:15:6",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "7713:2:6",
+ "type": "",
+ "value": "32"
+ },
+ {
+ "name": "returndata",
+ "nodeType": "YulIdentifier",
+ "src": "7717:10:6"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "7709:3:6"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7709:19:6"
+ },
+ {
+ "name": "returndata_size",
+ "nodeType": "YulIdentifier",
+ "src": "7730:15:6"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "7702:6:6"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7702:44:6"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "7702:44:6"
+ }
+ ]
+ },
+ "evmVersion": "berlin",
+ "externalReferences": [
+ {
+ "declaration": 1478,
+ "isOffset": false,
+ "isSlot": false,
+ "src": "7670:10:6",
+ "valueSize": 1
+ },
+ {
+ "declaration": 1478,
+ "isOffset": false,
+ "isSlot": false,
+ "src": "7717:10:6",
+ "valueSize": 1
+ }
+ ],
+ "id": 1493,
+ "nodeType": "InlineAssembly",
+ "src": "7610:154:6"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "id": 1502,
+ "nodeType": "IfStatement",
+ "src": "7331:516:6",
+ "trueBody": {
+ "id": 1488,
+ "nodeType": "Block",
+ "src": "7344:42:6",
+ "statements": [
+ {
+ "expression": {
+ "id": 1486,
+ "name": "returndata",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1478,
+ "src": "7365:10:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "functionReturnParameters": 1484,
+ "id": 1487,
+ "nodeType": "Return",
+ "src": "7358:17:6"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1474,
+ "nodeType": "StructuredDocumentation",
+ "src": "6947:209:6",
+ "text": " @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason using the provided one.\n _Available since v4.3._"
+ },
+ "id": 1504,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "verifyCallResult",
+ "nameLocation": "7170:16:6",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1481,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1476,
+ "mutability": "mutable",
+ "name": "success",
+ "nameLocation": "7201:7:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1504,
+ "src": "7196:12:6",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1475,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "7196:4:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1478,
+ "mutability": "mutable",
+ "name": "returndata",
+ "nameLocation": "7231:10:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1504,
+ "src": "7218:23:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1477,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "7218:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1480,
+ "mutability": "mutable",
+ "name": "errorMessage",
+ "nameLocation": "7265:12:6",
+ "nodeType": "VariableDeclaration",
+ "scope": 1504,
+ "src": "7251:26:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1479,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "7251:6:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "7186:97:6"
+ },
+ "returnParameters": {
+ "id": 1484,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1483,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1504,
+ "src": "7307:12:6",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1482,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "7307:5:6",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "7306:14:6"
+ },
+ "scope": 1505,
+ "src": "7161:692:6",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 1506,
+ "src": "126:7729:6",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:7823:6"
+ },
+ "compiler": {
+ "name": "solc",
+ "version": "0.8.6+commit.11564f7e.Emscripten.clang"
+ },
+ "networks": {},
+ "schemaVersion": "3.4.3",
+ "updatedAt": "2021-09-07T13:34:26.819Z",
+ "devdoc": {
+ "details": "Collection of functions related to the address type",
+ "kind": "dev",
+ "methods": {},
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {},
+ "version": 1
+ }
+}
\ No newline at end of file
diff --git a/build/contracts/Context.json b/build/contracts/Context.json
new file mode 100644
index 0000000..def273e
--- /dev/null
+++ b/build/contracts/Context.json
@@ -0,0 +1,506 @@
+{
+ "contractName": "Context",
+ "abi": [],
+ "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"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.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x90565a39ae45c80f0468dc96c7b20d0afc3055f344c8203a0c9258239f350b9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26e8b38a7ac8e7b4463af00cf7fff1bf48ae9875765bf4f7751e100124d0bc8c\",\"dweb:/ipfs/QmWcsmkVr24xmmjfnBQZoemFniXjj3vwT78Cz6uqZW1Hux\"]}},\"version\":1}",
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "immutableReferences": {},
+ "generatedSources": [],
+ "deployedGeneratedSources": [],
+ "sourceMap": "",
+ "deployedSourceMap": "",
+ "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n",
+ "sourcePath": "@openzeppelin/contracts/utils/Context.sol",
+ "ast": {
+ "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
+ "exportedSymbols": {
+ "Context": [
+ 1527
+ ]
+ },
+ "id": 1528,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1507,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:7"
+ },
+ {
+ "abstract": true,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 1508,
+ "nodeType": "StructuredDocumentation",
+ "src": "58:496:7",
+ "text": " @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."
+ },
+ "fullyImplemented": true,
+ "id": 1527,
+ "linearizedBaseContracts": [
+ 1527
+ ],
+ "name": "Context",
+ "nameLocation": "573:7:7",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "body": {
+ "id": 1516,
+ "nodeType": "Block",
+ "src": "649:34:7",
+ "statements": [
+ {
+ "expression": {
+ "expression": {
+ "id": 1513,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967281,
+ "src": "666:3:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 1514,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "src": "666:10:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 1512,
+ "id": 1515,
+ "nodeType": "Return",
+ "src": "659:17:7"
+ }
+ ]
+ },
+ "id": 1517,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_msgSender",
+ "nameLocation": "596:10:7",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1509,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "606:2:7"
+ },
+ "returnParameters": {
+ "id": 1512,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1511,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1517,
+ "src": "640:7:7",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1510,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "640:7:7",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "639:9:7"
+ },
+ "scope": 1527,
+ "src": "587:96:7",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1525,
+ "nodeType": "Block",
+ "src": "756:32:7",
+ "statements": [
+ {
+ "expression": {
+ "expression": {
+ "id": 1522,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967281,
+ "src": "773:3:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 1523,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "data",
+ "nodeType": "MemberAccess",
+ "src": "773:8:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_calldata_ptr",
+ "typeString": "bytes calldata"
+ }
+ },
+ "functionReturnParameters": 1521,
+ "id": 1524,
+ "nodeType": "Return",
+ "src": "766:15:7"
+ }
+ ]
+ },
+ "id": 1526,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_msgData",
+ "nameLocation": "698:8:7",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1518,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "706:2:7"
+ },
+ "returnParameters": {
+ "id": 1521,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1520,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1526,
+ "src": "740:14:7",
+ "stateVariable": false,
+ "storageLocation": "calldata",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_calldata_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1519,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "740:5:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "739:16:7"
+ },
+ "scope": 1527,
+ "src": "689:99:7",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 1528,
+ "src": "555:235:7",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:758:7"
+ },
+ "legacyAST": {
+ "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
+ "exportedSymbols": {
+ "Context": [
+ 1527
+ ]
+ },
+ "id": 1528,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1507,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:7"
+ },
+ {
+ "abstract": true,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 1508,
+ "nodeType": "StructuredDocumentation",
+ "src": "58:496:7",
+ "text": " @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."
+ },
+ "fullyImplemented": true,
+ "id": 1527,
+ "linearizedBaseContracts": [
+ 1527
+ ],
+ "name": "Context",
+ "nameLocation": "573:7:7",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "body": {
+ "id": 1516,
+ "nodeType": "Block",
+ "src": "649:34:7",
+ "statements": [
+ {
+ "expression": {
+ "expression": {
+ "id": 1513,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967281,
+ "src": "666:3:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 1514,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "src": "666:10:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 1512,
+ "id": 1515,
+ "nodeType": "Return",
+ "src": "659:17:7"
+ }
+ ]
+ },
+ "id": 1517,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_msgSender",
+ "nameLocation": "596:10:7",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1509,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "606:2:7"
+ },
+ "returnParameters": {
+ "id": 1512,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1511,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1517,
+ "src": "640:7:7",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1510,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "640:7:7",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "639:9:7"
+ },
+ "scope": 1527,
+ "src": "587:96:7",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1525,
+ "nodeType": "Block",
+ "src": "756:32:7",
+ "statements": [
+ {
+ "expression": {
+ "expression": {
+ "id": 1522,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967281,
+ "src": "773:3:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 1523,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "data",
+ "nodeType": "MemberAccess",
+ "src": "773:8:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_calldata_ptr",
+ "typeString": "bytes calldata"
+ }
+ },
+ "functionReturnParameters": 1521,
+ "id": 1524,
+ "nodeType": "Return",
+ "src": "766:15:7"
+ }
+ ]
+ },
+ "id": 1526,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_msgData",
+ "nameLocation": "698:8:7",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1518,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "706:2:7"
+ },
+ "returnParameters": {
+ "id": 1521,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1520,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1526,
+ "src": "740:14:7",
+ "stateVariable": false,
+ "storageLocation": "calldata",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_calldata_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1519,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "740:5:7",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "739:16:7"
+ },
+ "scope": 1527,
+ "src": "689:99:7",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 1528,
+ "src": "555:235:7",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:758:7"
+ },
+ "compiler": {
+ "name": "solc",
+ "version": "0.8.6+commit.11564f7e.Emscripten.clang"
+ },
+ "networks": {},
+ "schemaVersion": "3.4.3",
+ "updatedAt": "2021-09-07T13:34:26.827Z",
+ "devdoc": {
+ "details": "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.",
+ "kind": "dev",
+ "methods": {},
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {},
+ "version": 1
+ }
+}
\ No newline at end of file
diff --git a/build/contracts/Counters.json b/build/contracts/Counters.json
new file mode 100644
index 0000000..f3726e6
--- /dev/null
+++ b/build/contracts/Counters.json
@@ -0,0 +1,1686 @@
+{
+ "contractName": "Counters",
+ "abi": [],
+ "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Matt Condon (@shrugs)\",\"details\":\"Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number of elements in a mapping, issuing ERC721 ids, or counting request ids. Include with `using Counters for Counters.Counter;`\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Counters\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Counters.sol\":\"Counters\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0x78450f4e3b722cce467b21e285f72ce5eaf361e9ba9dd2241a413926246773cd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f103065051300cd995fd4599ba91188d4071b92175b52f26110e02db091617c0\",\"dweb:/ipfs/QmSyDz67R2HCypDE8Pacn3voVwxw9x17NM66q47YgBnGqc\"]}},\"version\":1}",
+ "bytecode": "0x60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122026338540ad88efece722c94ac91b186f941b532177b37cd28faeac88ab1f2d5164736f6c63430008060033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122026338540ad88efece722c94ac91b186f941b532177b37cd28faeac88ab1f2d5164736f6c63430008060033",
+ "immutableReferences": {},
+ "generatedSources": [],
+ "deployedGeneratedSources": [],
+ "sourceMap": "370:971:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "deployedSourceMap": "370:971:8:-:0;;;;;;;;",
+ "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @title Counters\n * @author Matt Condon (@shrugs)\n * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\n *\n * Include with `using Counters for Counters.Counter;`\n */\nlibrary Counters {\n struct Counter {\n // This variable should never be directly accessed by users of the library: interactions must be restricted to\n // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\n // this feature: see https://github.com/ethereum/solidity/issues/4637\n uint256 _value; // default: 0\n }\n\n function current(Counter storage counter) internal view returns (uint256) {\n return counter._value;\n }\n\n function increment(Counter storage counter) internal {\n unchecked {\n counter._value += 1;\n }\n }\n\n function decrement(Counter storage counter) internal {\n uint256 value = counter._value;\n require(value > 0, \"Counter: decrement overflow\");\n unchecked {\n counter._value = value - 1;\n }\n }\n\n function reset(Counter storage counter) internal {\n counter._value = 0;\n }\n}\n",
+ "sourcePath": "@openzeppelin/contracts/utils/Counters.sol",
+ "ast": {
+ "absolutePath": "@openzeppelin/contracts/utils/Counters.sol",
+ "exportedSymbols": {
+ "Counters": [
+ 1601
+ ]
+ },
+ "id": 1602,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1529,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:8"
+ },
+ {
+ "abstract": false,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "library",
+ "documentation": {
+ "id": 1530,
+ "nodeType": "StructuredDocumentation",
+ "src": "58:311:8",
+ "text": " @title Counters\n @author Matt Condon (@shrugs)\n @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\n of elements in a mapping, issuing ERC721 ids, or counting request ids.\n Include with `using Counters for Counters.Counter;`"
+ },
+ "fullyImplemented": true,
+ "id": 1601,
+ "linearizedBaseContracts": [
+ 1601
+ ],
+ "name": "Counters",
+ "nameLocation": "378:8:8",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "canonicalName": "Counters.Counter",
+ "id": 1533,
+ "members": [
+ {
+ "constant": false,
+ "id": 1532,
+ "mutability": "mutable",
+ "name": "_value",
+ "nameLocation": "740:6:8",
+ "nodeType": "VariableDeclaration",
+ "scope": 1533,
+ "src": "732:14:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1531,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "732:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "name": "Counter",
+ "nameLocation": "400:7:8",
+ "nodeType": "StructDefinition",
+ "scope": 1601,
+ "src": "393:374:8",
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 1544,
+ "nodeType": "Block",
+ "src": "847:38:8",
+ "statements": [
+ {
+ "expression": {
+ "expression": {
+ "id": 1541,
+ "name": "counter",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1536,
+ "src": "864:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter storage pointer"
+ }
+ },
+ "id": 1542,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_value",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1532,
+ "src": "864:14:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 1540,
+ "id": 1543,
+ "nodeType": "Return",
+ "src": "857:21:8"
+ }
+ ]
+ },
+ "id": 1545,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "current",
+ "nameLocation": "782:7:8",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1537,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1536,
+ "mutability": "mutable",
+ "name": "counter",
+ "nameLocation": "806:7:8",
+ "nodeType": "VariableDeclaration",
+ "scope": 1545,
+ "src": "790:23:8",
+ "stateVariable": false,
+ "storageLocation": "storage",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ },
+ "typeName": {
+ "id": 1535,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 1534,
+ "name": "Counter",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1533,
+ "src": "790:7:8"
+ },
+ "referencedDeclaration": 1533,
+ "src": "790:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "789:25:8"
+ },
+ "returnParameters": {
+ "id": 1540,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1539,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1545,
+ "src": "838:7:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1538,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "838:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "837:9:8"
+ },
+ "scope": 1601,
+ "src": "773:112:8",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1558,
+ "nodeType": "Block",
+ "src": "944:70:8",
+ "statements": [
+ {
+ "id": 1557,
+ "nodeType": "UncheckedBlock",
+ "src": "954:54:8",
+ "statements": [
+ {
+ "expression": {
+ "id": 1555,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "expression": {
+ "id": 1551,
+ "name": "counter",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1548,
+ "src": "978:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter storage pointer"
+ }
+ },
+ "id": 1553,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "_value",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1532,
+ "src": "978:14:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "+=",
+ "rightHandSide": {
+ "hexValue": "31",
+ "id": 1554,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "996:1:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "978:19:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1556,
+ "nodeType": "ExpressionStatement",
+ "src": "978:19:8"
+ }
+ ]
+ }
+ ]
+ },
+ "id": 1559,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "increment",
+ "nameLocation": "900:9:8",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1549,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1548,
+ "mutability": "mutable",
+ "name": "counter",
+ "nameLocation": "926:7:8",
+ "nodeType": "VariableDeclaration",
+ "scope": 1559,
+ "src": "910:23:8",
+ "stateVariable": false,
+ "storageLocation": "storage",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ },
+ "typeName": {
+ "id": 1547,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 1546,
+ "name": "Counter",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1533,
+ "src": "910:7:8"
+ },
+ "referencedDeclaration": 1533,
+ "src": "910:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "909:25:8"
+ },
+ "returnParameters": {
+ "id": 1550,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "944:0:8"
+ },
+ "scope": 1601,
+ "src": "891:123:8",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1586,
+ "nodeType": "Block",
+ "src": "1073:176:8",
+ "statements": [
+ {
+ "assignments": [
+ 1566
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1566,
+ "mutability": "mutable",
+ "name": "value",
+ "nameLocation": "1091:5:8",
+ "nodeType": "VariableDeclaration",
+ "scope": 1586,
+ "src": "1083:13:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1565,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1083:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1569,
+ "initialValue": {
+ "expression": {
+ "id": 1567,
+ "name": "counter",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1562,
+ "src": "1099:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter storage pointer"
+ }
+ },
+ "id": 1568,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_value",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1532,
+ "src": "1099:14:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1083:30:8"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1573,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1571,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1566,
+ "src": "1131:5:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1572,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1139:1:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1131:9:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "436f756e7465723a2064656372656d656e74206f766572666c6f77",
+ "id": 1574,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1142:29:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_1dfd0d5389474d871b8e8929aab9d4def041f55f90f625754fb5f9a9ba08af6f",
+ "typeString": "literal_string \"Counter: decrement overflow\""
+ },
+ "value": "Counter: decrement overflow"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_1dfd0d5389474d871b8e8929aab9d4def041f55f90f625754fb5f9a9ba08af6f",
+ "typeString": "literal_string \"Counter: decrement overflow\""
+ }
+ ],
+ "id": 1570,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "1123:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1575,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1123:49:8",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1576,
+ "nodeType": "ExpressionStatement",
+ "src": "1123:49:8"
+ },
+ {
+ "id": 1585,
+ "nodeType": "UncheckedBlock",
+ "src": "1182:61:8",
+ "statements": [
+ {
+ "expression": {
+ "id": 1583,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "expression": {
+ "id": 1577,
+ "name": "counter",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1562,
+ "src": "1206:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter storage pointer"
+ }
+ },
+ "id": 1579,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "_value",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1532,
+ "src": "1206:14:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1582,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1580,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1566,
+ "src": "1223:5:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "-",
+ "rightExpression": {
+ "hexValue": "31",
+ "id": 1581,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1231:1:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "1223:9:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "1206:26:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1584,
+ "nodeType": "ExpressionStatement",
+ "src": "1206:26:8"
+ }
+ ]
+ }
+ ]
+ },
+ "id": 1587,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "decrement",
+ "nameLocation": "1029:9:8",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1563,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1562,
+ "mutability": "mutable",
+ "name": "counter",
+ "nameLocation": "1055:7:8",
+ "nodeType": "VariableDeclaration",
+ "scope": 1587,
+ "src": "1039:23:8",
+ "stateVariable": false,
+ "storageLocation": "storage",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ },
+ "typeName": {
+ "id": 1561,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 1560,
+ "name": "Counter",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1533,
+ "src": "1039:7:8"
+ },
+ "referencedDeclaration": 1533,
+ "src": "1039:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1038:25:8"
+ },
+ "returnParameters": {
+ "id": 1564,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1073:0:8"
+ },
+ "scope": 1601,
+ "src": "1020:229:8",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1599,
+ "nodeType": "Block",
+ "src": "1304:35:8",
+ "statements": [
+ {
+ "expression": {
+ "id": 1597,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "expression": {
+ "id": 1593,
+ "name": "counter",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1590,
+ "src": "1314:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter storage pointer"
+ }
+ },
+ "id": 1595,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "_value",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1532,
+ "src": "1314:14:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "hexValue": "30",
+ "id": 1596,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1331:1:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1314:18:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1598,
+ "nodeType": "ExpressionStatement",
+ "src": "1314:18:8"
+ }
+ ]
+ },
+ "id": 1600,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "reset",
+ "nameLocation": "1264:5:8",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1591,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1590,
+ "mutability": "mutable",
+ "name": "counter",
+ "nameLocation": "1286:7:8",
+ "nodeType": "VariableDeclaration",
+ "scope": 1600,
+ "src": "1270:23:8",
+ "stateVariable": false,
+ "storageLocation": "storage",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ },
+ "typeName": {
+ "id": 1589,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 1588,
+ "name": "Counter",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1533,
+ "src": "1270:7:8"
+ },
+ "referencedDeclaration": 1533,
+ "src": "1270:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1269:25:8"
+ },
+ "returnParameters": {
+ "id": 1592,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1304:0:8"
+ },
+ "scope": 1601,
+ "src": "1255:84:8",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 1602,
+ "src": "370:971:8",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:1309:8"
+ },
+ "legacyAST": {
+ "absolutePath": "@openzeppelin/contracts/utils/Counters.sol",
+ "exportedSymbols": {
+ "Counters": [
+ 1601
+ ]
+ },
+ "id": 1602,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1529,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:8"
+ },
+ {
+ "abstract": false,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "library",
+ "documentation": {
+ "id": 1530,
+ "nodeType": "StructuredDocumentation",
+ "src": "58:311:8",
+ "text": " @title Counters\n @author Matt Condon (@shrugs)\n @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\n of elements in a mapping, issuing ERC721 ids, or counting request ids.\n Include with `using Counters for Counters.Counter;`"
+ },
+ "fullyImplemented": true,
+ "id": 1601,
+ "linearizedBaseContracts": [
+ 1601
+ ],
+ "name": "Counters",
+ "nameLocation": "378:8:8",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "canonicalName": "Counters.Counter",
+ "id": 1533,
+ "members": [
+ {
+ "constant": false,
+ "id": 1532,
+ "mutability": "mutable",
+ "name": "_value",
+ "nameLocation": "740:6:8",
+ "nodeType": "VariableDeclaration",
+ "scope": 1533,
+ "src": "732:14:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1531,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "732:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "name": "Counter",
+ "nameLocation": "400:7:8",
+ "nodeType": "StructDefinition",
+ "scope": 1601,
+ "src": "393:374:8",
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 1544,
+ "nodeType": "Block",
+ "src": "847:38:8",
+ "statements": [
+ {
+ "expression": {
+ "expression": {
+ "id": 1541,
+ "name": "counter",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1536,
+ "src": "864:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter storage pointer"
+ }
+ },
+ "id": 1542,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_value",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1532,
+ "src": "864:14:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 1540,
+ "id": 1543,
+ "nodeType": "Return",
+ "src": "857:21:8"
+ }
+ ]
+ },
+ "id": 1545,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "current",
+ "nameLocation": "782:7:8",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1537,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1536,
+ "mutability": "mutable",
+ "name": "counter",
+ "nameLocation": "806:7:8",
+ "nodeType": "VariableDeclaration",
+ "scope": 1545,
+ "src": "790:23:8",
+ "stateVariable": false,
+ "storageLocation": "storage",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ },
+ "typeName": {
+ "id": 1535,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 1534,
+ "name": "Counter",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1533,
+ "src": "790:7:8"
+ },
+ "referencedDeclaration": 1533,
+ "src": "790:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "789:25:8"
+ },
+ "returnParameters": {
+ "id": 1540,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1539,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1545,
+ "src": "838:7:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1538,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "838:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "837:9:8"
+ },
+ "scope": 1601,
+ "src": "773:112:8",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1558,
+ "nodeType": "Block",
+ "src": "944:70:8",
+ "statements": [
+ {
+ "id": 1557,
+ "nodeType": "UncheckedBlock",
+ "src": "954:54:8",
+ "statements": [
+ {
+ "expression": {
+ "id": 1555,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "expression": {
+ "id": 1551,
+ "name": "counter",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1548,
+ "src": "978:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter storage pointer"
+ }
+ },
+ "id": 1553,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "_value",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1532,
+ "src": "978:14:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "+=",
+ "rightHandSide": {
+ "hexValue": "31",
+ "id": 1554,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "996:1:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "978:19:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1556,
+ "nodeType": "ExpressionStatement",
+ "src": "978:19:8"
+ }
+ ]
+ }
+ ]
+ },
+ "id": 1559,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "increment",
+ "nameLocation": "900:9:8",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1549,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1548,
+ "mutability": "mutable",
+ "name": "counter",
+ "nameLocation": "926:7:8",
+ "nodeType": "VariableDeclaration",
+ "scope": 1559,
+ "src": "910:23:8",
+ "stateVariable": false,
+ "storageLocation": "storage",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ },
+ "typeName": {
+ "id": 1547,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 1546,
+ "name": "Counter",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1533,
+ "src": "910:7:8"
+ },
+ "referencedDeclaration": 1533,
+ "src": "910:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "909:25:8"
+ },
+ "returnParameters": {
+ "id": 1550,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "944:0:8"
+ },
+ "scope": 1601,
+ "src": "891:123:8",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1586,
+ "nodeType": "Block",
+ "src": "1073:176:8",
+ "statements": [
+ {
+ "assignments": [
+ 1566
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1566,
+ "mutability": "mutable",
+ "name": "value",
+ "nameLocation": "1091:5:8",
+ "nodeType": "VariableDeclaration",
+ "scope": 1586,
+ "src": "1083:13:8",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1565,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1083:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1569,
+ "initialValue": {
+ "expression": {
+ "id": 1567,
+ "name": "counter",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1562,
+ "src": "1099:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter storage pointer"
+ }
+ },
+ "id": 1568,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_value",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1532,
+ "src": "1099:14:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1083:30:8"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1573,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1571,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1566,
+ "src": "1131:5:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1572,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1139:1:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1131:9:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "436f756e7465723a2064656372656d656e74206f766572666c6f77",
+ "id": 1574,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1142:29:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_1dfd0d5389474d871b8e8929aab9d4def041f55f90f625754fb5f9a9ba08af6f",
+ "typeString": "literal_string \"Counter: decrement overflow\""
+ },
+ "value": "Counter: decrement overflow"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_1dfd0d5389474d871b8e8929aab9d4def041f55f90f625754fb5f9a9ba08af6f",
+ "typeString": "literal_string \"Counter: decrement overflow\""
+ }
+ ],
+ "id": 1570,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "1123:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1575,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1123:49:8",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1576,
+ "nodeType": "ExpressionStatement",
+ "src": "1123:49:8"
+ },
+ {
+ "id": 1585,
+ "nodeType": "UncheckedBlock",
+ "src": "1182:61:8",
+ "statements": [
+ {
+ "expression": {
+ "id": 1583,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "expression": {
+ "id": 1577,
+ "name": "counter",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1562,
+ "src": "1206:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter storage pointer"
+ }
+ },
+ "id": 1579,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "_value",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1532,
+ "src": "1206:14:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1582,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1580,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1566,
+ "src": "1223:5:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "-",
+ "rightExpression": {
+ "hexValue": "31",
+ "id": 1581,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1231:1:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "1223:9:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "1206:26:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1584,
+ "nodeType": "ExpressionStatement",
+ "src": "1206:26:8"
+ }
+ ]
+ }
+ ]
+ },
+ "id": 1587,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "decrement",
+ "nameLocation": "1029:9:8",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1563,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1562,
+ "mutability": "mutable",
+ "name": "counter",
+ "nameLocation": "1055:7:8",
+ "nodeType": "VariableDeclaration",
+ "scope": 1587,
+ "src": "1039:23:8",
+ "stateVariable": false,
+ "storageLocation": "storage",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ },
+ "typeName": {
+ "id": 1561,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 1560,
+ "name": "Counter",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1533,
+ "src": "1039:7:8"
+ },
+ "referencedDeclaration": 1533,
+ "src": "1039:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1038:25:8"
+ },
+ "returnParameters": {
+ "id": 1564,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1073:0:8"
+ },
+ "scope": 1601,
+ "src": "1020:229:8",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1599,
+ "nodeType": "Block",
+ "src": "1304:35:8",
+ "statements": [
+ {
+ "expression": {
+ "id": 1597,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "expression": {
+ "id": 1593,
+ "name": "counter",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1590,
+ "src": "1314:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter storage pointer"
+ }
+ },
+ "id": 1595,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "memberName": "_value",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1532,
+ "src": "1314:14:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "hexValue": "30",
+ "id": 1596,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1331:1:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1314:18:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1598,
+ "nodeType": "ExpressionStatement",
+ "src": "1314:18:8"
+ }
+ ]
+ },
+ "id": 1600,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "reset",
+ "nameLocation": "1264:5:8",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1591,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1590,
+ "mutability": "mutable",
+ "name": "counter",
+ "nameLocation": "1286:7:8",
+ "nodeType": "VariableDeclaration",
+ "scope": 1600,
+ "src": "1270:23:8",
+ "stateVariable": false,
+ "storageLocation": "storage",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ },
+ "typeName": {
+ "id": 1589,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 1588,
+ "name": "Counter",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1533,
+ "src": "1270:7:8"
+ },
+ "referencedDeclaration": 1533,
+ "src": "1270:7:8",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1269:25:8"
+ },
+ "returnParameters": {
+ "id": 1592,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1304:0:8"
+ },
+ "scope": 1601,
+ "src": "1255:84:8",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 1602,
+ "src": "370:971:8",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:1309:8"
+ },
+ "compiler": {
+ "name": "solc",
+ "version": "0.8.6+commit.11564f7e.Emscripten.clang"
+ },
+ "networks": {},
+ "schemaVersion": "3.4.3",
+ "updatedAt": "2021-09-07T13:34:26.828Z",
+ "devdoc": {
+ "author": "Matt Condon (@shrugs)",
+ "details": "Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number of elements in a mapping, issuing ERC721 ids, or counting request ids. Include with `using Counters for Counters.Counter;`",
+ "kind": "dev",
+ "methods": {},
+ "title": "Counters",
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {},
+ "version": 1
+ }
+}
\ No newline at end of file
diff --git a/build/contracts/ERC165.json b/build/contracts/ERC165.json
new file mode 100644
index 0000000..bf9d47a
--- /dev/null
+++ b/build/contracts/ERC165.json
@@ -0,0 +1,620 @@
+{
+ "contractName": "ERC165",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"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.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x5718c5df9bd67ac68a796961df938821bb5dc0cd4c6118d77e9145afb187409b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d10e1d9b26042424789246603906ad06143bf9a928f4e99de8b5e3bdc662f549\",\"dweb:/ipfs/Qmejonoaj5MLekPus229rJQHcC6E9dz2xorjHJR84fMfmn\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0xa28007762d9da9db878dd421960c8cb9a10471f47ab5c1b3309bfe48e9e79ff4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://796ab6e88af7bf0e78def0f059310c903af6a312b565344e0ff524a0f26e81c6\",\"dweb:/ipfs/QmcsVgLgzWdor3UnAztUkXKNGcysm1MPneWksF72AvnwBx\"]}},\"version\":1}",
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "immutableReferences": {},
+ "generatedSources": [],
+ "deployedGeneratedSources": [],
+ "sourceMap": "",
+ "deployedSourceMap": "",
+ "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n",
+ "sourcePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
+ "ast": {
+ "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
+ "exportedSymbols": {
+ "ERC165": [
+ 1828
+ ],
+ "IERC165": [
+ 1840
+ ]
+ },
+ "id": 1829,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1806,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:10"
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
+ "file": "./IERC165.sol",
+ "id": 1807,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 1829,
+ "sourceUnit": 1841,
+ "src": "58:23:10",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "abstract": true,
+ "baseContracts": [
+ {
+ "baseName": {
+ "id": 1809,
+ "name": "IERC165",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1840,
+ "src": "688:7:10"
+ },
+ "id": 1810,
+ "nodeType": "InheritanceSpecifier",
+ "src": "688:7:10"
+ }
+ ],
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 1808,
+ "nodeType": "StructuredDocumentation",
+ "src": "83:576:10",
+ "text": " @dev Implementation of the {IERC165} interface.\n Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n for the additional interface id that will be supported. For example:\n ```solidity\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n }\n ```\n Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation."
+ },
+ "fullyImplemented": true,
+ "id": 1828,
+ "linearizedBaseContracts": [
+ 1828,
+ 1840
+ ],
+ "name": "ERC165",
+ "nameLocation": "678:6:10",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "baseFunctions": [
+ 1839
+ ],
+ "body": {
+ "id": 1826,
+ "nodeType": "Block",
+ "src": "854:64:10",
+ "statements": [
+ {
+ "expression": {
+ "commonType": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "id": 1824,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1819,
+ "name": "interfaceId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1813,
+ "src": "871:11:10",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1821,
+ "name": "IERC165",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1840,
+ "src": "891:7:10",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_IERC165_$1840_$",
+ "typeString": "type(contract IERC165)"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_type$_t_contract$_IERC165_$1840_$",
+ "typeString": "type(contract IERC165)"
+ }
+ ],
+ "id": 1820,
+ "name": "type",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967269,
+ "src": "886:4:10",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
+ "typeString": "function () pure"
+ }
+ },
+ "id": 1822,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "886:13:10",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_meta_type_t_contract$_IERC165_$1840",
+ "typeString": "type(contract IERC165)"
+ }
+ },
+ "id": 1823,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "interfaceId",
+ "nodeType": "MemberAccess",
+ "src": "886:25:10",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "src": "871:40:10",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 1818,
+ "id": 1825,
+ "nodeType": "Return",
+ "src": "864:47:10"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1811,
+ "nodeType": "StructuredDocumentation",
+ "src": "702:56:10",
+ "text": " @dev See {IERC165-supportsInterface}."
+ },
+ "functionSelector": "01ffc9a7",
+ "id": 1827,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "supportsInterface",
+ "nameLocation": "772:17:10",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 1815,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "830:8:10"
+ },
+ "parameters": {
+ "id": 1814,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1813,
+ "mutability": "mutable",
+ "name": "interfaceId",
+ "nameLocation": "797:11:10",
+ "nodeType": "VariableDeclaration",
+ "scope": 1827,
+ "src": "790:18:10",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "typeName": {
+ "id": 1812,
+ "name": "bytes4",
+ "nodeType": "ElementaryTypeName",
+ "src": "790:6:10",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "789:20:10"
+ },
+ "returnParameters": {
+ "id": 1818,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1817,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1827,
+ "src": "848:4:10",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1816,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "848:4:10",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "847:6:10"
+ },
+ "scope": 1828,
+ "src": "763:155:10",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ }
+ ],
+ "scope": 1829,
+ "src": "660:260:10",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:888:10"
+ },
+ "legacyAST": {
+ "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
+ "exportedSymbols": {
+ "ERC165": [
+ 1828
+ ],
+ "IERC165": [
+ 1840
+ ]
+ },
+ "id": 1829,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1806,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:10"
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
+ "file": "./IERC165.sol",
+ "id": 1807,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 1829,
+ "sourceUnit": 1841,
+ "src": "58:23:10",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "abstract": true,
+ "baseContracts": [
+ {
+ "baseName": {
+ "id": 1809,
+ "name": "IERC165",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1840,
+ "src": "688:7:10"
+ },
+ "id": 1810,
+ "nodeType": "InheritanceSpecifier",
+ "src": "688:7:10"
+ }
+ ],
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 1808,
+ "nodeType": "StructuredDocumentation",
+ "src": "83:576:10",
+ "text": " @dev Implementation of the {IERC165} interface.\n Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n for the additional interface id that will be supported. For example:\n ```solidity\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n }\n ```\n Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation."
+ },
+ "fullyImplemented": true,
+ "id": 1828,
+ "linearizedBaseContracts": [
+ 1828,
+ 1840
+ ],
+ "name": "ERC165",
+ "nameLocation": "678:6:10",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "baseFunctions": [
+ 1839
+ ],
+ "body": {
+ "id": 1826,
+ "nodeType": "Block",
+ "src": "854:64:10",
+ "statements": [
+ {
+ "expression": {
+ "commonType": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "id": 1824,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1819,
+ "name": "interfaceId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1813,
+ "src": "871:11:10",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1821,
+ "name": "IERC165",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1840,
+ "src": "891:7:10",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_IERC165_$1840_$",
+ "typeString": "type(contract IERC165)"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_type$_t_contract$_IERC165_$1840_$",
+ "typeString": "type(contract IERC165)"
+ }
+ ],
+ "id": 1820,
+ "name": "type",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967269,
+ "src": "886:4:10",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
+ "typeString": "function () pure"
+ }
+ },
+ "id": 1822,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "886:13:10",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_meta_type_t_contract$_IERC165_$1840",
+ "typeString": "type(contract IERC165)"
+ }
+ },
+ "id": 1823,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "interfaceId",
+ "nodeType": "MemberAccess",
+ "src": "886:25:10",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "src": "871:40:10",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 1818,
+ "id": 1825,
+ "nodeType": "Return",
+ "src": "864:47:10"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1811,
+ "nodeType": "StructuredDocumentation",
+ "src": "702:56:10",
+ "text": " @dev See {IERC165-supportsInterface}."
+ },
+ "functionSelector": "01ffc9a7",
+ "id": 1827,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "supportsInterface",
+ "nameLocation": "772:17:10",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 1815,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "830:8:10"
+ },
+ "parameters": {
+ "id": 1814,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1813,
+ "mutability": "mutable",
+ "name": "interfaceId",
+ "nameLocation": "797:11:10",
+ "nodeType": "VariableDeclaration",
+ "scope": 1827,
+ "src": "790:18:10",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "typeName": {
+ "id": 1812,
+ "name": "bytes4",
+ "nodeType": "ElementaryTypeName",
+ "src": "790:6:10",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "789:20:10"
+ },
+ "returnParameters": {
+ "id": 1818,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1817,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1827,
+ "src": "848:4:10",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1816,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "848:4:10",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "847:6:10"
+ },
+ "scope": 1828,
+ "src": "763:155:10",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ }
+ ],
+ "scope": 1829,
+ "src": "660:260:10",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:888:10"
+ },
+ "compiler": {
+ "name": "solc",
+ "version": "0.8.6+commit.11564f7e.Emscripten.clang"
+ },
+ "networks": {},
+ "schemaVersion": "3.4.3",
+ "updatedAt": "2021-09-07T13:34:26.836Z",
+ "devdoc": {
+ "details": "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.",
+ "kind": "dev",
+ "methods": {
+ "supportsInterface(bytes4)": {
+ "details": "See {IERC165-supportsInterface}."
+ }
+ },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {},
+ "version": 1
+ }
+}
\ No newline at end of file
diff --git a/build/contracts/ERC721.json b/build/contracts/ERC721.json
new file mode 100644
index 0000000..70ba202
--- /dev/null
+++ b/build/contracts/ERC721.json
@@ -0,0 +1,36449 @@
+{
+ "contractName": "ERC721",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name_",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol_",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "approved",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenURI",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including the Metadata extension, but not including the Enumerable extension, which is available separately as {ERC721Enumerable}.\",\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"constructor\":{\"details\":\"Initializes the contract by setting a `name` and a `symbol` to the token collection.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":\"ERC721\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x7d2b8ba4b256bfcac347991b75242f9bc37f499c5236af50cf09d0b35943dc0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8eeaf6afe00229af4c232ca058bb08b7a24cc3886f0b387159ac49ffd8b5312\",\"dweb:/ipfs/QmdnVKmDDWDvdRr6vtrxy3G6WafqA2TAhUZv1UFMsm4B4r\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xf101e8720213560fab41104d53b3cc7ba0456ef3a98455aa7f022391783144a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3e7820bcf567e6892d937c3cb10db263a4042e446799bca602535868d822384e\",\"dweb:/ipfs/QmPG2oeDjKncqsEeyYGjAN7CwAJmMgHterXGGnpzhha4z7\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xd9517254724276e2e8de3769183c1f738f445f0095c26fd9b86d3c6687e887b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0e604bcdcd5e5b2fb299ad09769cde6db19d5aa1929d1b5e939234a0f10d7eb8\",\"dweb:/ipfs/Qmd8hXE3GZfBHuWx3RNiYgFW2ci7KvHtib8DiwzJ2dgo9V\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0xd32fb7f530a914b1083d10a6bed3a586f2451952fec04fe542bcc670a82f7ba5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af63ab940a34687c45f0ad84960b048fc5f49330c92ccb422db7822a444733b9\",\"dweb:/ipfs/QmUShaQEu8HS1GjDnsMJQ8jkZEBrecn6NuDZ3pfjY1gVck\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://39a05eec7083dfa0cc7e0cbfe6cd1bd085a340af1ede93fdff3ad047c5fb3d8e\",\"dweb:/ipfs/QmVApz5fCUq2QC8gKTsNNdCmcedJ3ETHp68zR5N3WUKS4r\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x90565a39ae45c80f0468dc96c7b20d0afc3055f344c8203a0c9258239f350b9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26e8b38a7ac8e7b4463af00cf7fff1bf48ae9875765bf4f7751e100124d0bc8c\",\"dweb:/ipfs/QmWcsmkVr24xmmjfnBQZoemFniXjj3vwT78Cz6uqZW1Hux\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x391d3ba97ab6856a16b225d6ee29617ad15ff00db70f3b4df1ab5ea33aa47c9d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d636ba90bbbeed04a1ea7fe9ec2466757e30fd38ba2ca173636dbf69a518735e\",\"dweb:/ipfs/QmQwCB2BHnEuYR22PYt9HkpbgeFDhq4rHmaYqAZbX3WRC7\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x5718c5df9bd67ac68a796961df938821bb5dc0cd4c6118d77e9145afb187409b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d10e1d9b26042424789246603906ad06143bf9a928f4e99de8b5e3bdc662f549\",\"dweb:/ipfs/Qmejonoaj5MLekPus229rJQHcC6E9dz2xorjHJR84fMfmn\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0xa28007762d9da9db878dd421960c8cb9a10471f47ab5c1b3309bfe48e9e79ff4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://796ab6e88af7bf0e78def0f059310c903af6a312b565344e0ff524a0f26e81c6\",\"dweb:/ipfs/QmcsVgLgzWdor3UnAztUkXKNGcysm1MPneWksF72AvnwBx\"]}},\"version\":1}",
+ "bytecode": "0x60806040523480156200001157600080fd5b50604051620027843803806200278483398181016040528101906200003791906200019f565b81600090805190602001906200004f92919062000071565b5080600190805190602001906200006892919062000071565b505050620003a8565b8280546200007f90620002b9565b90600052602060002090601f016020900481019282620000a35760008555620000ef565b82601f10620000be57805160ff1916838001178555620000ef565b82800160010185558215620000ef579182015b82811115620000ee578251825591602001919060010190620000d1565b5b509050620000fe919062000102565b5090565b5b808211156200011d57600081600090555060010162000103565b5090565b60006200013862000132846200024d565b62000224565b90508281526020810184848401111562000157576200015662000388565b5b6200016484828562000283565b509392505050565b600082601f83011262000184576200018362000383565b5b81516200019684826020860162000121565b91505092915050565b60008060408385031215620001b957620001b862000392565b5b600083015167ffffffffffffffff811115620001da57620001d96200038d565b5b620001e8858286016200016c565b925050602083015167ffffffffffffffff8111156200020c576200020b6200038d565b5b6200021a858286016200016c565b9150509250929050565b60006200023062000243565b90506200023e8282620002ef565b919050565b6000604051905090565b600067ffffffffffffffff8211156200026b576200026a62000354565b5b620002768262000397565b9050602081019050919050565b60005b83811015620002a357808201518184015260208101905062000286565b83811115620002b3576000848401525b50505050565b60006002820490506001821680620002d257607f821691505b60208210811415620002e957620002e862000325565b5b50919050565b620002fa8262000397565b810181811067ffffffffffffffff821117156200031c576200031b62000354565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6123cc80620003b86000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb46514610224578063b88d4fde14610240578063c87b56dd1461025c578063e985e9c51461028c576100cf565b80636352211e146101a657806370a08231146101d657806395d89b4114610206576100cf565b806301ffc9a7146100d457806306fdde0314610104578063081812fc14610122578063095ea7b31461015257806323b872dd1461016e57806342842e0e1461018a575b600080fd5b6100ee60048036038101906100e99190611657565b6102bc565b6040516100fb91906119dd565b60405180910390f35b61010c61039e565b60405161011991906119f8565b60405180910390f35b61013c600480360381019061013791906116b1565b610430565b6040516101499190611976565b60405180910390f35b61016c60048036038101906101679190611617565b6104b5565b005b61018860048036038101906101839190611501565b6105cd565b005b6101a4600480360381019061019f9190611501565b61062d565b005b6101c060048036038101906101bb91906116b1565b61064d565b6040516101cd9190611976565b60405180910390f35b6101f060048036038101906101eb9190611494565b6106ff565b6040516101fd9190611b9a565b60405180910390f35b61020e6107b7565b60405161021b91906119f8565b60405180910390f35b61023e600480360381019061023991906115d7565b610849565b005b61025a60048036038101906102559190611554565b6109ca565b005b610276600480360381019061027191906116b1565b610a2c565b60405161028391906119f8565b60405180910390f35b6102a660048036038101906102a191906114c1565b610ad3565b6040516102b391906119dd565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061038757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610397575061039682610b67565b5b9050919050565b6060600080546103ad90611dbf565b80601f01602080910402602001604051908101604052809291908181526020018280546103d990611dbf565b80156104265780601f106103fb57610100808354040283529160200191610426565b820191906000526020600020905b81548152906001019060200180831161040957829003601f168201915b5050505050905090565b600061043b82610bd1565b61047a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047190611afa565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104c08261064d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052890611b5a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610550610c3d565b73ffffffffffffffffffffffffffffffffffffffff16148061057f575061057e81610579610c3d565b610ad3565b5b6105be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b590611a9a565b60405180910390fd5b6105c88383610c45565b505050565b6105de6105d8610c3d565b82610cfe565b61061d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061490611b7a565b60405180910390fd5b610628838383610ddc565b505050565b610648838383604051806020016040528060008152506109ca565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156106f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ed90611ada565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076790611aba565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600180546107c690611dbf565b80601f01602080910402602001604051908101604052809291908181526020018280546107f290611dbf565b801561083f5780601f106108145761010080835404028352916020019161083f565b820191906000526020600020905b81548152906001019060200180831161082257829003601f168201915b5050505050905090565b610851610c3d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b690611a5a565b60405180910390fd5b80600560006108cc610c3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610979610c3d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516109be91906119dd565b60405180910390a35050565b6109db6109d5610c3d565b83610cfe565b610a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1190611b7a565b60405180910390fd5b610a2684848484611038565b50505050565b6060610a3782610bd1565b610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d90611b3a565b60405180910390fd5b6000610a80611094565b90506000815111610aa05760405180602001604052806000815250610acb565b80610aaa846110ab565b604051602001610abb929190611952565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610cb88361064d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610d0982610bd1565b610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90611a7a565b60405180910390fd5b6000610d538361064d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610dc257508373ffffffffffffffffffffffffffffffffffffffff16610daa84610430565b73ffffffffffffffffffffffffffffffffffffffff16145b80610dd35750610dd28185610ad3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610dfc8261064d565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990611b1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990611a3a565b60405180910390fd5b610ecd83838361120c565b610ed8600082610c45565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f289190611cd5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f7f9190611c4e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611043848484610ddc565b61104f84848484611211565b61108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108590611a1a565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b606060008214156110f3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611207565b600082905060005b6000821461112557808061110e90611e22565b915050600a8261111e9190611ca4565b91506110fb565b60008167ffffffffffffffff81111561114157611140611f58565b5b6040519080825280601f01601f1916602001820160405280156111735781602001600182028036833780820191505090505b5090505b600085146112005760018261118c9190611cd5565b9150600a8561119b9190611e6b565b60306111a79190611c4e565b60f81b8183815181106111bd576111bc611f29565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856111f99190611ca4565b9450611177565b8093505050505b919050565b505050565b60006112328473ffffffffffffffffffffffffffffffffffffffff166113a8565b1561139b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261125b610c3d565b8786866040518563ffffffff1660e01b815260040161127d9493929190611991565b602060405180830381600087803b15801561129757600080fd5b505af19250505080156112c857506040513d601f19601f820116820180604052508101906112c59190611684565b60015b61134b573d80600081146112f8576040519150601f19603f3d011682016040523d82523d6000602084013e6112fd565b606091505b50600081511415611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a90611a1a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506113a0565b600190505b949350505050565b600080823b905060008111915050919050565b60006113ce6113c984611bda565b611bb5565b9050828152602081018484840111156113ea576113e9611f8c565b5b6113f5848285611d7d565b509392505050565b60008135905061140c8161233a565b92915050565b60008135905061142181612351565b92915050565b60008135905061143681612368565b92915050565b60008151905061144b81612368565b92915050565b600082601f83011261146657611465611f87565b5b81356114768482602086016113bb565b91505092915050565b60008135905061148e8161237f565b92915050565b6000602082840312156114aa576114a9611f96565b5b60006114b8848285016113fd565b91505092915050565b600080604083850312156114d8576114d7611f96565b5b60006114e6858286016113fd565b92505060206114f7858286016113fd565b9150509250929050565b60008060006060848603121561151a57611519611f96565b5b6000611528868287016113fd565b9350506020611539868287016113fd565b925050604061154a8682870161147f565b9150509250925092565b6000806000806080858703121561156e5761156d611f96565b5b600061157c878288016113fd565b945050602061158d878288016113fd565b935050604061159e8782880161147f565b925050606085013567ffffffffffffffff8111156115bf576115be611f91565b5b6115cb87828801611451565b91505092959194509250565b600080604083850312156115ee576115ed611f96565b5b60006115fc858286016113fd565b925050602061160d85828601611412565b9150509250929050565b6000806040838503121561162e5761162d611f96565b5b600061163c858286016113fd565b925050602061164d8582860161147f565b9150509250929050565b60006020828403121561166d5761166c611f96565b5b600061167b84828501611427565b91505092915050565b60006020828403121561169a57611699611f96565b5b60006116a88482850161143c565b91505092915050565b6000602082840312156116c7576116c6611f96565b5b60006116d58482850161147f565b91505092915050565b6116e781611d09565b82525050565b6116f681611d1b565b82525050565b600061170782611c0b565b6117118185611c21565b9350611721818560208601611d8c565b61172a81611f9b565b840191505092915050565b600061174082611c16565b61174a8185611c32565b935061175a818560208601611d8c565b61176381611f9b565b840191505092915050565b600061177982611c16565b6117838185611c43565b9350611793818560208601611d8c565b80840191505092915050565b60006117ac603283611c32565b91506117b782611fac565b604082019050919050565b60006117cf602483611c32565b91506117da82611ffb565b604082019050919050565b60006117f2601983611c32565b91506117fd8261204a565b602082019050919050565b6000611815602c83611c32565b915061182082612073565b604082019050919050565b6000611838603883611c32565b9150611843826120c2565b604082019050919050565b600061185b602a83611c32565b915061186682612111565b604082019050919050565b600061187e602983611c32565b915061188982612160565b604082019050919050565b60006118a1602c83611c32565b91506118ac826121af565b604082019050919050565b60006118c4602983611c32565b91506118cf826121fe565b604082019050919050565b60006118e7602f83611c32565b91506118f28261224d565b604082019050919050565b600061190a602183611c32565b91506119158261229c565b604082019050919050565b600061192d603183611c32565b9150611938826122eb565b604082019050919050565b61194c81611d73565b82525050565b600061195e828561176e565b915061196a828461176e565b91508190509392505050565b600060208201905061198b60008301846116de565b92915050565b60006080820190506119a660008301876116de565b6119b360208301866116de565b6119c06040830185611943565b81810360608301526119d281846116fc565b905095945050505050565b60006020820190506119f260008301846116ed565b92915050565b60006020820190508181036000830152611a128184611735565b905092915050565b60006020820190508181036000830152611a338161179f565b9050919050565b60006020820190508181036000830152611a53816117c2565b9050919050565b60006020820190508181036000830152611a73816117e5565b9050919050565b60006020820190508181036000830152611a9381611808565b9050919050565b60006020820190508181036000830152611ab38161182b565b9050919050565b60006020820190508181036000830152611ad38161184e565b9050919050565b60006020820190508181036000830152611af381611871565b9050919050565b60006020820190508181036000830152611b1381611894565b9050919050565b60006020820190508181036000830152611b33816118b7565b9050919050565b60006020820190508181036000830152611b53816118da565b9050919050565b60006020820190508181036000830152611b73816118fd565b9050919050565b60006020820190508181036000830152611b9381611920565b9050919050565b6000602082019050611baf6000830184611943565b92915050565b6000611bbf611bd0565b9050611bcb8282611df1565b919050565b6000604051905090565b600067ffffffffffffffff821115611bf557611bf4611f58565b5b611bfe82611f9b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000611c5982611d73565b9150611c6483611d73565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611c9957611c98611e9c565b5b828201905092915050565b6000611caf82611d73565b9150611cba83611d73565b925082611cca57611cc9611ecb565b5b828204905092915050565b6000611ce082611d73565b9150611ceb83611d73565b925082821015611cfe57611cfd611e9c565b5b828203905092915050565b6000611d1482611d53565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611daa578082015181840152602081019050611d8f565b83811115611db9576000848401525b50505050565b60006002820490506001821680611dd757607f821691505b60208210811415611deb57611dea611efa565b5b50919050565b611dfa82611f9b565b810181811067ffffffffffffffff82111715611e1957611e18611f58565b5b80604052505050565b6000611e2d82611d73565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6057611e5f611e9c565b5b600182019050919050565b6000611e7682611d73565b9150611e8183611d73565b925082611e9157611e90611ecb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61234381611d09565b811461234e57600080fd5b50565b61235a81611d1b565b811461236557600080fd5b50565b61237181611d27565b811461237c57600080fd5b50565b61238881611d73565b811461239357600080fd5b5056fea26469706673582212200f796f4225f92273748b47dd2d1da6b3600d98f1cfb108d2b6b737a200370a7a64736f6c63430008060033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb46514610224578063b88d4fde14610240578063c87b56dd1461025c578063e985e9c51461028c576100cf565b80636352211e146101a657806370a08231146101d657806395d89b4114610206576100cf565b806301ffc9a7146100d457806306fdde0314610104578063081812fc14610122578063095ea7b31461015257806323b872dd1461016e57806342842e0e1461018a575b600080fd5b6100ee60048036038101906100e99190611657565b6102bc565b6040516100fb91906119dd565b60405180910390f35b61010c61039e565b60405161011991906119f8565b60405180910390f35b61013c600480360381019061013791906116b1565b610430565b6040516101499190611976565b60405180910390f35b61016c60048036038101906101679190611617565b6104b5565b005b61018860048036038101906101839190611501565b6105cd565b005b6101a4600480360381019061019f9190611501565b61062d565b005b6101c060048036038101906101bb91906116b1565b61064d565b6040516101cd9190611976565b60405180910390f35b6101f060048036038101906101eb9190611494565b6106ff565b6040516101fd9190611b9a565b60405180910390f35b61020e6107b7565b60405161021b91906119f8565b60405180910390f35b61023e600480360381019061023991906115d7565b610849565b005b61025a60048036038101906102559190611554565b6109ca565b005b610276600480360381019061027191906116b1565b610a2c565b60405161028391906119f8565b60405180910390f35b6102a660048036038101906102a191906114c1565b610ad3565b6040516102b391906119dd565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061038757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610397575061039682610b67565b5b9050919050565b6060600080546103ad90611dbf565b80601f01602080910402602001604051908101604052809291908181526020018280546103d990611dbf565b80156104265780601f106103fb57610100808354040283529160200191610426565b820191906000526020600020905b81548152906001019060200180831161040957829003601f168201915b5050505050905090565b600061043b82610bd1565b61047a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047190611afa565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104c08261064d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052890611b5a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610550610c3d565b73ffffffffffffffffffffffffffffffffffffffff16148061057f575061057e81610579610c3d565b610ad3565b5b6105be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b590611a9a565b60405180910390fd5b6105c88383610c45565b505050565b6105de6105d8610c3d565b82610cfe565b61061d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061490611b7a565b60405180910390fd5b610628838383610ddc565b505050565b610648838383604051806020016040528060008152506109ca565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156106f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ed90611ada565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076790611aba565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600180546107c690611dbf565b80601f01602080910402602001604051908101604052809291908181526020018280546107f290611dbf565b801561083f5780601f106108145761010080835404028352916020019161083f565b820191906000526020600020905b81548152906001019060200180831161082257829003601f168201915b5050505050905090565b610851610c3d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b690611a5a565b60405180910390fd5b80600560006108cc610c3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610979610c3d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516109be91906119dd565b60405180910390a35050565b6109db6109d5610c3d565b83610cfe565b610a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1190611b7a565b60405180910390fd5b610a2684848484611038565b50505050565b6060610a3782610bd1565b610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d90611b3a565b60405180910390fd5b6000610a80611094565b90506000815111610aa05760405180602001604052806000815250610acb565b80610aaa846110ab565b604051602001610abb929190611952565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610cb88361064d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610d0982610bd1565b610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90611a7a565b60405180910390fd5b6000610d538361064d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610dc257508373ffffffffffffffffffffffffffffffffffffffff16610daa84610430565b73ffffffffffffffffffffffffffffffffffffffff16145b80610dd35750610dd28185610ad3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610dfc8261064d565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990611b1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990611a3a565b60405180910390fd5b610ecd83838361120c565b610ed8600082610c45565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f289190611cd5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f7f9190611c4e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611043848484610ddc565b61104f84848484611211565b61108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108590611a1a565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b606060008214156110f3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611207565b600082905060005b6000821461112557808061110e90611e22565b915050600a8261111e9190611ca4565b91506110fb565b60008167ffffffffffffffff81111561114157611140611f58565b5b6040519080825280601f01601f1916602001820160405280156111735781602001600182028036833780820191505090505b5090505b600085146112005760018261118c9190611cd5565b9150600a8561119b9190611e6b565b60306111a79190611c4e565b60f81b8183815181106111bd576111bc611f29565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856111f99190611ca4565b9450611177565b8093505050505b919050565b505050565b60006112328473ffffffffffffffffffffffffffffffffffffffff166113a8565b1561139b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261125b610c3d565b8786866040518563ffffffff1660e01b815260040161127d9493929190611991565b602060405180830381600087803b15801561129757600080fd5b505af19250505080156112c857506040513d601f19601f820116820180604052508101906112c59190611684565b60015b61134b573d80600081146112f8576040519150601f19603f3d011682016040523d82523d6000602084013e6112fd565b606091505b50600081511415611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a90611a1a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506113a0565b600190505b949350505050565b600080823b905060008111915050919050565b60006113ce6113c984611bda565b611bb5565b9050828152602081018484840111156113ea576113e9611f8c565b5b6113f5848285611d7d565b509392505050565b60008135905061140c8161233a565b92915050565b60008135905061142181612351565b92915050565b60008135905061143681612368565b92915050565b60008151905061144b81612368565b92915050565b600082601f83011261146657611465611f87565b5b81356114768482602086016113bb565b91505092915050565b60008135905061148e8161237f565b92915050565b6000602082840312156114aa576114a9611f96565b5b60006114b8848285016113fd565b91505092915050565b600080604083850312156114d8576114d7611f96565b5b60006114e6858286016113fd565b92505060206114f7858286016113fd565b9150509250929050565b60008060006060848603121561151a57611519611f96565b5b6000611528868287016113fd565b9350506020611539868287016113fd565b925050604061154a8682870161147f565b9150509250925092565b6000806000806080858703121561156e5761156d611f96565b5b600061157c878288016113fd565b945050602061158d878288016113fd565b935050604061159e8782880161147f565b925050606085013567ffffffffffffffff8111156115bf576115be611f91565b5b6115cb87828801611451565b91505092959194509250565b600080604083850312156115ee576115ed611f96565b5b60006115fc858286016113fd565b925050602061160d85828601611412565b9150509250929050565b6000806040838503121561162e5761162d611f96565b5b600061163c858286016113fd565b925050602061164d8582860161147f565b9150509250929050565b60006020828403121561166d5761166c611f96565b5b600061167b84828501611427565b91505092915050565b60006020828403121561169a57611699611f96565b5b60006116a88482850161143c565b91505092915050565b6000602082840312156116c7576116c6611f96565b5b60006116d58482850161147f565b91505092915050565b6116e781611d09565b82525050565b6116f681611d1b565b82525050565b600061170782611c0b565b6117118185611c21565b9350611721818560208601611d8c565b61172a81611f9b565b840191505092915050565b600061174082611c16565b61174a8185611c32565b935061175a818560208601611d8c565b61176381611f9b565b840191505092915050565b600061177982611c16565b6117838185611c43565b9350611793818560208601611d8c565b80840191505092915050565b60006117ac603283611c32565b91506117b782611fac565b604082019050919050565b60006117cf602483611c32565b91506117da82611ffb565b604082019050919050565b60006117f2601983611c32565b91506117fd8261204a565b602082019050919050565b6000611815602c83611c32565b915061182082612073565b604082019050919050565b6000611838603883611c32565b9150611843826120c2565b604082019050919050565b600061185b602a83611c32565b915061186682612111565b604082019050919050565b600061187e602983611c32565b915061188982612160565b604082019050919050565b60006118a1602c83611c32565b91506118ac826121af565b604082019050919050565b60006118c4602983611c32565b91506118cf826121fe565b604082019050919050565b60006118e7602f83611c32565b91506118f28261224d565b604082019050919050565b600061190a602183611c32565b91506119158261229c565b604082019050919050565b600061192d603183611c32565b9150611938826122eb565b604082019050919050565b61194c81611d73565b82525050565b600061195e828561176e565b915061196a828461176e565b91508190509392505050565b600060208201905061198b60008301846116de565b92915050565b60006080820190506119a660008301876116de565b6119b360208301866116de565b6119c06040830185611943565b81810360608301526119d281846116fc565b905095945050505050565b60006020820190506119f260008301846116ed565b92915050565b60006020820190508181036000830152611a128184611735565b905092915050565b60006020820190508181036000830152611a338161179f565b9050919050565b60006020820190508181036000830152611a53816117c2565b9050919050565b60006020820190508181036000830152611a73816117e5565b9050919050565b60006020820190508181036000830152611a9381611808565b9050919050565b60006020820190508181036000830152611ab38161182b565b9050919050565b60006020820190508181036000830152611ad38161184e565b9050919050565b60006020820190508181036000830152611af381611871565b9050919050565b60006020820190508181036000830152611b1381611894565b9050919050565b60006020820190508181036000830152611b33816118b7565b9050919050565b60006020820190508181036000830152611b53816118da565b9050919050565b60006020820190508181036000830152611b73816118fd565b9050919050565b60006020820190508181036000830152611b9381611920565b9050919050565b6000602082019050611baf6000830184611943565b92915050565b6000611bbf611bd0565b9050611bcb8282611df1565b919050565b6000604051905090565b600067ffffffffffffffff821115611bf557611bf4611f58565b5b611bfe82611f9b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000611c5982611d73565b9150611c6483611d73565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611c9957611c98611e9c565b5b828201905092915050565b6000611caf82611d73565b9150611cba83611d73565b925082611cca57611cc9611ecb565b5b828204905092915050565b6000611ce082611d73565b9150611ceb83611d73565b925082821015611cfe57611cfd611e9c565b5b828203905092915050565b6000611d1482611d53565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611daa578082015181840152602081019050611d8f565b83811115611db9576000848401525b50505050565b60006002820490506001821680611dd757607f821691505b60208210811415611deb57611dea611efa565b5b50919050565b611dfa82611f9b565b810181811067ffffffffffffffff82111715611e1957611e18611f58565b5b80604052505050565b6000611e2d82611d73565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6057611e5f611e9c565b5b600182019050919050565b6000611e7682611d73565b9150611e8183611d73565b925082611e9157611e90611ecb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61234381611d09565b811461234e57600080fd5b50565b61235a81611d1b565b811461236557600080fd5b50565b61237181611d27565b811461237c57600080fd5b50565b61238881611d73565b811461239357600080fd5b5056fea26469706673582212200f796f4225f92273748b47dd2d1da6b3600d98f1cfb108d2b6b737a200370a7a64736f6c63430008060033",
+ "immutableReferences": {},
+ "generatedSources": [
+ {
+ "ast": {
+ "nodeType": "YulBlock",
+ "src": "0:4093:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "102:326:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "112:75:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "179:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "array_allocation_size_t_string_memory_ptr",
+ "nodeType": "YulIdentifier",
+ "src": "137:41:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "137:49:14"
+ }
+ ],
+ "functionName": {
+ "name": "allocate_memory",
+ "nodeType": "YulIdentifier",
+ "src": "121:15:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "121:66:14"
+ },
+ "variableNames": [
+ {
+ "name": "array",
+ "nodeType": "YulIdentifier",
+ "src": "112:5:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "array",
+ "nodeType": "YulIdentifier",
+ "src": "203:5:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "210:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "196:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "196:21:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "196:21:14"
+ },
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "226:27:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "array",
+ "nodeType": "YulIdentifier",
+ "src": "241:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "248:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "237:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "237:16:14"
+ },
+ "variables": [
+ {
+ "name": "dst",
+ "nodeType": "YulTypedName",
+ "src": "230:3:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "291:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae",
+ "nodeType": "YulIdentifier",
+ "src": "293:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "293:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "293:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "src",
+ "nodeType": "YulIdentifier",
+ "src": "272:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "277:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "268:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "268:16:14"
+ },
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "286:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "265:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "265:25:14"
+ },
+ "nodeType": "YulIf",
+ "src": "262:2:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "src",
+ "nodeType": "YulIdentifier",
+ "src": "405:3:14"
+ },
+ {
+ "name": "dst",
+ "nodeType": "YulIdentifier",
+ "src": "410:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "415:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "copy_memory_to_memory",
+ "nodeType": "YulIdentifier",
+ "src": "383:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "383:39:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "383:39:14"
+ }
+ ]
+ },
+ "name": "abi_decode_available_length_t_string_memory_ptr_fromMemory",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "src",
+ "nodeType": "YulTypedName",
+ "src": "75:3:14",
+ "type": ""
+ },
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "80:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "88:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "array",
+ "nodeType": "YulTypedName",
+ "src": "96:5:14",
+ "type": ""
+ }
+ ],
+ "src": "7:421:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "521:282:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "570:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
+ "nodeType": "YulIdentifier",
+ "src": "572:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "572:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "572:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "549:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "557:4:14",
+ "type": "",
+ "value": "0x1f"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "545:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "545:17:14"
+ },
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "564:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "541:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "541:27:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "534:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "534:35:14"
+ },
+ "nodeType": "YulIf",
+ "src": "531:2:14"
+ },
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "662:27:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "682:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "676:5:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "676:13:14"
+ },
+ "variables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "666:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "698:99:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "770:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "778:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "766:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "766:17:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "785:6:14"
+ },
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "793:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_available_length_t_string_memory_ptr_fromMemory",
+ "nodeType": "YulIdentifier",
+ "src": "707:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "707:90:14"
+ },
+ "variableNames": [
+ {
+ "name": "array",
+ "nodeType": "YulIdentifier",
+ "src": "698:5:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_t_string_memory_ptr_fromMemory",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "499:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "507:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "array",
+ "nodeType": "YulTypedName",
+ "src": "515:5:14",
+ "type": ""
+ }
+ ],
+ "src": "448:355:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "923:739:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "969:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "971:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "971:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "971:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "944:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "953:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "940:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "940:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "965:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "936:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "936:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "933:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "1062:291:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "1077:38:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "1101:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1112:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "1097:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1097:17:14"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "1091:5:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1091:24:14"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "1081:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1162:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
+ "nodeType": "YulIdentifier",
+ "src": "1164:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1164:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "1164:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "1134:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1142:18:14",
+ "type": "",
+ "value": "0xffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "1131:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1131:30:14"
+ },
+ "nodeType": "YulIf",
+ "src": "1128:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "1259:84:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "1315:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "1326:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "1311:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1311:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "1335:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_string_memory_ptr_fromMemory",
+ "nodeType": "YulIdentifier",
+ "src": "1269:41:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1269:74:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "1259:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "1363:292:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "1378:39:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "1402:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1413:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "1398:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1398:18:14"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "1392:5:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1392:25:14"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "1382:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1464:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
+ "nodeType": "YulIdentifier",
+ "src": "1466:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1466:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "1466:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "1436:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1444:18:14",
+ "type": "",
+ "value": "0xffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "1433:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1433:30:14"
+ },
+ "nodeType": "YulIf",
+ "src": "1430:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "1561:84:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "1617:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "1628:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "1613:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1613:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "1637:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_string_memory_ptr_fromMemory",
+ "nodeType": "YulIdentifier",
+ "src": "1571:41:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1571:74:14"
+ },
+ "variableNames": [
+ {
+ "name": "value1",
+ "nodeType": "YulIdentifier",
+ "src": "1561:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "885:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "896:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "908:6:14",
+ "type": ""
+ },
+ {
+ "name": "value1",
+ "nodeType": "YulTypedName",
+ "src": "916:6:14",
+ "type": ""
+ }
+ ],
+ "src": "809:853:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1709:88:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "1719:30:14",
+ "value": {
+ "arguments": [],
+ "functionName": {
+ "name": "allocate_unbounded",
+ "nodeType": "YulIdentifier",
+ "src": "1729:18:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1729:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "1719:6:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "1778:6:14"
+ },
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "1786:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "finalize_allocation",
+ "nodeType": "YulIdentifier",
+ "src": "1758:19:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1758:33:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "1758:33:14"
+ }
+ ]
+ },
+ "name": "allocate_memory",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "size",
+ "nodeType": "YulTypedName",
+ "src": "1693:4:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "1702:6:14",
+ "type": ""
+ }
+ ],
+ "src": "1668:129:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1843:35:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "1853:19:14",
+ "value": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1869:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "1863:5:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1863:9:14"
+ },
+ "variableNames": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "1853:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "allocate_unbounded",
+ "nodeType": "YulFunctionDefinition",
+ "returnVariables": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "1836:6:14",
+ "type": ""
+ }
+ ],
+ "src": "1803:75:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1951:241:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2056:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x41",
+ "nodeType": "YulIdentifier",
+ "src": "2058:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2058:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "2058:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "2028:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2036:18:14",
+ "type": "",
+ "value": "0xffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "2025:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2025:30:14"
+ },
+ "nodeType": "YulIf",
+ "src": "2022:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "2088:37:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "2118:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "round_up_to_mul_of_32",
+ "nodeType": "YulIdentifier",
+ "src": "2096:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2096:29:14"
+ },
+ "variableNames": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "2088:4:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "2162:23:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "2174:4:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2180:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2170:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2170:15:14"
+ },
+ "variableNames": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "2162:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "array_allocation_size_t_string_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "1935:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "size",
+ "nodeType": "YulTypedName",
+ "src": "1946:4:14",
+ "type": ""
+ }
+ ],
+ "src": "1884:308:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2247:258:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "2257:10:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2266:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "i",
+ "nodeType": "YulTypedName",
+ "src": "2261:1:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2326:63:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dst",
+ "nodeType": "YulIdentifier",
+ "src": "2351:3:14"
+ },
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "2356:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2347:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2347:11:14"
+ },
+ {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "src",
+ "nodeType": "YulIdentifier",
+ "src": "2370:3:14"
+ },
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "2375:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2366:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2366:11:14"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "2360:5:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2360:18:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "2340:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2340:39:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "2340:39:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "2287:1:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "2290:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "lt",
+ "nodeType": "YulIdentifier",
+ "src": "2284:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2284:13:14"
+ },
+ "nodeType": "YulForLoop",
+ "post": {
+ "nodeType": "YulBlock",
+ "src": "2298:19:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "2300:15:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "2309:1:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2312:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2305:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2305:10:14"
+ },
+ "variableNames": [
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "2300:1:14"
+ }
+ ]
+ }
+ ]
+ },
+ "pre": {
+ "nodeType": "YulBlock",
+ "src": "2280:3:14",
+ "statements": []
+ },
+ "src": "2276:113:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2423:76:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dst",
+ "nodeType": "YulIdentifier",
+ "src": "2473:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "2478:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2469:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2469:16:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2487:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "2462:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2462:27:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "2462:27:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "2404:1:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "2407:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "2401:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2401:13:14"
+ },
+ "nodeType": "YulIf",
+ "src": "2398:2:14"
+ }
+ ]
+ },
+ "name": "copy_memory_to_memory",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "src",
+ "nodeType": "YulTypedName",
+ "src": "2229:3:14",
+ "type": ""
+ },
+ {
+ "name": "dst",
+ "nodeType": "YulTypedName",
+ "src": "2234:3:14",
+ "type": ""
+ },
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "2239:6:14",
+ "type": ""
+ }
+ ],
+ "src": "2198:307:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2562:269:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "2572:22:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "data",
+ "nodeType": "YulIdentifier",
+ "src": "2586:4:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2592:1:14",
+ "type": "",
+ "value": "2"
+ }
+ ],
+ "functionName": {
+ "name": "div",
+ "nodeType": "YulIdentifier",
+ "src": "2582:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2582:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "2572:6:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "2603:38:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "data",
+ "nodeType": "YulIdentifier",
+ "src": "2633:4:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2639:1:14",
+ "type": "",
+ "value": "1"
+ }
+ ],
+ "functionName": {
+ "name": "and",
+ "nodeType": "YulIdentifier",
+ "src": "2629:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2629:12:14"
+ },
+ "variables": [
+ {
+ "name": "outOfPlaceEncoding",
+ "nodeType": "YulTypedName",
+ "src": "2607:18:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2680:51:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "2694:27:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "2708:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2716:4:14",
+ "type": "",
+ "value": "0x7f"
+ }
+ ],
+ "functionName": {
+ "name": "and",
+ "nodeType": "YulIdentifier",
+ "src": "2704:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2704:17:14"
+ },
+ "variableNames": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "2694:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "outOfPlaceEncoding",
+ "nodeType": "YulIdentifier",
+ "src": "2660:18:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "2653:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2653:26:14"
+ },
+ "nodeType": "YulIf",
+ "src": "2650:2:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2783:42:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x22",
+ "nodeType": "YulIdentifier",
+ "src": "2797:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2797:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "2797:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "outOfPlaceEncoding",
+ "nodeType": "YulIdentifier",
+ "src": "2747:18:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "2770:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2778:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "lt",
+ "nodeType": "YulIdentifier",
+ "src": "2767:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2767:14:14"
+ }
+ ],
+ "functionName": {
+ "name": "eq",
+ "nodeType": "YulIdentifier",
+ "src": "2744:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2744:38:14"
+ },
+ "nodeType": "YulIf",
+ "src": "2741:2:14"
+ }
+ ]
+ },
+ "name": "extract_byte_array_length",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "data",
+ "nodeType": "YulTypedName",
+ "src": "2546:4:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "2555:6:14",
+ "type": ""
+ }
+ ],
+ "src": "2511:320:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2880:238:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "2890:58:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "2912:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "2942:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "round_up_to_mul_of_32",
+ "nodeType": "YulIdentifier",
+ "src": "2920:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2920:27:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2908:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2908:40:14"
+ },
+ "variables": [
+ {
+ "name": "newFreePtr",
+ "nodeType": "YulTypedName",
+ "src": "2894:10:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3059:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x41",
+ "nodeType": "YulIdentifier",
+ "src": "3061:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3061:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3061:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "newFreePtr",
+ "nodeType": "YulIdentifier",
+ "src": "3002:10:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3014:18:14",
+ "type": "",
+ "value": "0xffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "2999:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2999:34:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "newFreePtr",
+ "nodeType": "YulIdentifier",
+ "src": "3038:10:14"
+ },
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "3050:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "lt",
+ "nodeType": "YulIdentifier",
+ "src": "3035:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3035:22:14"
+ }
+ ],
+ "functionName": {
+ "name": "or",
+ "nodeType": "YulIdentifier",
+ "src": "2996:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2996:62:14"
+ },
+ "nodeType": "YulIf",
+ "src": "2993:2:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3097:2:14",
+ "type": "",
+ "value": "64"
+ },
+ {
+ "name": "newFreePtr",
+ "nodeType": "YulIdentifier",
+ "src": "3101:10:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "3090:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3090:22:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3090:22:14"
+ }
+ ]
+ },
+ "name": "finalize_allocation",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "2866:6:14",
+ "type": ""
+ },
+ {
+ "name": "size",
+ "nodeType": "YulTypedName",
+ "src": "2874:4:14",
+ "type": ""
+ }
+ ],
+ "src": "2837:281:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3152:152:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3169:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3172:77:14",
+ "type": "",
+ "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "3162:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3162:88:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3162:88:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3266:1:14",
+ "type": "",
+ "value": "4"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3269:4:14",
+ "type": "",
+ "value": "0x22"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "3259:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3259:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3259:15:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3290:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3293:4:14",
+ "type": "",
+ "value": "0x24"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "3283:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3283:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3283:15:14"
+ }
+ ]
+ },
+ "name": "panic_error_0x22",
+ "nodeType": "YulFunctionDefinition",
+ "src": "3124:180:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3338:152:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3355:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3358:77:14",
+ "type": "",
+ "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "3348:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3348:88:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3348:88:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3452:1:14",
+ "type": "",
+ "value": "4"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3455:4:14",
+ "type": "",
+ "value": "0x41"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "3445:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3445:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3445:15:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3476:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3479:4:14",
+ "type": "",
+ "value": "0x24"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "3469:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3469:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3469:15:14"
+ }
+ ]
+ },
+ "name": "panic_error_0x41",
+ "nodeType": "YulFunctionDefinition",
+ "src": "3310:180:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3585:28:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3602:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3605:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "3595:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3595:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3595:12:14"
+ }
+ ]
+ },
+ "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
+ "nodeType": "YulFunctionDefinition",
+ "src": "3496:117:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3708:28:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3725:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3728:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "3718:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3718:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3718:12:14"
+ }
+ ]
+ },
+ "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae",
+ "nodeType": "YulFunctionDefinition",
+ "src": "3619:117:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3831:28:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3848:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3851:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "3841:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3841:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3841:12:14"
+ }
+ ]
+ },
+ "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
+ "nodeType": "YulFunctionDefinition",
+ "src": "3742:117:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3954:28:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3971:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3974:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "3964:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3964:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3964:12:14"
+ }
+ ]
+ },
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulFunctionDefinition",
+ "src": "3865:117:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "4036:54:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "4046:38:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "4064:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "4071:2:14",
+ "type": "",
+ "value": "31"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "4060:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4060:14:14"
+ },
+ {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "4080:2:14",
+ "type": "",
+ "value": "31"
+ }
+ ],
+ "functionName": {
+ "name": "not",
+ "nodeType": "YulIdentifier",
+ "src": "4076:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4076:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "and",
+ "nodeType": "YulIdentifier",
+ "src": "4056:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4056:28:14"
+ },
+ "variableNames": [
+ {
+ "name": "result",
+ "nodeType": "YulIdentifier",
+ "src": "4046:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "round_up_to_mul_of_32",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "4019:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "result",
+ "nodeType": "YulTypedName",
+ "src": "4029:6:14",
+ "type": ""
+ }
+ ],
+ "src": "3988:102:14"
+ }
+ ]
+ },
+ "contents": "{\n\n function abi_decode_available_length_t_string_memory_ptr_fromMemory(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_string_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n copy_memory_to_memory(src, dst, length)\n }\n\n // string\n function abi_decode_t_string_memory_ptr_fromMemory(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := mload(offset)\n array := abi_decode_available_length_t_string_memory_ptr_fromMemory(add(offset, 0x20), length, end)\n }\n\n function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := mload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_string_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := mload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value1 := abi_decode_t_string_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function array_allocation_size_t_string_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n function extract_byte_array_length(data) -> length {\n length := div(data, 2)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) {\n length := and(length, 0x7f)\n }\n\n if eq(outOfPlaceEncoding, lt(length, 32)) {\n panic_error_0x22()\n }\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function panic_error_0x22() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n}\n",
+ "id": 14,
+ "language": "Yul",
+ "name": "#utility.yul"
+ }
+ ],
+ "deployedGeneratedSources": [
+ {
+ "ast": {
+ "nodeType": "YulBlock",
+ "src": "0:27822:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "90:327:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "100:74:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "166:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "array_allocation_size_t_bytes_memory_ptr",
+ "nodeType": "YulIdentifier",
+ "src": "125:40:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "125:48:14"
+ }
+ ],
+ "functionName": {
+ "name": "allocate_memory",
+ "nodeType": "YulIdentifier",
+ "src": "109:15:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "109:65:14"
+ },
+ "variableNames": [
+ {
+ "name": "array",
+ "nodeType": "YulIdentifier",
+ "src": "100:5:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "array",
+ "nodeType": "YulIdentifier",
+ "src": "190:5:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "197:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "183:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "183:21:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "183:21:14"
+ },
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "213:27:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "array",
+ "nodeType": "YulIdentifier",
+ "src": "228:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "235:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "224:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "224:16:14"
+ },
+ "variables": [
+ {
+ "name": "dst",
+ "nodeType": "YulTypedName",
+ "src": "217:3:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "278:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae",
+ "nodeType": "YulIdentifier",
+ "src": "280:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "280:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "280:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "src",
+ "nodeType": "YulIdentifier",
+ "src": "259:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "264:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "255:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "255:16:14"
+ },
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "273:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "252:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "252:25:14"
+ },
+ "nodeType": "YulIf",
+ "src": "249:2:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "src",
+ "nodeType": "YulIdentifier",
+ "src": "394:3:14"
+ },
+ {
+ "name": "dst",
+ "nodeType": "YulIdentifier",
+ "src": "399:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "404:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "copy_calldata_to_memory",
+ "nodeType": "YulIdentifier",
+ "src": "370:23:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "370:41:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "370:41:14"
+ }
+ ]
+ },
+ "name": "abi_decode_available_length_t_bytes_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "src",
+ "nodeType": "YulTypedName",
+ "src": "63:3:14",
+ "type": ""
+ },
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "68:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "76:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "array",
+ "nodeType": "YulTypedName",
+ "src": "84:5:14",
+ "type": ""
+ }
+ ],
+ "src": "7:410:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "475:87:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "485:29:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "507:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldataload",
+ "nodeType": "YulIdentifier",
+ "src": "494:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "494:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "485:5:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "550:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "validator_revert_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "523:26:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "523:33:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "523:33:14"
+ }
+ ]
+ },
+ "name": "abi_decode_t_address",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "453:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "461:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "469:5:14",
+ "type": ""
+ }
+ ],
+ "src": "423:139:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "617:84:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "627:29:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "649:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldataload",
+ "nodeType": "YulIdentifier",
+ "src": "636:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "636:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "627:5:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "689:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "validator_revert_t_bool",
+ "nodeType": "YulIdentifier",
+ "src": "665:23:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "665:30:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "665:30:14"
+ }
+ ]
+ },
+ "name": "abi_decode_t_bool",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "595:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "603:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "611:5:14",
+ "type": ""
+ }
+ ],
+ "src": "568:133:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "758:86:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "768:29:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "790:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldataload",
+ "nodeType": "YulIdentifier",
+ "src": "777:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "777:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "768:5:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "832:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "validator_revert_t_bytes4",
+ "nodeType": "YulIdentifier",
+ "src": "806:25:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "806:32:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "806:32:14"
+ }
+ ]
+ },
+ "name": "abi_decode_t_bytes4",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "736:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "744:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "752:5:14",
+ "type": ""
+ }
+ ],
+ "src": "707:137:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "912:79:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "922:22:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "937:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "931:5:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "931:13:14"
+ },
+ "variableNames": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "922:5:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "979:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "validator_revert_t_bytes4",
+ "nodeType": "YulIdentifier",
+ "src": "953:25:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "953:32:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "953:32:14"
+ }
+ ]
+ },
+ "name": "abi_decode_t_bytes4_fromMemory",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "890:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "898:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "906:5:14",
+ "type": ""
+ }
+ ],
+ "src": "850:141:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1071:277:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1120:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
+ "nodeType": "YulIdentifier",
+ "src": "1122:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1122:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "1122:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "1099:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1107:4:14",
+ "type": "",
+ "value": "0x1f"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "1095:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1095:17:14"
+ },
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "1114:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "1091:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1091:27:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "1084:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1084:35:14"
+ },
+ "nodeType": "YulIf",
+ "src": "1081:2:14"
+ },
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "1212:34:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "1239:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldataload",
+ "nodeType": "YulIdentifier",
+ "src": "1226:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1226:20:14"
+ },
+ "variables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "1216:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "1255:87:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "1315:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1323:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "1311:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1311:17:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "1330:6:14"
+ },
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "1338:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_available_length_t_bytes_memory_ptr",
+ "nodeType": "YulIdentifier",
+ "src": "1264:46:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1264:78:14"
+ },
+ "variableNames": [
+ {
+ "name": "array",
+ "nodeType": "YulIdentifier",
+ "src": "1255:5:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_t_bytes_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "1049:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "1057:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "array",
+ "nodeType": "YulTypedName",
+ "src": "1065:5:14",
+ "type": ""
+ }
+ ],
+ "src": "1010:338:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1406:87:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "1416:29:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "1438:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldataload",
+ "nodeType": "YulIdentifier",
+ "src": "1425:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1425:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "1416:5:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "1481:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "validator_revert_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "1454:26:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1454:33:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "1454:33:14"
+ }
+ ]
+ },
+ "name": "abi_decode_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "1384:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "1392:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "1400:5:14",
+ "type": ""
+ }
+ ],
+ "src": "1354:139:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1565:263:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1611:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "1613:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1613:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "1613:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "1586:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "1595:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "1582:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1582:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1607:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "1578:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1578:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "1575:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "1704:117:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "1719:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1733:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "1723:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "1748:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "1783:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "1794:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "1779:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1779:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "1803:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "1758:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1758:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "1748:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_address",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "1535:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "1546:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "1558:6:14",
+ "type": ""
+ }
+ ],
+ "src": "1499:329:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1917:391:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1963:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "1965:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1965:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "1965:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "1938:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "1947:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "1934:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1934:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1959:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "1930:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1930:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "1927:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "2056:117:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "2071:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2085:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "2075:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "2100:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "2135:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "2146:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2131:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2131:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "2155:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "2110:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2110:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "2100:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "2183:118:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "2198:16:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2212:2:14",
+ "type": "",
+ "value": "32"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "2202:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "2228:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "2263:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "2274:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2259:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2259:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "2283:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "2238:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2238:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value1",
+ "nodeType": "YulIdentifier",
+ "src": "2228:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_addresst_address",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "1879:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "1890:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "1902:6:14",
+ "type": ""
+ },
+ {
+ "name": "value1",
+ "nodeType": "YulTypedName",
+ "src": "1910:6:14",
+ "type": ""
+ }
+ ],
+ "src": "1834:474:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2414:519:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2460:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "2462:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2462:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "2462:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "2435:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "2444:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "2431:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2431:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2456:2:14",
+ "type": "",
+ "value": "96"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "2427:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2427:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "2424:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "2553:117:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "2568:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2582:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "2572:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "2597:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "2632:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "2643:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2628:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2628:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "2652:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "2607:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2607:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "2597:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "2680:118:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "2695:16:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2709:2:14",
+ "type": "",
+ "value": "32"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "2699:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "2725:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "2760:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "2771:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2756:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2756:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "2780:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "2735:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2735:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value1",
+ "nodeType": "YulIdentifier",
+ "src": "2725:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "2808:118:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "2823:16:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2837:2:14",
+ "type": "",
+ "value": "64"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "2827:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "2853:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "2888:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "2899:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2884:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2884:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "2908:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "2863:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2863:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value2",
+ "nodeType": "YulIdentifier",
+ "src": "2853:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_addresst_addresst_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "2368:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "2379:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "2391:6:14",
+ "type": ""
+ },
+ {
+ "name": "value1",
+ "nodeType": "YulTypedName",
+ "src": "2399:6:14",
+ "type": ""
+ },
+ {
+ "name": "value2",
+ "nodeType": "YulTypedName",
+ "src": "2407:6:14",
+ "type": ""
+ }
+ ],
+ "src": "2314:619:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3065:817:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3112:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "3114:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3114:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3114:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "3086:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "3095:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "3082:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3082:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3107:3:14",
+ "type": "",
+ "value": "128"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "3078:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3078:33:14"
+ },
+ "nodeType": "YulIf",
+ "src": "3075:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "3205:117:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "3220:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3234:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "3224:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "3249:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "3284:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "3295:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "3280:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3280:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "3304:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "3259:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3259:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "3249:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "3332:118:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "3347:16:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3361:2:14",
+ "type": "",
+ "value": "32"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "3351:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "3377:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "3412:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "3423:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "3408:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3408:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "3432:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "3387:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3387:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value1",
+ "nodeType": "YulIdentifier",
+ "src": "3377:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "3460:118:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "3475:16:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3489:2:14",
+ "type": "",
+ "value": "64"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "3479:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "3505:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "3540:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "3551:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "3536:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3536:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "3560:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "3515:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3515:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value2",
+ "nodeType": "YulIdentifier",
+ "src": "3505:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "3588:287:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "3603:46:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "3634:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3645:2:14",
+ "type": "",
+ "value": "96"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "3630:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3630:18:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldataload",
+ "nodeType": "YulIdentifier",
+ "src": "3617:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3617:32:14"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "3607:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3696:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
+ "nodeType": "YulIdentifier",
+ "src": "3698:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3698:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3698:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "3668:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3676:18:14",
+ "type": "",
+ "value": "0xffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "3665:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3665:30:14"
+ },
+ "nodeType": "YulIf",
+ "src": "3662:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "3793:72:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "3837:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "3848:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "3833:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3833:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "3857:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_bytes_memory_ptr",
+ "nodeType": "YulIdentifier",
+ "src": "3803:29:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3803:62:14"
+ },
+ "variableNames": [
+ {
+ "name": "value3",
+ "nodeType": "YulIdentifier",
+ "src": "3793:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "3011:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "3022:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "3034:6:14",
+ "type": ""
+ },
+ {
+ "name": "value1",
+ "nodeType": "YulTypedName",
+ "src": "3042:6:14",
+ "type": ""
+ },
+ {
+ "name": "value2",
+ "nodeType": "YulTypedName",
+ "src": "3050:6:14",
+ "type": ""
+ },
+ {
+ "name": "value3",
+ "nodeType": "YulTypedName",
+ "src": "3058:6:14",
+ "type": ""
+ }
+ ],
+ "src": "2939:943:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3968:388:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "4014:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "4016:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4016:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "4016:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "3989:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "3998:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "3985:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3985:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "4010:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "3981:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3981:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "3978:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "4107:117:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "4122:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "4136:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "4126:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "4151:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "4186:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "4197:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "4182:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4182:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "4206:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "4161:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4161:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "4151:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "4234:115:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "4249:16:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "4263:2:14",
+ "type": "",
+ "value": "32"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "4253:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "4279:60:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "4311:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "4322:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "4307:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4307:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "4331:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_bool",
+ "nodeType": "YulIdentifier",
+ "src": "4289:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4289:50:14"
+ },
+ "variableNames": [
+ {
+ "name": "value1",
+ "nodeType": "YulIdentifier",
+ "src": "4279:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_addresst_bool",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "3930:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "3941:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "3953:6:14",
+ "type": ""
+ },
+ {
+ "name": "value1",
+ "nodeType": "YulTypedName",
+ "src": "3961:6:14",
+ "type": ""
+ }
+ ],
+ "src": "3888:468:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "4445:391:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "4491:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "4493:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4493:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "4493:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "4466:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "4475:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "4462:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4462:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "4487:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "4458:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4458:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "4455:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "4584:117:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "4599:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "4613:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "4603:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "4628:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "4663:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "4674:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "4659:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4659:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "4683:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "4638:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4638:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "4628:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "4711:118:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "4726:16:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "4740:2:14",
+ "type": "",
+ "value": "32"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "4730:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "4756:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "4791:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "4802:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "4787:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4787:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "4811:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "4766:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4766:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value1",
+ "nodeType": "YulIdentifier",
+ "src": "4756:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_addresst_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "4407:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "4418:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "4430:6:14",
+ "type": ""
+ },
+ {
+ "name": "value1",
+ "nodeType": "YulTypedName",
+ "src": "4438:6:14",
+ "type": ""
+ }
+ ],
+ "src": "4362:474:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "4907:262:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "4953:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "4955:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4955:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "4955:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "4928:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "4937:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "4924:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4924:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "4949:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "4920:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4920:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "4917:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "5046:116:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "5061:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "5075:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "5065:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "5090:62:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "5124:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "5135:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "5120:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5120:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "5144:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_bytes4",
+ "nodeType": "YulIdentifier",
+ "src": "5100:19:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5100:52:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "5090:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_bytes4",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "4877:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "4888:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "4900:6:14",
+ "type": ""
+ }
+ ],
+ "src": "4842:327:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "5251:273:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "5297:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "5299:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5299:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "5299:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "5272:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "5281:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "5268:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5268:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "5293:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "5264:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5264:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "5261:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "5390:127:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "5405:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "5419:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "5409:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "5434:73:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "5479:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "5490:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "5475:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5475:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "5499:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_bytes4_fromMemory",
+ "nodeType": "YulIdentifier",
+ "src": "5444:30:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5444:63:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "5434:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_bytes4_fromMemory",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "5221:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "5232:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "5244:6:14",
+ "type": ""
+ }
+ ],
+ "src": "5175:349:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "5596:263:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "5642:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "5644:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5644:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "5644:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "5617:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "5626:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "5613:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5613:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "5638:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "5609:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5609:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "5606:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "5735:117:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "5750:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "5764:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "5754:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "5779:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "5814:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "5825:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "5810:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5810:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "5834:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "5789:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5789:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "5779:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "5566:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "5577:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "5589:6:14",
+ "type": ""
+ }
+ ],
+ "src": "5530:329:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "5930:53:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "5947:3:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "5970:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "5952:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5952:24:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "5940:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5940:37:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "5940:37:14"
+ }
+ ]
+ },
+ "name": "abi_encode_t_address_to_t_address_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "5918:5:14",
+ "type": ""
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "5925:3:14",
+ "type": ""
+ }
+ ],
+ "src": "5865:118:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "6048:50:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "6065:3:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "6085:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_bool",
+ "nodeType": "YulIdentifier",
+ "src": "6070:14:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6070:21:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "6058:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6058:34:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "6058:34:14"
+ }
+ ]
+ },
+ "name": "abi_encode_t_bool_to_t_bool_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "6036:5:14",
+ "type": ""
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "6043:3:14",
+ "type": ""
+ }
+ ],
+ "src": "5989:109:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "6194:270:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "6204:52:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "6250:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "array_length_t_bytes_memory_ptr",
+ "nodeType": "YulIdentifier",
+ "src": "6218:31:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6218:38:14"
+ },
+ "variables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "6208:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "6265:77:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "6330:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "6335:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "6272:57:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6272:70:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "6265:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "6377:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "6384:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "6373:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6373:16:14"
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "6391:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "6396:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "copy_memory_to_memory",
+ "nodeType": "YulIdentifier",
+ "src": "6351:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6351:52:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "6351:52:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "6412:46:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "6423:3:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "6450:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "round_up_to_mul_of_32",
+ "nodeType": "YulIdentifier",
+ "src": "6428:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6428:29:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "6419:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6419:39:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "6412:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "6175:5:14",
+ "type": ""
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "6182:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "6190:3:14",
+ "type": ""
+ }
+ ],
+ "src": "6104:360:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "6562:272:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "6572:53:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "6619:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "array_length_t_string_memory_ptr",
+ "nodeType": "YulIdentifier",
+ "src": "6586:32:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6586:39:14"
+ },
+ "variables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "6576:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "6634:78:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "6700:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "6705:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "6641:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6641:71:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "6634:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "6747:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "6754:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "6743:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6743:16:14"
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "6761:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "6766:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "copy_memory_to_memory",
+ "nodeType": "YulIdentifier",
+ "src": "6721:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6721:52:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "6721:52:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "6782:46:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "6793:3:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "6820:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "round_up_to_mul_of_32",
+ "nodeType": "YulIdentifier",
+ "src": "6798:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6798:29:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "6789:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6789:39:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "6782:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "6543:5:14",
+ "type": ""
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "6550:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "6558:3:14",
+ "type": ""
+ }
+ ],
+ "src": "6470:364:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "6950:267:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "6960:53:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "7007:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "array_length_t_string_memory_ptr",
+ "nodeType": "YulIdentifier",
+ "src": "6974:32:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6974:39:14"
+ },
+ "variables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "6964:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "7022:96:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7106:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "7111:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "7029:76:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7029:89:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7022:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "7153:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "7160:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "7149:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7149:16:14"
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7167:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "7172:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "copy_memory_to_memory",
+ "nodeType": "YulIdentifier",
+ "src": "7127:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7127:52:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "7127:52:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "7188:23:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7199:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "7204:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "7195:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7195:16:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "7188:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "6931:5:14",
+ "type": ""
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "6938:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "6946:3:14",
+ "type": ""
+ }
+ ],
+ "src": "6840:377:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "7369:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "7379:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7445:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "7450:2:14",
+ "type": "",
+ "value": "50"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "7386:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7386:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7379:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7551:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
+ "nodeType": "YulIdentifier",
+ "src": "7462:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7462:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "7462:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "7564:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7575:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "7580:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "7571:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7571:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "7564:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "7357:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "7365:3:14",
+ "type": ""
+ }
+ ],
+ "src": "7223:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "7741:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "7751:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7817:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "7822:2:14",
+ "type": "",
+ "value": "36"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "7758:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7758:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7751:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7923:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4",
+ "nodeType": "YulIdentifier",
+ "src": "7834:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7834:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "7834:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "7936:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7947:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "7952:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "7943:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7943:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "7936:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "7729:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "7737:3:14",
+ "type": ""
+ }
+ ],
+ "src": "7595:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "8113:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "8123:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8189:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "8194:2:14",
+ "type": "",
+ "value": "25"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "8130:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8130:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8123:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8295:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05",
+ "nodeType": "YulIdentifier",
+ "src": "8206:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8206:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "8206:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "8308:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8319:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "8324:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "8315:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8315:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "8308:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "8101:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "8109:3:14",
+ "type": ""
+ }
+ ],
+ "src": "7967:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "8485:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "8495:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8561:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "8566:2:14",
+ "type": "",
+ "value": "44"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "8502:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8502:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8495:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8667:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c",
+ "nodeType": "YulIdentifier",
+ "src": "8578:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8578:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "8578:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "8680:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8691:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "8696:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "8687:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8687:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "8680:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "8473:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "8481:3:14",
+ "type": ""
+ }
+ ],
+ "src": "8339:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "8857:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "8867:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8933:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "8938:2:14",
+ "type": "",
+ "value": "56"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "8874:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8874:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8867:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9039:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d",
+ "nodeType": "YulIdentifier",
+ "src": "8950:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8950:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "8950:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "9052:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9063:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "9068:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "9059:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "9059:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "9052:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "8845:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "8853:3:14",
+ "type": ""
+ }
+ ],
+ "src": "8711:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "9229:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "9239:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9305:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "9310:2:14",
+ "type": "",
+ "value": "42"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "9246:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "9246:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9239:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9411:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba",
+ "nodeType": "YulIdentifier",
+ "src": "9322:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "9322:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "9322:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "9424:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9435:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "9440:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "9431:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "9431:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "9424:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "9217:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "9225:3:14",
+ "type": ""
+ }
+ ],
+ "src": "9083:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "9601:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "9611:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9677:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "9682:2:14",
+ "type": "",
+ "value": "41"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "9618:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "9618:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9611:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9783:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397",
+ "nodeType": "YulIdentifier",
+ "src": "9694:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "9694:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "9694:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "9796:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9807:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "9812:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "9803:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "9803:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "9796:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "9589:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "9597:3:14",
+ "type": ""
+ }
+ ],
+ "src": "9455:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "9973:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "9983:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10049:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "10054:2:14",
+ "type": "",
+ "value": "44"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "9990:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "9990:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9983:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10155:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
+ "nodeType": "YulIdentifier",
+ "src": "10066:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "10066:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "10066:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "10168:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10179:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "10184:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "10175:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "10175:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "10168:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "9961:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "9969:3:14",
+ "type": ""
+ }
+ ],
+ "src": "9827:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "10345:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "10355:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10421:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "10426:2:14",
+ "type": "",
+ "value": "41"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "10362:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "10362:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10355:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10527:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950",
+ "nodeType": "YulIdentifier",
+ "src": "10438:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "10438:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "10438:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "10540:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10551:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "10556:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "10547:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "10547:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "10540:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "10333:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "10341:3:14",
+ "type": ""
+ }
+ ],
+ "src": "10199:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "10717:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "10727:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10793:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "10798:2:14",
+ "type": "",
+ "value": "47"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "10734:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "10734:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10727:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10899:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb",
+ "nodeType": "YulIdentifier",
+ "src": "10810:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "10810:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "10810:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "10912:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10923:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "10928:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "10919:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "10919:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "10912:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "10705:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "10713:3:14",
+ "type": ""
+ }
+ ],
+ "src": "10571:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "11089:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "11099:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11165:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "11170:2:14",
+ "type": "",
+ "value": "33"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "11106:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11106:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11099:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11271:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942",
+ "nodeType": "YulIdentifier",
+ "src": "11182:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11182:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "11182:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "11284:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11295:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "11300:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "11291:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11291:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "11284:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "11077:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "11085:3:14",
+ "type": ""
+ }
+ ],
+ "src": "10943:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "11461:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "11471:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11537:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "11542:2:14",
+ "type": "",
+ "value": "49"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "11478:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11478:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11471:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11643:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
+ "nodeType": "YulIdentifier",
+ "src": "11554:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11554:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "11554:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "11656:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11667:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "11672:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "11663:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11663:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "11656:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "11449:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "11457:3:14",
+ "type": ""
+ }
+ ],
+ "src": "11315:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "11752:53:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11769:3:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "11792:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "11774:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11774:24:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "11762:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11762:37:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "11762:37:14"
+ }
+ ]
+ },
+ "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "11740:5:14",
+ "type": ""
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "11747:3:14",
+ "type": ""
+ }
+ ],
+ "src": "11687:118:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "11995:251:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "12006:102:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "12095:6:14"
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "12104:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "12013:81:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12013:95:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "12006:3:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "12118:102:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value1",
+ "nodeType": "YulIdentifier",
+ "src": "12207:6:14"
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "12216:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "12125:81:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12125:95:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "12118:3:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "12230:10:14",
+ "value": {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "12237:3:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "12230:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "11966:3:14",
+ "type": ""
+ },
+ {
+ "name": "value1",
+ "nodeType": "YulTypedName",
+ "src": "11972:6:14",
+ "type": ""
+ },
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "11980:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "11991:3:14",
+ "type": ""
+ }
+ ],
+ "src": "11811:435:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "12350:124:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "12360:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "12372:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "12383:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "12368:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12368:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "12360:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "12440:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "12453:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "12464:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "12449:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12449:17:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_address_to_t_address_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "12396:43:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12396:71:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "12396:71:14"
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "12322:9:14",
+ "type": ""
+ },
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "12334:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "12345:4:14",
+ "type": ""
+ }
+ ],
+ "src": "12252:222:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "12680:440:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "12690:27:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "12702:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "12713:3:14",
+ "type": "",
+ "value": "128"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "12698:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12698:19:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "12690:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "12771:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "12784:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "12795:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "12780:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12780:17:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_address_to_t_address_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "12727:43:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12727:71:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "12727:71:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value1",
+ "nodeType": "YulIdentifier",
+ "src": "12852:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "12865:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "12876:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "12861:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12861:18:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_address_to_t_address_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "12808:43:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12808:72:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "12808:72:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value2",
+ "nodeType": "YulIdentifier",
+ "src": "12934:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "12947:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "12958:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "12943:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12943:18:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "12890:43:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12890:72:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "12890:72:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "12983:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "12994:2:14",
+ "type": "",
+ "value": "96"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "12979:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12979:18:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "13003:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "13009:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "12999:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12999:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "12972:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12972:48:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "12972:48:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "13029:84:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value3",
+ "nodeType": "YulIdentifier",
+ "src": "13099:6:14"
+ },
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "13108:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "13037:61:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13037:76:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "13029:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "12628:9:14",
+ "type": ""
+ },
+ {
+ "name": "value3",
+ "nodeType": "YulTypedName",
+ "src": "12640:6:14",
+ "type": ""
+ },
+ {
+ "name": "value2",
+ "nodeType": "YulTypedName",
+ "src": "12648:6:14",
+ "type": ""
+ },
+ {
+ "name": "value1",
+ "nodeType": "YulTypedName",
+ "src": "12656:6:14",
+ "type": ""
+ },
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "12664:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "12675:4:14",
+ "type": ""
+ }
+ ],
+ "src": "12480:640:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "13218:118:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "13228:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "13240:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "13251:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "13236:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13236:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "13228:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "13302:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "13315:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "13326:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "13311:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13311:17:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_bool_to_t_bool_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "13264:37:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13264:65:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "13264:65:14"
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "13190:9:14",
+ "type": ""
+ },
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "13202:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "13213:4:14",
+ "type": ""
+ }
+ ],
+ "src": "13126:210:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "13460:195:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "13470:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "13482:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "13493:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "13478:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13478:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "13470:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "13517:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "13528:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "13513:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13513:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "13536:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "13542:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "13532:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13532:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "13506:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13506:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "13506:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "13562:86:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "13634:6:14"
+ },
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "13643:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "13570:63:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13570:78:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "13562:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "13432:9:14",
+ "type": ""
+ },
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "13444:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "13455:4:14",
+ "type": ""
+ }
+ ],
+ "src": "13342:313:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "13832:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "13842:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "13854:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "13865:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "13850:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13850:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "13842:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "13889:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "13900:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "13885:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13885:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "13908:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "13914:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "13904:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13904:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "13878:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13878:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "13878:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "13934:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "14068:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "13942:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13942:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "13934:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "13812:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "13827:4:14",
+ "type": ""
+ }
+ ],
+ "src": "13661:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "14257:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "14267:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "14279:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "14290:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "14275:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14275:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "14267:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "14314:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "14325:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "14310:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14310:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "14333:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "14339:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "14329:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14329:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "14303:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14303:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "14303:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "14359:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "14493:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "14367:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14367:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "14359:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "14237:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "14252:4:14",
+ "type": ""
+ }
+ ],
+ "src": "14086:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "14682:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "14692:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "14704:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "14715:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "14700:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14700:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "14692:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "14739:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "14750:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "14735:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14735:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "14758:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "14764:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "14754:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14754:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "14728:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14728:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "14728:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "14784:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "14918:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "14792:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14792:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "14784:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "14662:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "14677:4:14",
+ "type": ""
+ }
+ ],
+ "src": "14511:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "15107:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "15117:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "15129:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "15140:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "15125:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15125:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "15117:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "15164:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "15175:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "15160:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15160:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "15183:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "15189:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "15179:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15179:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "15153:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15153:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "15153:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "15209:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "15343:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "15217:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15217:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "15209:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "15087:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "15102:4:14",
+ "type": ""
+ }
+ ],
+ "src": "14936:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "15532:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "15542:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "15554:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "15565:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "15550:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15550:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "15542:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "15589:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "15600:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "15585:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15585:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "15608:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "15614:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "15604:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15604:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "15578:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15578:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "15578:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "15634:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "15768:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "15642:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15642:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "15634:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "15512:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "15527:4:14",
+ "type": ""
+ }
+ ],
+ "src": "15361:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "15957:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "15967:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "15979:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "15990:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "15975:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15975:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "15967:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16014:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "16025:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "16010:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16010:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "16033:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16039:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "16029:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16029:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "16003:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16003:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "16003:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "16059:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "16193:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "16067:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16067:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "16059:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "15937:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "15952:4:14",
+ "type": ""
+ }
+ ],
+ "src": "15786:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "16382:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "16392:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16404:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "16415:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "16400:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16400:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "16392:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16439:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "16450:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "16435:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16435:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "16458:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16464:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "16454:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16454:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "16428:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16428:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "16428:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "16484:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "16618:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "16492:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16492:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "16484:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "16362:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "16377:4:14",
+ "type": ""
+ }
+ ],
+ "src": "16211:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "16807:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "16817:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16829:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "16840:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "16825:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16825:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "16817:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16864:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "16875:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "16860:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16860:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "16883:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16889:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "16879:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16879:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "16853:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16853:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "16853:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "16909:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17043:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "16917:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16917:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "16909:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "16787:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "16802:4:14",
+ "type": ""
+ }
+ ],
+ "src": "16636:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "17232:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "17242:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "17254:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "17265:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "17250:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17250:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17242:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "17289:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "17300:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "17285:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17285:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17308:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "17314:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "17304:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17304:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "17278:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17278:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "17278:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "17334:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17468:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "17342:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17342:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17334:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "17212:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "17227:4:14",
+ "type": ""
+ }
+ ],
+ "src": "17061:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "17657:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "17667:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "17679:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "17690:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "17675:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17675:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17667:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "17714:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "17725:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "17710:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17710:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17733:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "17739:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "17729:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17729:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "17703:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17703:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "17703:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "17759:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17893:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "17767:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17767:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17759:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "17637:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "17652:4:14",
+ "type": ""
+ }
+ ],
+ "src": "17486:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "18082:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "18092:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "18104:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "18115:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "18100:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18100:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18092:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "18139:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "18150:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "18135:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18135:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18158:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "18164:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "18154:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18154:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "18128:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18128:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "18128:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "18184:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18318:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "18192:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18192:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18184:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "18062:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "18077:4:14",
+ "type": ""
+ }
+ ],
+ "src": "17911:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "18507:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "18517:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "18529:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "18540:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "18525:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18525:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18517:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "18564:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "18575:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "18560:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18560:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18583:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "18589:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "18579:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18579:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "18553:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18553:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "18553:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "18609:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18743:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "18617:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18617:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18609:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "18487:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "18502:4:14",
+ "type": ""
+ }
+ ],
+ "src": "18336:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "18859:124:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "18869:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "18881:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "18892:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "18877:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18877:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18869:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "18949:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "18962:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "18973:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "18958:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18958:17:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "18905:43:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18905:71:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "18905:71:14"
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "18831:9:14",
+ "type": ""
+ },
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "18843:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "18854:4:14",
+ "type": ""
+ }
+ ],
+ "src": "18761:222:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "19030:88:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "19040:30:14",
+ "value": {
+ "arguments": [],
+ "functionName": {
+ "name": "allocate_unbounded",
+ "nodeType": "YulIdentifier",
+ "src": "19050:18:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19050:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "19040:6:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "19099:6:14"
+ },
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "19107:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "finalize_allocation",
+ "nodeType": "YulIdentifier",
+ "src": "19079:19:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19079:33:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "19079:33:14"
+ }
+ ]
+ },
+ "name": "allocate_memory",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "size",
+ "nodeType": "YulTypedName",
+ "src": "19014:4:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "19023:6:14",
+ "type": ""
+ }
+ ],
+ "src": "18989:129:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "19164:35:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "19174:19:14",
+ "value": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "19190:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "19184:5:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19184:9:14"
+ },
+ "variableNames": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "19174:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "allocate_unbounded",
+ "nodeType": "YulFunctionDefinition",
+ "returnVariables": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "19157:6:14",
+ "type": ""
+ }
+ ],
+ "src": "19124:75:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "19271:241:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "19376:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x41",
+ "nodeType": "YulIdentifier",
+ "src": "19378:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19378:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "19378:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "19348:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "19356:18:14",
+ "type": "",
+ "value": "0xffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "19345:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19345:30:14"
+ },
+ "nodeType": "YulIf",
+ "src": "19342:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "19408:37:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "19438:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "round_up_to_mul_of_32",
+ "nodeType": "YulIdentifier",
+ "src": "19416:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19416:29:14"
+ },
+ "variableNames": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "19408:4:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "19482:23:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "19494:4:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "19500:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "19490:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19490:15:14"
+ },
+ "variableNames": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "19482:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "array_allocation_size_t_bytes_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "19255:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "size",
+ "nodeType": "YulTypedName",
+ "src": "19266:4:14",
+ "type": ""
+ }
+ ],
+ "src": "19205:307:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "19576:40:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "19587:22:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "19603:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "19597:5:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19597:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "19587:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "array_length_t_bytes_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "19559:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "19569:6:14",
+ "type": ""
+ }
+ ],
+ "src": "19518:98:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "19681:40:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "19692:22:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "19708:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "19702:5:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19702:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "19692:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "array_length_t_string_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "19664:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "19674:6:14",
+ "type": ""
+ }
+ ],
+ "src": "19622:99:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "19822:73:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "19839:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "19844:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "19832:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19832:19:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "19832:19:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "19860:29:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "19879:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "19884:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "19875:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19875:14:14"
+ },
+ "variableNames": [
+ {
+ "name": "updated_pos",
+ "nodeType": "YulIdentifier",
+ "src": "19860:11:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "19794:3:14",
+ "type": ""
+ },
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "19799:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "updated_pos",
+ "nodeType": "YulTypedName",
+ "src": "19810:11:14",
+ "type": ""
+ }
+ ],
+ "src": "19727:168:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "19997:73:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "20014:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "20019:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "20007:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20007:19:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "20007:19:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "20035:29:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "20054:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "20059:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "20050:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20050:14:14"
+ },
+ "variableNames": [
+ {
+ "name": "updated_pos",
+ "nodeType": "YulIdentifier",
+ "src": "20035:11:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "19969:3:14",
+ "type": ""
+ },
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "19974:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "updated_pos",
+ "nodeType": "YulTypedName",
+ "src": "19985:11:14",
+ "type": ""
+ }
+ ],
+ "src": "19901:169:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "20190:34:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "20200:18:14",
+ "value": {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "20215:3:14"
+ },
+ "variableNames": [
+ {
+ "name": "updated_pos",
+ "nodeType": "YulIdentifier",
+ "src": "20200:11:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "20162:3:14",
+ "type": ""
+ },
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "20167:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "updated_pos",
+ "nodeType": "YulTypedName",
+ "src": "20178:11:14",
+ "type": ""
+ }
+ ],
+ "src": "20076:148:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "20274:261:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "20284:25:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "20307:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "20289:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20289:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "20284:1:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "20318:25:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "20341:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "20323:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20323:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "20318:1:14"
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "20481:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x11",
+ "nodeType": "YulIdentifier",
+ "src": "20483:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20483:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "20483:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "20402:1:14"
+ },
+ {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "20409:66:14",
+ "type": "",
+ "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+ },
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "20477:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "20405:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20405:74:14"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "20399:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20399:81:14"
+ },
+ "nodeType": "YulIf",
+ "src": "20396:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "20513:16:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "20524:1:14"
+ },
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "20527:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "20520:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20520:9:14"
+ },
+ "variableNames": [
+ {
+ "name": "sum",
+ "nodeType": "YulIdentifier",
+ "src": "20513:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "checked_add_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "x",
+ "nodeType": "YulTypedName",
+ "src": "20261:1:14",
+ "type": ""
+ },
+ {
+ "name": "y",
+ "nodeType": "YulTypedName",
+ "src": "20264:1:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "sum",
+ "nodeType": "YulTypedName",
+ "src": "20270:3:14",
+ "type": ""
+ }
+ ],
+ "src": "20230:305:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "20583:143:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "20593:25:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "20616:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "20598:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20598:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "20593:1:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "20627:25:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "20650:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "20632:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20632:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "20627:1:14"
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "20674:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x12",
+ "nodeType": "YulIdentifier",
+ "src": "20676:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20676:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "20676:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "20671:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "20664:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20664:9:14"
+ },
+ "nodeType": "YulIf",
+ "src": "20661:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "20706:14:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "20715:1:14"
+ },
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "20718:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "div",
+ "nodeType": "YulIdentifier",
+ "src": "20711:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20711:9:14"
+ },
+ "variableNames": [
+ {
+ "name": "r",
+ "nodeType": "YulIdentifier",
+ "src": "20706:1:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "checked_div_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "x",
+ "nodeType": "YulTypedName",
+ "src": "20572:1:14",
+ "type": ""
+ },
+ {
+ "name": "y",
+ "nodeType": "YulTypedName",
+ "src": "20575:1:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "r",
+ "nodeType": "YulTypedName",
+ "src": "20581:1:14",
+ "type": ""
+ }
+ ],
+ "src": "20541:185:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "20777:146:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "20787:25:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "20810:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "20792:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20792:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "20787:1:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "20821:25:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "20844:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "20826:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20826:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "20821:1:14"
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "20868:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x11",
+ "nodeType": "YulIdentifier",
+ "src": "20870:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20870:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "20870:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "20862:1:14"
+ },
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "20865:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "lt",
+ "nodeType": "YulIdentifier",
+ "src": "20859:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20859:8:14"
+ },
+ "nodeType": "YulIf",
+ "src": "20856:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "20900:17:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "20912:1:14"
+ },
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "20915:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "20908:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20908:9:14"
+ },
+ "variableNames": [
+ {
+ "name": "diff",
+ "nodeType": "YulIdentifier",
+ "src": "20900:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "checked_sub_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "x",
+ "nodeType": "YulTypedName",
+ "src": "20763:1:14",
+ "type": ""
+ },
+ {
+ "name": "y",
+ "nodeType": "YulTypedName",
+ "src": "20766:1:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "diff",
+ "nodeType": "YulTypedName",
+ "src": "20772:4:14",
+ "type": ""
+ }
+ ],
+ "src": "20732:191:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "20974:51:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "20984:35:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "21013:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint160",
+ "nodeType": "YulIdentifier",
+ "src": "20995:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20995:24:14"
+ },
+ "variableNames": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulIdentifier",
+ "src": "20984:7:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "cleanup_t_address",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "20956:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulTypedName",
+ "src": "20966:7:14",
+ "type": ""
+ }
+ ],
+ "src": "20929:96:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "21073:48:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "21083:32:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "21108:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "21101:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21101:13:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "21094:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21094:21:14"
+ },
+ "variableNames": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulIdentifier",
+ "src": "21083:7:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "cleanup_t_bool",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "21055:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulTypedName",
+ "src": "21065:7:14",
+ "type": ""
+ }
+ ],
+ "src": "21031:90:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "21171:105:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "21181:89:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "21196:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "21203:66:14",
+ "type": "",
+ "value": "0xffffffff00000000000000000000000000000000000000000000000000000000"
+ }
+ ],
+ "functionName": {
+ "name": "and",
+ "nodeType": "YulIdentifier",
+ "src": "21192:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21192:78:14"
+ },
+ "variableNames": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulIdentifier",
+ "src": "21181:7:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "cleanup_t_bytes4",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "21153:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulTypedName",
+ "src": "21163:7:14",
+ "type": ""
+ }
+ ],
+ "src": "21127:149:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "21327:81:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "21337:65:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "21352:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "21359:42:14",
+ "type": "",
+ "value": "0xffffffffffffffffffffffffffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "and",
+ "nodeType": "YulIdentifier",
+ "src": "21348:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21348:54:14"
+ },
+ "variableNames": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulIdentifier",
+ "src": "21337:7:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "cleanup_t_uint160",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "21309:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulTypedName",
+ "src": "21319:7:14",
+ "type": ""
+ }
+ ],
+ "src": "21282:126:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "21459:32:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "21469:16:14",
+ "value": {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "21480:5:14"
+ },
+ "variableNames": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulIdentifier",
+ "src": "21469:7:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "21441:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulTypedName",
+ "src": "21451:7:14",
+ "type": ""
+ }
+ ],
+ "src": "21414:77:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "21548:103:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "dst",
+ "nodeType": "YulIdentifier",
+ "src": "21571:3:14"
+ },
+ {
+ "name": "src",
+ "nodeType": "YulIdentifier",
+ "src": "21576:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "21581:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldatacopy",
+ "nodeType": "YulIdentifier",
+ "src": "21558:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21558:30:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "21558:30:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dst",
+ "nodeType": "YulIdentifier",
+ "src": "21629:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "21634:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "21625:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21625:16:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "21643:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "21618:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21618:27:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "21618:27:14"
+ }
+ ]
+ },
+ "name": "copy_calldata_to_memory",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "src",
+ "nodeType": "YulTypedName",
+ "src": "21530:3:14",
+ "type": ""
+ },
+ {
+ "name": "dst",
+ "nodeType": "YulTypedName",
+ "src": "21535:3:14",
+ "type": ""
+ },
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "21540:6:14",
+ "type": ""
+ }
+ ],
+ "src": "21497:154:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "21706:258:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "21716:10:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "21725:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "i",
+ "nodeType": "YulTypedName",
+ "src": "21720:1:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "21785:63:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dst",
+ "nodeType": "YulIdentifier",
+ "src": "21810:3:14"
+ },
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "21815:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "21806:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21806:11:14"
+ },
+ {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "src",
+ "nodeType": "YulIdentifier",
+ "src": "21829:3:14"
+ },
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "21834:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "21825:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21825:11:14"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "21819:5:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21819:18:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "21799:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21799:39:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "21799:39:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "21746:1:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "21749:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "lt",
+ "nodeType": "YulIdentifier",
+ "src": "21743:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21743:13:14"
+ },
+ "nodeType": "YulForLoop",
+ "post": {
+ "nodeType": "YulBlock",
+ "src": "21757:19:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "21759:15:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "21768:1:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "21771:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "21764:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21764:10:14"
+ },
+ "variableNames": [
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "21759:1:14"
+ }
+ ]
+ }
+ ]
+ },
+ "pre": {
+ "nodeType": "YulBlock",
+ "src": "21739:3:14",
+ "statements": []
+ },
+ "src": "21735:113:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "21882:76:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dst",
+ "nodeType": "YulIdentifier",
+ "src": "21932:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "21937:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "21928:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21928:16:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "21946:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "21921:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21921:27:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "21921:27:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "21863:1:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "21866:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "21860:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21860:13:14"
+ },
+ "nodeType": "YulIf",
+ "src": "21857:2:14"
+ }
+ ]
+ },
+ "name": "copy_memory_to_memory",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "src",
+ "nodeType": "YulTypedName",
+ "src": "21688:3:14",
+ "type": ""
+ },
+ {
+ "name": "dst",
+ "nodeType": "YulTypedName",
+ "src": "21693:3:14",
+ "type": ""
+ },
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "21698:6:14",
+ "type": ""
+ }
+ ],
+ "src": "21657:307:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "22021:269:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "22031:22:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "data",
+ "nodeType": "YulIdentifier",
+ "src": "22045:4:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "22051:1:14",
+ "type": "",
+ "value": "2"
+ }
+ ],
+ "functionName": {
+ "name": "div",
+ "nodeType": "YulIdentifier",
+ "src": "22041:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22041:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "22031:6:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "22062:38:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "data",
+ "nodeType": "YulIdentifier",
+ "src": "22092:4:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "22098:1:14",
+ "type": "",
+ "value": "1"
+ }
+ ],
+ "functionName": {
+ "name": "and",
+ "nodeType": "YulIdentifier",
+ "src": "22088:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22088:12:14"
+ },
+ "variables": [
+ {
+ "name": "outOfPlaceEncoding",
+ "nodeType": "YulTypedName",
+ "src": "22066:18:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "22139:51:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "22153:27:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "22167:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "22175:4:14",
+ "type": "",
+ "value": "0x7f"
+ }
+ ],
+ "functionName": {
+ "name": "and",
+ "nodeType": "YulIdentifier",
+ "src": "22163:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22163:17:14"
+ },
+ "variableNames": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "22153:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "outOfPlaceEncoding",
+ "nodeType": "YulIdentifier",
+ "src": "22119:18:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "22112:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22112:26:14"
+ },
+ "nodeType": "YulIf",
+ "src": "22109:2:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "22242:42:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x22",
+ "nodeType": "YulIdentifier",
+ "src": "22256:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22256:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "22256:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "outOfPlaceEncoding",
+ "nodeType": "YulIdentifier",
+ "src": "22206:18:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "22229:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "22237:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "lt",
+ "nodeType": "YulIdentifier",
+ "src": "22226:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22226:14:14"
+ }
+ ],
+ "functionName": {
+ "name": "eq",
+ "nodeType": "YulIdentifier",
+ "src": "22203:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22203:38:14"
+ },
+ "nodeType": "YulIf",
+ "src": "22200:2:14"
+ }
+ ]
+ },
+ "name": "extract_byte_array_length",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "data",
+ "nodeType": "YulTypedName",
+ "src": "22005:4:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "22014:6:14",
+ "type": ""
+ }
+ ],
+ "src": "21970:320:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "22339:238:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "22349:58:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "22371:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "22401:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "round_up_to_mul_of_32",
+ "nodeType": "YulIdentifier",
+ "src": "22379:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22379:27:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "22367:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22367:40:14"
+ },
+ "variables": [
+ {
+ "name": "newFreePtr",
+ "nodeType": "YulTypedName",
+ "src": "22353:10:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "22518:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x41",
+ "nodeType": "YulIdentifier",
+ "src": "22520:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22520:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "22520:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "newFreePtr",
+ "nodeType": "YulIdentifier",
+ "src": "22461:10:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "22473:18:14",
+ "type": "",
+ "value": "0xffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "22458:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22458:34:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "newFreePtr",
+ "nodeType": "YulIdentifier",
+ "src": "22497:10:14"
+ },
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "22509:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "lt",
+ "nodeType": "YulIdentifier",
+ "src": "22494:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22494:22:14"
+ }
+ ],
+ "functionName": {
+ "name": "or",
+ "nodeType": "YulIdentifier",
+ "src": "22455:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22455:62:14"
+ },
+ "nodeType": "YulIf",
+ "src": "22452:2:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "22556:2:14",
+ "type": "",
+ "value": "64"
+ },
+ {
+ "name": "newFreePtr",
+ "nodeType": "YulIdentifier",
+ "src": "22560:10:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "22549:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22549:22:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "22549:22:14"
+ }
+ ]
+ },
+ "name": "finalize_allocation",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "22325:6:14",
+ "type": ""
+ },
+ {
+ "name": "size",
+ "nodeType": "YulTypedName",
+ "src": "22333:4:14",
+ "type": ""
+ }
+ ],
+ "src": "22296:281:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "22626:190:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "22636:33:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "22663:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "22645:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22645:24:14"
+ },
+ "variableNames": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "22636:5:14"
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "22759:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x11",
+ "nodeType": "YulIdentifier",
+ "src": "22761:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22761:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "22761:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "22684:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "22691:66:14",
+ "type": "",
+ "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "eq",
+ "nodeType": "YulIdentifier",
+ "src": "22681:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22681:77:14"
+ },
+ "nodeType": "YulIf",
+ "src": "22678:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "22790:20:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "22801:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "22808:1:14",
+ "type": "",
+ "value": "1"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "22797:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22797:13:14"
+ },
+ "variableNames": [
+ {
+ "name": "ret",
+ "nodeType": "YulIdentifier",
+ "src": "22790:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "increment_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "22612:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "ret",
+ "nodeType": "YulTypedName",
+ "src": "22622:3:14",
+ "type": ""
+ }
+ ],
+ "src": "22583:233:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "22856:142:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "22866:25:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "22889:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "22871:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22871:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "22866:1:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "22900:25:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "22923:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "22905:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22905:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "22900:1:14"
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "22947:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x12",
+ "nodeType": "YulIdentifier",
+ "src": "22949:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22949:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "22949:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "22944:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "22937:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22937:9:14"
+ },
+ "nodeType": "YulIf",
+ "src": "22934:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "22978:14:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "22987:1:14"
+ },
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "22990:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "mod",
+ "nodeType": "YulIdentifier",
+ "src": "22983:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22983:9:14"
+ },
+ "variableNames": [
+ {
+ "name": "r",
+ "nodeType": "YulIdentifier",
+ "src": "22978:1:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "mod_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "x",
+ "nodeType": "YulTypedName",
+ "src": "22845:1:14",
+ "type": ""
+ },
+ {
+ "name": "y",
+ "nodeType": "YulTypedName",
+ "src": "22848:1:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "r",
+ "nodeType": "YulTypedName",
+ "src": "22854:1:14",
+ "type": ""
+ }
+ ],
+ "src": "22822:176:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "23032:152:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23049:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23052:77:14",
+ "type": "",
+ "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "23042:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23042:88:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23042:88:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23146:1:14",
+ "type": "",
+ "value": "4"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23149:4:14",
+ "type": "",
+ "value": "0x11"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "23139:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23139:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23139:15:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23170:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23173:4:14",
+ "type": "",
+ "value": "0x24"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "23163:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23163:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23163:15:14"
+ }
+ ]
+ },
+ "name": "panic_error_0x11",
+ "nodeType": "YulFunctionDefinition",
+ "src": "23004:180:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "23218:152:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23235:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23238:77:14",
+ "type": "",
+ "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "23228:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23228:88:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23228:88:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23332:1:14",
+ "type": "",
+ "value": "4"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23335:4:14",
+ "type": "",
+ "value": "0x12"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "23325:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23325:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23325:15:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23356:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23359:4:14",
+ "type": "",
+ "value": "0x24"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "23349:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23349:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23349:15:14"
+ }
+ ]
+ },
+ "name": "panic_error_0x12",
+ "nodeType": "YulFunctionDefinition",
+ "src": "23190:180:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "23404:152:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23421:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23424:77:14",
+ "type": "",
+ "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "23414:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23414:88:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23414:88:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23518:1:14",
+ "type": "",
+ "value": "4"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23521:4:14",
+ "type": "",
+ "value": "0x22"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "23511:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23511:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23511:15:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23542:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23545:4:14",
+ "type": "",
+ "value": "0x24"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "23535:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23535:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23535:15:14"
+ }
+ ]
+ },
+ "name": "panic_error_0x22",
+ "nodeType": "YulFunctionDefinition",
+ "src": "23376:180:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "23590:152:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23607:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23610:77:14",
+ "type": "",
+ "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "23600:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23600:88:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23600:88:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23704:1:14",
+ "type": "",
+ "value": "4"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23707:4:14",
+ "type": "",
+ "value": "0x32"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "23697:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23697:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23697:15:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23728:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23731:4:14",
+ "type": "",
+ "value": "0x24"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "23721:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23721:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23721:15:14"
+ }
+ ]
+ },
+ "name": "panic_error_0x32",
+ "nodeType": "YulFunctionDefinition",
+ "src": "23562:180:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "23776:152:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23793:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23796:77:14",
+ "type": "",
+ "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "23786:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23786:88:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23786:88:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23890:1:14",
+ "type": "",
+ "value": "4"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23893:4:14",
+ "type": "",
+ "value": "0x41"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "23883:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23883:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23883:15:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23914:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23917:4:14",
+ "type": "",
+ "value": "0x24"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "23907:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23907:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23907:15:14"
+ }
+ ]
+ },
+ "name": "panic_error_0x41",
+ "nodeType": "YulFunctionDefinition",
+ "src": "23748:180:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "24023:28:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24040:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24043:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "24033:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24033:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "24033:12:14"
+ }
+ ]
+ },
+ "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
+ "nodeType": "YulFunctionDefinition",
+ "src": "23934:117:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "24146:28:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24163:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24166:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "24156:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24156:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "24156:12:14"
+ }
+ ]
+ },
+ "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae",
+ "nodeType": "YulFunctionDefinition",
+ "src": "24057:117:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "24269:28:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24286:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24289:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "24279:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24279:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "24279:12:14"
+ }
+ ]
+ },
+ "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
+ "nodeType": "YulFunctionDefinition",
+ "src": "24180:117:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "24392:28:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24409:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24412:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "24402:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24402:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "24402:12:14"
+ }
+ ]
+ },
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulFunctionDefinition",
+ "src": "24303:117:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "24474:54:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "24484:38:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "24502:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24509:2:14",
+ "type": "",
+ "value": "31"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "24498:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24498:14:14"
+ },
+ {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24518:2:14",
+ "type": "",
+ "value": "31"
+ }
+ ],
+ "functionName": {
+ "name": "not",
+ "nodeType": "YulIdentifier",
+ "src": "24514:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24514:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "and",
+ "nodeType": "YulIdentifier",
+ "src": "24494:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24494:28:14"
+ },
+ "variableNames": [
+ {
+ "name": "result",
+ "nodeType": "YulIdentifier",
+ "src": "24484:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "round_up_to_mul_of_32",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "24457:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "result",
+ "nodeType": "YulTypedName",
+ "src": "24467:6:14",
+ "type": ""
+ }
+ ],
+ "src": "24426:102:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "24640:131:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "24662:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24670:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "24658:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24658:14:14"
+ },
+ {
+ "hexValue": "4552433732313a207472616e7366657220746f206e6f6e204552433732315265",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "24674:34:14",
+ "type": "",
+ "value": "ERC721: transfer to non ERC721Re"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "24651:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24651:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "24651:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "24730:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24738:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "24726:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24726:15:14"
+ },
+ {
+ "hexValue": "63656976657220696d706c656d656e746572",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "24743:20:14",
+ "type": "",
+ "value": "ceiver implementer"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "24719:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24719:45:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "24719:45:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "24632:6:14",
+ "type": ""
+ }
+ ],
+ "src": "24534:237:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "24883:117:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "24905:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24913:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "24901:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24901:14:14"
+ },
+ {
+ "hexValue": "4552433732313a207472616e7366657220746f20746865207a65726f20616464",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "24917:34:14",
+ "type": "",
+ "value": "ERC721: transfer to the zero add"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "24894:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24894:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "24894:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "24973:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24981:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "24969:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24969:15:14"
+ },
+ {
+ "hexValue": "72657373",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "24986:6:14",
+ "type": "",
+ "value": "ress"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "24962:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24962:31:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "24962:31:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "24875:6:14",
+ "type": ""
+ }
+ ],
+ "src": "24777:223:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "25112:69:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "25134:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "25142:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "25130:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25130:14:14"
+ },
+ {
+ "hexValue": "4552433732313a20617070726f766520746f2063616c6c6572",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "25146:27:14",
+ "type": "",
+ "value": "ERC721: approve to caller"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "25123:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25123:51:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "25123:51:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "25104:6:14",
+ "type": ""
+ }
+ ],
+ "src": "25006:175:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "25293:125:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "25315:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "25323:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "25311:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25311:14:14"
+ },
+ {
+ "hexValue": "4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "25327:34:14",
+ "type": "",
+ "value": "ERC721: operator query for nonex"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "25304:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25304:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "25304:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "25383:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "25391:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "25379:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25379:15:14"
+ },
+ {
+ "hexValue": "697374656e7420746f6b656e",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "25396:14:14",
+ "type": "",
+ "value": "istent token"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "25372:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25372:39:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "25372:39:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "25285:6:14",
+ "type": ""
+ }
+ ],
+ "src": "25187:231:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "25530:137:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "25552:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "25560:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "25548:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25548:14:14"
+ },
+ {
+ "hexValue": "4552433732313a20617070726f76652063616c6c6572206973206e6f74206f77",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "25564:34:14",
+ "type": "",
+ "value": "ERC721: approve caller is not ow"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "25541:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25541:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "25541:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "25620:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "25628:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "25616:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25616:15:14"
+ },
+ {
+ "hexValue": "6e6572206e6f7220617070726f76656420666f7220616c6c",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "25633:26:14",
+ "type": "",
+ "value": "ner nor approved for all"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "25609:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25609:51:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "25609:51:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "25522:6:14",
+ "type": ""
+ }
+ ],
+ "src": "25424:243:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "25779:123:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "25801:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "25809:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "25797:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25797:14:14"
+ },
+ {
+ "hexValue": "4552433732313a2062616c616e636520717565727920666f7220746865207a65",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "25813:34:14",
+ "type": "",
+ "value": "ERC721: balance query for the ze"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "25790:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25790:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "25790:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "25869:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "25877:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "25865:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25865:15:14"
+ },
+ {
+ "hexValue": "726f2061646472657373",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "25882:12:14",
+ "type": "",
+ "value": "ro address"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "25858:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25858:37:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "25858:37:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "25771:6:14",
+ "type": ""
+ }
+ ],
+ "src": "25673:229:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "26014:122:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "26036:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "26044:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "26032:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26032:14:14"
+ },
+ {
+ "hexValue": "4552433732313a206f776e657220717565727920666f72206e6f6e6578697374",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "26048:34:14",
+ "type": "",
+ "value": "ERC721: owner query for nonexist"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "26025:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26025:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "26025:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "26104:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "26112:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "26100:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26100:15:14"
+ },
+ {
+ "hexValue": "656e7420746f6b656e",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "26117:11:14",
+ "type": "",
+ "value": "ent token"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "26093:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26093:36:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "26093:36:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "26006:6:14",
+ "type": ""
+ }
+ ],
+ "src": "25908:228:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "26248:125:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "26270:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "26278:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "26266:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26266:14:14"
+ },
+ {
+ "hexValue": "4552433732313a20617070726f76656420717565727920666f72206e6f6e6578",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "26282:34:14",
+ "type": "",
+ "value": "ERC721: approved query for nonex"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "26259:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26259:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "26259:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "26338:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "26346:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "26334:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26334:15:14"
+ },
+ {
+ "hexValue": "697374656e7420746f6b656e",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "26351:14:14",
+ "type": "",
+ "value": "istent token"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "26327:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26327:39:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "26327:39:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "26240:6:14",
+ "type": ""
+ }
+ ],
+ "src": "26142:231:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "26485:122:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "26507:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "26515:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "26503:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26503:14:14"
+ },
+ {
+ "hexValue": "4552433732313a207472616e73666572206f6620746f6b656e20746861742069",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "26519:34:14",
+ "type": "",
+ "value": "ERC721: transfer of token that i"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "26496:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26496:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "26496:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "26575:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "26583:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "26571:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26571:15:14"
+ },
+ {
+ "hexValue": "73206e6f74206f776e",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "26588:11:14",
+ "type": "",
+ "value": "s not own"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "26564:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26564:36:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "26564:36:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "26477:6:14",
+ "type": ""
+ }
+ ],
+ "src": "26379:228:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "26719:128:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "26741:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "26749:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "26737:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26737:14:14"
+ },
+ {
+ "hexValue": "4552433732314d657461646174613a2055524920717565727920666f72206e6f",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "26753:34:14",
+ "type": "",
+ "value": "ERC721Metadata: URI query for no"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "26730:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26730:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "26730:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "26809:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "26817:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "26805:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26805:15:14"
+ },
+ {
+ "hexValue": "6e6578697374656e7420746f6b656e",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "26822:17:14",
+ "type": "",
+ "value": "nexistent token"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "26798:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26798:42:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "26798:42:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "26711:6:14",
+ "type": ""
+ }
+ ],
+ "src": "26613:234:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "26959:114:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "26981:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "26989:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "26977:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26977:14:14"
+ },
+ {
+ "hexValue": "4552433732313a20617070726f76616c20746f2063757272656e74206f776e65",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "26993:34:14",
+ "type": "",
+ "value": "ERC721: approval to current owne"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "26970:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26970:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "26970:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "27049:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "27057:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "27045:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27045:15:14"
+ },
+ {
+ "hexValue": "72",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "27062:3:14",
+ "type": "",
+ "value": "r"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "27038:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27038:28:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "27038:28:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "26951:6:14",
+ "type": ""
+ }
+ ],
+ "src": "26853:220:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27185:130:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "27207:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "27215:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "27203:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27203:14:14"
+ },
+ {
+ "hexValue": "4552433732313a207472616e736665722063616c6c6572206973206e6f74206f",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "27219:34:14",
+ "type": "",
+ "value": "ERC721: transfer caller is not o"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "27196:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27196:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "27196:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "27275:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "27283:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "27271:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27271:15:14"
+ },
+ {
+ "hexValue": "776e6572206e6f7220617070726f766564",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "27288:19:14",
+ "type": "",
+ "value": "wner nor approved"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "27264:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27264:44:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "27264:44:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "27177:6:14",
+ "type": ""
+ }
+ ],
+ "src": "27079:236:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27364:79:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27421:16:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "27430:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "27433:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "27423:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27423:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "27423:12:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "27387:5:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "27412:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "27394:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27394:24:14"
+ }
+ ],
+ "functionName": {
+ "name": "eq",
+ "nodeType": "YulIdentifier",
+ "src": "27384:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27384:35:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "27377:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27377:43:14"
+ },
+ "nodeType": "YulIf",
+ "src": "27374:2:14"
+ }
+ ]
+ },
+ "name": "validator_revert_t_address",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "27357:5:14",
+ "type": ""
+ }
+ ],
+ "src": "27321:122:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27489:76:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27543:16:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "27552:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "27555:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "27545:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27545:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "27545:12:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "27512:5:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "27534:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_bool",
+ "nodeType": "YulIdentifier",
+ "src": "27519:14:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27519:21:14"
+ }
+ ],
+ "functionName": {
+ "name": "eq",
+ "nodeType": "YulIdentifier",
+ "src": "27509:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27509:32:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "27502:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27502:40:14"
+ },
+ "nodeType": "YulIf",
+ "src": "27499:2:14"
+ }
+ ]
+ },
+ "name": "validator_revert_t_bool",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "27482:5:14",
+ "type": ""
+ }
+ ],
+ "src": "27449:116:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27613:78:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27669:16:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "27678:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "27681:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "27671:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27671:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "27671:12:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "27636:5:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "27660:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_bytes4",
+ "nodeType": "YulIdentifier",
+ "src": "27643:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27643:23:14"
+ }
+ ],
+ "functionName": {
+ "name": "eq",
+ "nodeType": "YulIdentifier",
+ "src": "27633:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27633:34:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "27626:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27626:42:14"
+ },
+ "nodeType": "YulIf",
+ "src": "27623:2:14"
+ }
+ ]
+ },
+ "name": "validator_revert_t_bytes4",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "27606:5:14",
+ "type": ""
+ }
+ ],
+ "src": "27571:120:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27740:79:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27797:16:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "27806:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "27809:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "27799:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27799:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "27799:12:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "27763:5:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "27788:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "27770:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27770:24:14"
+ }
+ ],
+ "functionName": {
+ "name": "eq",
+ "nodeType": "YulIdentifier",
+ "src": "27760:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27760:35:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "27753:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27753:43:14"
+ },
+ "nodeType": "YulIf",
+ "src": "27750:2:14"
+ }
+ ]
+ },
+ "name": "validator_revert_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "27733:5:14",
+ "type": ""
+ }
+ ],
+ "src": "27697:122:14"
+ }
+ ]
+ },
+ "contents": "{\n\n function abi_decode_available_length_t_bytes_memory_ptr(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n copy_calldata_to_memory(src, dst, length)\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_t_bool(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_t_bytes4(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bytes4(value)\n }\n\n function abi_decode_t_bytes4_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_bytes4(value)\n }\n\n // bytes\n function abi_decode_t_bytes_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_bytes_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value3 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_bool(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bytes4(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_bytes4_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bytes4_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n mstore(pos, cleanup_t_bool(value))\n }\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_string_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n let length := array_length_t_string_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, length)\n }\n\n function abi_encode_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 50)\n store_literal_in_memory_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 36)\n store_literal_in_memory_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 25)\n store_literal_in_memory_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 44)\n store_literal_in_memory_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 56)\n store_literal_in_memory_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 42)\n store_literal_in_memory_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 41)\n store_literal_in_memory_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 44)\n store_literal_in_memory_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 41)\n store_literal_in_memory_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 47)\n store_literal_in_memory_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 33)\n store_literal_in_memory_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 49)\n store_literal_in_memory_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value1, value0) -> end {\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value1, pos)\n\n end := pos\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_address_to_t_address_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value2, add(headStart, 64))\n\n mstore(add(headStart, 96), sub(tail, headStart))\n tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value3, tail)\n\n }\n\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_bool_to_t_bool_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0, tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_length_t_string_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function checked_div_t_uint256(x, y) -> r {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n if iszero(y) { panic_error_0x12() }\n\n r := div(x, y)\n }\n\n function checked_sub_t_uint256(x, y) -> diff {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n if lt(x, y) { panic_error_0x11() }\n\n diff := sub(x, y)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function cleanup_t_bytes4(value) -> cleaned {\n cleaned := and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function copy_calldata_to_memory(src, dst, length) {\n calldatacopy(dst, src, length)\n // clear end\n mstore(add(dst, length), 0)\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n function extract_byte_array_length(data) -> length {\n length := div(data, 2)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) {\n length := and(length, 0x7f)\n }\n\n if eq(outOfPlaceEncoding, lt(length, 32)) {\n panic_error_0x22()\n }\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function increment_t_uint256(value) -> ret {\n value := cleanup_t_uint256(value)\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n ret := add(value, 1)\n }\n\n function mod_t_uint256(x, y) -> r {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n if iszero(y) { panic_error_0x12() }\n r := mod(x, y)\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function panic_error_0x12() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n\n function panic_error_0x22() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n\n function panic_error_0x32() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function store_literal_in_memory_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: transfer to non ERC721Re\")\n\n mstore(add(memPtr, 32), \"ceiver implementer\")\n\n }\n\n function store_literal_in_memory_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: transfer to the zero add\")\n\n mstore(add(memPtr, 32), \"ress\")\n\n }\n\n function store_literal_in_memory_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: approve to caller\")\n\n }\n\n function store_literal_in_memory_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: operator query for nonex\")\n\n mstore(add(memPtr, 32), \"istent token\")\n\n }\n\n function store_literal_in_memory_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: approve caller is not ow\")\n\n mstore(add(memPtr, 32), \"ner nor approved for all\")\n\n }\n\n function store_literal_in_memory_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: balance query for the ze\")\n\n mstore(add(memPtr, 32), \"ro address\")\n\n }\n\n function store_literal_in_memory_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: owner query for nonexist\")\n\n mstore(add(memPtr, 32), \"ent token\")\n\n }\n\n function store_literal_in_memory_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: approved query for nonex\")\n\n mstore(add(memPtr, 32), \"istent token\")\n\n }\n\n function store_literal_in_memory_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: transfer of token that i\")\n\n mstore(add(memPtr, 32), \"s not own\")\n\n }\n\n function store_literal_in_memory_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721Metadata: URI query for no\")\n\n mstore(add(memPtr, 32), \"nexistent token\")\n\n }\n\n function store_literal_in_memory_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: approval to current owne\")\n\n mstore(add(memPtr, 32), \"r\")\n\n }\n\n function store_literal_in_memory_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: transfer caller is not o\")\n\n mstore(add(memPtr, 32), \"wner nor approved\")\n\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n function validator_revert_t_bytes4(value) {\n if iszero(eq(value, cleanup_t_bytes4(value))) { revert(0, 0) }\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n",
+ "id": 14,
+ "language": "Yul",
+ "name": "#utility.yul"
+ }
+ ],
+ "sourceMap": "554:12701:1:-:0;;;1316:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1390:5;1382;:13;;;;;;;;;;;;:::i;:::-;;1415:7;1405;:17;;;;;;;;;;;;:::i;:::-;;1316:113;;554:12701;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:421:14:-;96:5;121:66;137:49;179:6;137:49;:::i;:::-;121:66;:::i;:::-;112:75;;210:6;203:5;196:21;248:4;241:5;237:16;286:3;277:6;272:3;268:16;265:25;262:2;;;293:79;;:::i;:::-;262:2;383:39;415:6;410:3;405;383:39;:::i;:::-;102:326;;;;;;:::o;448:355::-;515:5;564:3;557:4;549:6;545:17;541:27;531:2;;572:79;;:::i;:::-;531:2;682:6;676:13;707:90;793:3;785:6;778:4;770:6;766:17;707:90;:::i;:::-;698:99;;521:282;;;;;:::o;809:853::-;908:6;916;965:2;953:9;944:7;940:23;936:32;933:2;;;971:79;;:::i;:::-;933:2;1112:1;1101:9;1097:17;1091:24;1142:18;1134:6;1131:30;1128:2;;;1164:79;;:::i;:::-;1128:2;1269:74;1335:7;1326:6;1315:9;1311:22;1269:74;:::i;:::-;1259:84;;1062:291;1413:2;1402:9;1398:18;1392:25;1444:18;1436:6;1433:30;1430:2;;;1466:79;;:::i;:::-;1430:2;1571:74;1637:7;1628:6;1617:9;1613:22;1571:74;:::i;:::-;1561:84;;1363:292;923:739;;;;;:::o;1668:129::-;1702:6;1729:20;;:::i;:::-;1719:30;;1758:33;1786:4;1778:6;1758:33;:::i;:::-;1709:88;;;:::o;1803:75::-;1836:6;1869:2;1863:9;1853:19;;1843:35;:::o;1884:308::-;1946:4;2036:18;2028:6;2025:30;2022:2;;;2058:18;;:::i;:::-;2022:2;2096:29;2118:6;2096:29;:::i;:::-;2088:37;;2180:4;2174;2170:15;2162:23;;1951:241;;;:::o;2198:307::-;2266:1;2276:113;2290:6;2287:1;2284:13;2276:113;;;2375:1;2370:3;2366:11;2360:18;2356:1;2351:3;2347:11;2340:39;2312:2;2309:1;2305:10;2300:15;;2276:113;;;2407:6;2404:1;2401:13;2398:2;;;2487:1;2478:6;2473:3;2469:16;2462:27;2398:2;2247:258;;;;:::o;2511:320::-;2555:6;2592:1;2586:4;2582:12;2572:22;;2639:1;2633:4;2629:12;2660:18;2650:2;;2716:4;2708:6;2704:17;2694:27;;2650:2;2778;2770:6;2767:14;2747:18;2744:38;2741:2;;;2797:18;;:::i;:::-;2741:2;2562:269;;;;:::o;2837:281::-;2920:27;2942:4;2920:27;:::i;:::-;2912:6;2908:40;3050:6;3038:10;3035:22;3014:18;3002:10;2999:34;2996:62;2993:2;;;3061:18;;:::i;:::-;2993:2;3101:10;3097:2;3090:22;2880:238;;;:::o;3124:180::-;3172:77;3169:1;3162:88;3269:4;3266:1;3259:15;3293:4;3290:1;3283:15;3310:180;3358:77;3355:1;3348:88;3455:4;3452:1;3445:15;3479:4;3476:1;3469:15;3496:117;3605:1;3602;3595:12;3619:117;3728:1;3725;3718:12;3742:117;3851:1;3848;3841:12;3865:117;3974:1;3971;3964:12;3988:102;4029:6;4080:2;4076:7;4071:2;4064:5;4060:14;4056:28;4046:38;;4036:54;;;:::o;554:12701:1:-;;;;;;;",
+ "deployedSourceMap": "554:12701:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1496:300;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2414:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3925:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3463:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4789:330;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5185:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2117:235;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1855:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2576:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4209:290;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5430:320;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2744:329;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4565:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1496:300;1598:4;1648:25;1633:40;;;:11;:40;;;;:104;;;;1704:33;1689:48;;;:11;:48;;;;1633:104;:156;;;;1753:36;1777:11;1753:23;:36::i;:::-;1633:156;1614:175;;1496:300;;;:::o;2414:98::-;2468:13;2500:5;2493:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2414:98;:::o;3925:217::-;4001:7;4028:16;4036:7;4028;:16::i;:::-;4020:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4111:15;:24;4127:7;4111:24;;;;;;;;;;;;;;;;;;;;;4104:31;;3925:217;;;:::o;3463:401::-;3543:13;3559:23;3574:7;3559:14;:23::i;:::-;3543:39;;3606:5;3600:11;;:2;:11;;;;3592:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3697:5;3681:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3706:37;3723:5;3730:12;:10;:12::i;:::-;3706:16;:37::i;:::-;3681:62;3660:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3836:21;3845:2;3849:7;3836:8;:21::i;:::-;3533:331;3463:401;;:::o;4789:330::-;4978:41;4997:12;:10;:12::i;:::-;5011:7;4978:18;:41::i;:::-;4970:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5084:28;5094:4;5100:2;5104:7;5084:9;:28::i;:::-;4789:330;;;:::o;5185:179::-;5318:39;5335:4;5341:2;5345:7;5318:39;;;;;;;;;;;;:16;:39::i;:::-;5185:179;;;:::o;2117:235::-;2189:7;2208:13;2224:7;:16;2232:7;2224:16;;;;;;;;;;;;;;;;;;;;;2208:32;;2275:1;2258:19;;:5;:19;;;;2250:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2340:5;2333:12;;;2117:235;;;:::o;1855:205::-;1927:7;1971:1;1954:19;;:5;:19;;;;1946:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2037:9;:16;2047:5;2037:16;;;;;;;;;;;;;;;;2030:23;;1855:205;;;:::o;2576:102::-;2632:13;2664:7;2657:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2576:102;:::o;4209:290::-;4323:12;:10;:12::i;:::-;4311:24;;:8;:24;;;;4303:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4421:8;4376:18;:32;4395:12;:10;:12::i;:::-;4376:32;;;;;;;;;;;;;;;:42;4409:8;4376:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4473:8;4444:48;;4459:12;:10;:12::i;:::-;4444:48;;;4483:8;4444:48;;;;;;:::i;:::-;;;;;;;;4209:290;;:::o;5430:320::-;5599:41;5618:12;:10;:12::i;:::-;5632:7;5599:18;:41::i;:::-;5591:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5704:39;5718:4;5724:2;5728:7;5737:5;5704:13;:39::i;:::-;5430:320;;;;:::o;2744:329::-;2817:13;2850:16;2858:7;2850;:16::i;:::-;2842:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2929:21;2953:10;:8;:10::i;:::-;2929:34;;3004:1;2986:7;2980:21;:25;:86;;;;;;;;;;;;;;;;;3032:7;3041:18;:7;:16;:18::i;:::-;3015:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2980:86;2973:93;;;2744:329;;;:::o;4565:162::-;4662:4;4685:18;:25;4704:5;4685:25;;;;;;;;;;;;;;;:35;4711:8;4685:35;;;;;;;;;;;;;;;;;;;;;;;;;4678:42;;4565:162;;;;:::o;763:155:10:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;7222:125:1:-;7287:4;7338:1;7310:30;;:7;:16;7318:7;7310:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7303:37;;7222:125;;;:::o;587:96:7:-;640:7;666:10;659:17;;587:96;:::o;11073:171:1:-;11174:2;11147:15;:24;11163:7;11147:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11229:7;11225:2;11191:46;;11200:23;11215:7;11200:14;:23::i;:::-;11191:46;;;;;;;;;;;;11073:171;;:::o;7505:344::-;7598:4;7622:16;7630:7;7622;:16::i;:::-;7614:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7697:13;7713:23;7728:7;7713:14;:23::i;:::-;7697:39;;7765:5;7754:16;;:7;:16;;;:51;;;;7798:7;7774:31;;:20;7786:7;7774:11;:20::i;:::-;:31;;;7754:51;:87;;;;7809:32;7826:5;7833:7;7809:16;:32::i;:::-;7754:87;7746:96;;;7505:344;;;;:::o;10402:560::-;10556:4;10529:31;;:23;10544:7;10529:14;:23::i;:::-;:31;;;10521:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10638:1;10624:16;;:2;:16;;;;10616:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10692:39;10713:4;10719:2;10723:7;10692:20;:39::i;:::-;10793:29;10810:1;10814:7;10793:8;:29::i;:::-;10852:1;10833:9;:15;10843:4;10833:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10880:1;10863:9;:13;10873:2;10863:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10910:2;10891:7;:16;10899:7;10891:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10947:7;10943:2;10928:27;;10937:4;10928:27;;;;;;;;;;;;10402:560;;;:::o;6612:307::-;6763:28;6773:4;6779:2;6783:7;6763:9;:28::i;:::-;6809:48;6832:4;6838:2;6842:7;6851:5;6809:22;:48::i;:::-;6801:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6612:307;;;;:::o;3314:92::-;3365:13;3390:9;;;;;;;;;;;;;;3314:92;:::o;275:703:9:-;331:13;557:1;548:5;:10;544:51;;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;13131:122:1:-;;;;:::o;11797:778::-;11947:4;11967:15;:2;:13;;;:15::i;:::-;11963:606;;;12018:2;12002:36;;;12039:12;:10;:12::i;:::-;12053:4;12059:7;12068:5;12002:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11998:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12258:1;12241:6;:13;:18;12237:266;;;12283:60;;;;;;;;;;:::i;:::-;;;;;;;;12237:266;12455:6;12449:13;12440:6;12436:2;12432:15;12425:38;11998:519;12134:41;;;12124:51;;;:6;:51;;;;12117:58;;;;;11963:606;12554:4;12547:11;;11797:778;;;;;;;:::o;718:377:6:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;7:410:14:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;475:87;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;617:84;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;758:86;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;912:79;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:2;;1122:79;;:::i;:::-;1081:2;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1406:87;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:2;;;1613:79;;:::i;:::-;1575:2;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1565:263;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:2;;;1965:79;;:::i;:::-;1927:2;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1917:391;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:2;;;2462:79;;:::i;:::-;2424:2;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2414:519;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:2;;;3114:79;;:::i;:::-;3075:2;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:2;;;3698:79;;:::i;:::-;3662:2;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;3065:817;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:2;;;4016:79;;:::i;:::-;3978:2;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3968:388;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:2;;;4493:79;;:::i;:::-;4455:2;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4445:391;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:2;;;4955:79;;:::i;:::-;4917:2;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4907:262;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:2;;;5299:79;;:::i;:::-;5261:2;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5251:273;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:2;;;5644:79;;:::i;:::-;5606:2;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5596:263;;;;:::o;5865:118::-;5952:24;5970:5;5952:24;:::i;:::-;5947:3;5940:37;5930:53;;:::o;5989:109::-;6070:21;6085:5;6070:21;:::i;:::-;6065:3;6058:34;6048:50;;:::o;6104:360::-;6190:3;6218:38;6250:5;6218:38;:::i;:::-;6272:70;6335:6;6330:3;6272:70;:::i;:::-;6265:77;;6351:52;6396:6;6391:3;6384:4;6377:5;6373:16;6351:52;:::i;:::-;6428:29;6450:6;6428:29;:::i;:::-;6423:3;6419:39;6412:46;;6194:270;;;;;:::o;6470:364::-;6558:3;6586:39;6619:5;6586:39;:::i;:::-;6641:71;6705:6;6700:3;6641:71;:::i;:::-;6634:78;;6721:52;6766:6;6761:3;6754:4;6747:5;6743:16;6721:52;:::i;:::-;6798:29;6820:6;6798:29;:::i;:::-;6793:3;6789:39;6782:46;;6562:272;;;;;:::o;6840:377::-;6946:3;6974:39;7007:5;6974:39;:::i;:::-;7029:89;7111:6;7106:3;7029:89;:::i;:::-;7022:96;;7127:52;7172:6;7167:3;7160:4;7153:5;7149:16;7127:52;:::i;:::-;7204:6;7199:3;7195:16;7188:23;;6950:267;;;;;:::o;7223:366::-;7365:3;7386:67;7450:2;7445:3;7386:67;:::i;:::-;7379:74;;7462:93;7551:3;7462:93;:::i;:::-;7580:2;7575:3;7571:12;7564:19;;7369:220;;;:::o;7595:366::-;7737:3;7758:67;7822:2;7817:3;7758:67;:::i;:::-;7751:74;;7834:93;7923:3;7834:93;:::i;:::-;7952:2;7947:3;7943:12;7936:19;;7741:220;;;:::o;7967:366::-;8109:3;8130:67;8194:2;8189:3;8130:67;:::i;:::-;8123:74;;8206:93;8295:3;8206:93;:::i;:::-;8324:2;8319:3;8315:12;8308:19;;8113:220;;;:::o;8339:366::-;8481:3;8502:67;8566:2;8561:3;8502:67;:::i;:::-;8495:74;;8578:93;8667:3;8578:93;:::i;:::-;8696:2;8691:3;8687:12;8680:19;;8485:220;;;:::o;8711:366::-;8853:3;8874:67;8938:2;8933:3;8874:67;:::i;:::-;8867:74;;8950:93;9039:3;8950:93;:::i;:::-;9068:2;9063:3;9059:12;9052:19;;8857:220;;;:::o;9083:366::-;9225:3;9246:67;9310:2;9305:3;9246:67;:::i;:::-;9239:74;;9322:93;9411:3;9322:93;:::i;:::-;9440:2;9435:3;9431:12;9424:19;;9229:220;;;:::o;9455:366::-;9597:3;9618:67;9682:2;9677:3;9618:67;:::i;:::-;9611:74;;9694:93;9783:3;9694:93;:::i;:::-;9812:2;9807:3;9803:12;9796:19;;9601:220;;;:::o;9827:366::-;9969:3;9990:67;10054:2;10049:3;9990:67;:::i;:::-;9983:74;;10066:93;10155:3;10066:93;:::i;:::-;10184:2;10179:3;10175:12;10168:19;;9973:220;;;:::o;10199:366::-;10341:3;10362:67;10426:2;10421:3;10362:67;:::i;:::-;10355:74;;10438:93;10527:3;10438:93;:::i;:::-;10556:2;10551:3;10547:12;10540:19;;10345:220;;;:::o;10571:366::-;10713:3;10734:67;10798:2;10793:3;10734:67;:::i;:::-;10727:74;;10810:93;10899:3;10810:93;:::i;:::-;10928:2;10923:3;10919:12;10912:19;;10717:220;;;:::o;10943:366::-;11085:3;11106:67;11170:2;11165:3;11106:67;:::i;:::-;11099:74;;11182:93;11271:3;11182:93;:::i;:::-;11300:2;11295:3;11291:12;11284:19;;11089:220;;;:::o;11315:366::-;11457:3;11478:67;11542:2;11537:3;11478:67;:::i;:::-;11471:74;;11554:93;11643:3;11554:93;:::i;:::-;11672:2;11667:3;11663:12;11656:19;;11461:220;;;:::o;11687:118::-;11774:24;11792:5;11774:24;:::i;:::-;11769:3;11762:37;11752:53;;:::o;11811:435::-;11991:3;12013:95;12104:3;12095:6;12013:95;:::i;:::-;12006:102;;12125:95;12216:3;12207:6;12125:95;:::i;:::-;12118:102;;12237:3;12230:10;;11995:251;;;;;:::o;12252:222::-;12345:4;12383:2;12372:9;12368:18;12360:26;;12396:71;12464:1;12453:9;12449:17;12440:6;12396:71;:::i;:::-;12350:124;;;;:::o;12480:640::-;12675:4;12713:3;12702:9;12698:19;12690:27;;12727:71;12795:1;12784:9;12780:17;12771:6;12727:71;:::i;:::-;12808:72;12876:2;12865:9;12861:18;12852:6;12808:72;:::i;:::-;12890;12958:2;12947:9;12943:18;12934:6;12890:72;:::i;:::-;13009:9;13003:4;12999:20;12994:2;12983:9;12979:18;12972:48;13037:76;13108:4;13099:6;13037:76;:::i;:::-;13029:84;;12680:440;;;;;;;:::o;13126:210::-;13213:4;13251:2;13240:9;13236:18;13228:26;;13264:65;13326:1;13315:9;13311:17;13302:6;13264:65;:::i;:::-;13218:118;;;;:::o;13342:313::-;13455:4;13493:2;13482:9;13478:18;13470:26;;13542:9;13536:4;13532:20;13528:1;13517:9;13513:17;13506:47;13570:78;13643:4;13634:6;13570:78;:::i;:::-;13562:86;;13460:195;;;;:::o;13661:419::-;13827:4;13865:2;13854:9;13850:18;13842:26;;13914:9;13908:4;13904:20;13900:1;13889:9;13885:17;13878:47;13942:131;14068:4;13942:131;:::i;:::-;13934:139;;13832:248;;;:::o;14086:419::-;14252:4;14290:2;14279:9;14275:18;14267:26;;14339:9;14333:4;14329:20;14325:1;14314:9;14310:17;14303:47;14367:131;14493:4;14367:131;:::i;:::-;14359:139;;14257:248;;;:::o;14511:419::-;14677:4;14715:2;14704:9;14700:18;14692:26;;14764:9;14758:4;14754:20;14750:1;14739:9;14735:17;14728:47;14792:131;14918:4;14792:131;:::i;:::-;14784:139;;14682:248;;;:::o;14936:419::-;15102:4;15140:2;15129:9;15125:18;15117:26;;15189:9;15183:4;15179:20;15175:1;15164:9;15160:17;15153:47;15217:131;15343:4;15217:131;:::i;:::-;15209:139;;15107:248;;;:::o;15361:419::-;15527:4;15565:2;15554:9;15550:18;15542:26;;15614:9;15608:4;15604:20;15600:1;15589:9;15585:17;15578:47;15642:131;15768:4;15642:131;:::i;:::-;15634:139;;15532:248;;;:::o;15786:419::-;15952:4;15990:2;15979:9;15975:18;15967:26;;16039:9;16033:4;16029:20;16025:1;16014:9;16010:17;16003:47;16067:131;16193:4;16067:131;:::i;:::-;16059:139;;15957:248;;;:::o;16211:419::-;16377:4;16415:2;16404:9;16400:18;16392:26;;16464:9;16458:4;16454:20;16450:1;16439:9;16435:17;16428:47;16492:131;16618:4;16492:131;:::i;:::-;16484:139;;16382:248;;;:::o;16636:419::-;16802:4;16840:2;16829:9;16825:18;16817:26;;16889:9;16883:4;16879:20;16875:1;16864:9;16860:17;16853:47;16917:131;17043:4;16917:131;:::i;:::-;16909:139;;16807:248;;;:::o;17061:419::-;17227:4;17265:2;17254:9;17250:18;17242:26;;17314:9;17308:4;17304:20;17300:1;17289:9;17285:17;17278:47;17342:131;17468:4;17342:131;:::i;:::-;17334:139;;17232:248;;;:::o;17486:419::-;17652:4;17690:2;17679:9;17675:18;17667:26;;17739:9;17733:4;17729:20;17725:1;17714:9;17710:17;17703:47;17767:131;17893:4;17767:131;:::i;:::-;17759:139;;17657:248;;;:::o;17911:419::-;18077:4;18115:2;18104:9;18100:18;18092:26;;18164:9;18158:4;18154:20;18150:1;18139:9;18135:17;18128:47;18192:131;18318:4;18192:131;:::i;:::-;18184:139;;18082:248;;;:::o;18336:419::-;18502:4;18540:2;18529:9;18525:18;18517:26;;18589:9;18583:4;18579:20;18575:1;18564:9;18560:17;18553:47;18617:131;18743:4;18617:131;:::i;:::-;18609:139;;18507:248;;;:::o;18761:222::-;18854:4;18892:2;18881:9;18877:18;18869:26;;18905:71;18973:1;18962:9;18958:17;18949:6;18905:71;:::i;:::-;18859:124;;;;:::o;18989:129::-;19023:6;19050:20;;:::i;:::-;19040:30;;19079:33;19107:4;19099:6;19079:33;:::i;:::-;19030:88;;;:::o;19124:75::-;19157:6;19190:2;19184:9;19174:19;;19164:35;:::o;19205:307::-;19266:4;19356:18;19348:6;19345:30;19342:2;;;19378:18;;:::i;:::-;19342:2;19416:29;19438:6;19416:29;:::i;:::-;19408:37;;19500:4;19494;19490:15;19482:23;;19271:241;;;:::o;19518:98::-;19569:6;19603:5;19597:12;19587:22;;19576:40;;;:::o;19622:99::-;19674:6;19708:5;19702:12;19692:22;;19681:40;;;:::o;19727:168::-;19810:11;19844:6;19839:3;19832:19;19884:4;19879:3;19875:14;19860:29;;19822:73;;;;:::o;19901:169::-;19985:11;20019:6;20014:3;20007:19;20059:4;20054:3;20050:14;20035:29;;19997:73;;;;:::o;20076:148::-;20178:11;20215:3;20200:18;;20190:34;;;;:::o;20230:305::-;20270:3;20289:20;20307:1;20289:20;:::i;:::-;20284:25;;20323:20;20341:1;20323:20;:::i;:::-;20318:25;;20477:1;20409:66;20405:74;20402:1;20399:81;20396:2;;;20483:18;;:::i;:::-;20396:2;20527:1;20524;20520:9;20513:16;;20274:261;;;;:::o;20541:185::-;20581:1;20598:20;20616:1;20598:20;:::i;:::-;20593:25;;20632:20;20650:1;20632:20;:::i;:::-;20627:25;;20671:1;20661:2;;20676:18;;:::i;:::-;20661:2;20718:1;20715;20711:9;20706:14;;20583:143;;;;:::o;20732:191::-;20772:4;20792:20;20810:1;20792:20;:::i;:::-;20787:25;;20826:20;20844:1;20826:20;:::i;:::-;20821:25;;20865:1;20862;20859:8;20856:2;;;20870:18;;:::i;:::-;20856:2;20915:1;20912;20908:9;20900:17;;20777:146;;;;:::o;20929:96::-;20966:7;20995:24;21013:5;20995:24;:::i;:::-;20984:35;;20974:51;;;:::o;21031:90::-;21065:7;21108:5;21101:13;21094:21;21083:32;;21073:48;;;:::o;21127:149::-;21163:7;21203:66;21196:5;21192:78;21181:89;;21171:105;;;:::o;21282:126::-;21319:7;21359:42;21352:5;21348:54;21337:65;;21327:81;;;:::o;21414:77::-;21451:7;21480:5;21469:16;;21459:32;;;:::o;21497:154::-;21581:6;21576:3;21571;21558:30;21643:1;21634:6;21629:3;21625:16;21618:27;21548:103;;;:::o;21657:307::-;21725:1;21735:113;21749:6;21746:1;21743:13;21735:113;;;21834:1;21829:3;21825:11;21819:18;21815:1;21810:3;21806:11;21799:39;21771:2;21768:1;21764:10;21759:15;;21735:113;;;21866:6;21863:1;21860:13;21857:2;;;21946:1;21937:6;21932:3;21928:16;21921:27;21857:2;21706:258;;;;:::o;21970:320::-;22014:6;22051:1;22045:4;22041:12;22031:22;;22098:1;22092:4;22088:12;22119:18;22109:2;;22175:4;22167:6;22163:17;22153:27;;22109:2;22237;22229:6;22226:14;22206:18;22203:38;22200:2;;;22256:18;;:::i;:::-;22200:2;22021:269;;;;:::o;22296:281::-;22379:27;22401:4;22379:27;:::i;:::-;22371:6;22367:40;22509:6;22497:10;22494:22;22473:18;22461:10;22458:34;22455:62;22452:2;;;22520:18;;:::i;:::-;22452:2;22560:10;22556:2;22549:22;22339:238;;;:::o;22583:233::-;22622:3;22645:24;22663:5;22645:24;:::i;:::-;22636:33;;22691:66;22684:5;22681:77;22678:2;;;22761:18;;:::i;:::-;22678:2;22808:1;22801:5;22797:13;22790:20;;22626:190;;;:::o;22822:176::-;22854:1;22871:20;22889:1;22871:20;:::i;:::-;22866:25;;22905:20;22923:1;22905:20;:::i;:::-;22900:25;;22944:1;22934:2;;22949:18;;:::i;:::-;22934:2;22990:1;22987;22983:9;22978:14;;22856:142;;;;:::o;23004:180::-;23052:77;23049:1;23042:88;23149:4;23146:1;23139:15;23173:4;23170:1;23163:15;23190:180;23238:77;23235:1;23228:88;23335:4;23332:1;23325:15;23359:4;23356:1;23349:15;23376:180;23424:77;23421:1;23414:88;23521:4;23518:1;23511:15;23545:4;23542:1;23535:15;23562:180;23610:77;23607:1;23600:88;23707:4;23704:1;23697:15;23731:4;23728:1;23721:15;23748:180;23796:77;23793:1;23786:88;23893:4;23890:1;23883:15;23917:4;23914:1;23907:15;23934:117;24043:1;24040;24033:12;24057:117;24166:1;24163;24156:12;24180:117;24289:1;24286;24279:12;24303:117;24412:1;24409;24402:12;24426:102;24467:6;24518:2;24514:7;24509:2;24502:5;24498:14;24494:28;24484:38;;24474:54;;;:::o;24534:237::-;24674:34;24670:1;24662:6;24658:14;24651:58;24743:20;24738:2;24730:6;24726:15;24719:45;24640:131;:::o;24777:223::-;24917:34;24913:1;24905:6;24901:14;24894:58;24986:6;24981:2;24973:6;24969:15;24962:31;24883:117;:::o;25006:175::-;25146:27;25142:1;25134:6;25130:14;25123:51;25112:69;:::o;25187:231::-;25327:34;25323:1;25315:6;25311:14;25304:58;25396:14;25391:2;25383:6;25379:15;25372:39;25293:125;:::o;25424:243::-;25564:34;25560:1;25552:6;25548:14;25541:58;25633:26;25628:2;25620:6;25616:15;25609:51;25530:137;:::o;25673:229::-;25813:34;25809:1;25801:6;25797:14;25790:58;25882:12;25877:2;25869:6;25865:15;25858:37;25779:123;:::o;25908:228::-;26048:34;26044:1;26036:6;26032:14;26025:58;26117:11;26112:2;26104:6;26100:15;26093:36;26014:122;:::o;26142:231::-;26282:34;26278:1;26270:6;26266:14;26259:58;26351:14;26346:2;26338:6;26334:15;26327:39;26248:125;:::o;26379:228::-;26519:34;26515:1;26507:6;26503:14;26496:58;26588:11;26583:2;26575:6;26571:15;26564:36;26485:122;:::o;26613:234::-;26753:34;26749:1;26741:6;26737:14;26730:58;26822:17;26817:2;26809:6;26805:15;26798:42;26719:128;:::o;26853:220::-;26993:34;26989:1;26981:6;26977:14;26970:58;27062:3;27057:2;27049:6;27045:15;27038:28;26959:114;:::o;27079:236::-;27219:34;27215:1;27207:6;27203:14;27196:58;27288:19;27283:2;27275:6;27271:15;27264:44;27185:130;:::o;27321:122::-;27394:24;27412:5;27394:24;:::i;:::-;27387:5;27384:35;27374:2;;27433:1;27430;27423:12;27374:2;27364:79;:::o;27449:116::-;27519:21;27534:5;27519:21;:::i;:::-;27512:5;27509:32;27499:2;;27555:1;27552;27545:12;27499:2;27489:76;:::o;27571:120::-;27643:23;27660:5;27643:23;:::i;:::-;27636:5;27633:34;27623:2;;27681:1;27678;27671:12;27623:2;27613:78;:::o;27697:122::-;27770:24;27788:5;27770:24;:::i;:::-;27763:5;27760:35;27750:2;;27809:1;27806;27799:12;27750:2;27740:79;:::o",
+ "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport \"./IERC721.sol\";\nimport \"./IERC721Receiver.sol\";\nimport \"./extensions/IERC721Metadata.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/Context.sol\";\nimport \"../../utils/Strings.sol\";\nimport \"../../utils/introspection/ERC165.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721 is Context, ERC165, IERC721, IERC721Metadata {\n using Address for address;\n using Strings for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Mapping from token ID to owner address\n mapping(uint256 => address) private _owners;\n\n // Mapping owner address to token count\n mapping(address => uint256) private _balances;\n\n // Mapping from token ID to approved address\n mapping(uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n constructor(string memory name_, string memory symbol_) {\n _name = name_;\n _symbol = symbol_;\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {\n return\n interfaceId == type(IERC721).interfaceId ||\n interfaceId == type(IERC721Metadata).interfaceId ||\n super.supportsInterface(interfaceId);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n address owner = _owners[tokenId];\n require(owner != address(0), \"ERC721: owner query for nonexistent token\");\n return owner;\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory baseURI = _baseURI();\n return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : \"\";\n }\n\n /**\n * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each\n * token will be the concatenation of the `baseURI` and the `tokenId`. Empty\n * by default, can be overriden in child contracts.\n */\n function _baseURI() internal view virtual returns (string memory) {\n return \"\";\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _owners[tokenId] != address(0);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _mint(to, tokenId);\n require(\n _checkOnERC721Received(address(0), to, tokenId, _data),\n \"ERC721: transfer to non ERC721Receiver implementer\"\n );\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721.ownerOf(tokenId);\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n _balances[owner] -= 1;\n delete _owners[tokenId];\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {\n require(ERC721.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _balances[from] -= 1;\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits a {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721.ownerOf(tokenId), to, tokenId);\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) private returns (bool) {\n if (to.isContract()) {\n try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n return retval == IERC721Receiver.onERC721Received.selector;\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n } else {\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n } else {\n return true;\n }\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n}\n",
+ "sourcePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
+ "ast": {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
+ "exportedSymbols": {
+ "Address": [
+ 1505
+ ],
+ "Context": [
+ 1527
+ ],
+ "ERC165": [
+ 1828
+ ],
+ "ERC721": [
+ 919
+ ],
+ "IERC165": [
+ 1840
+ ],
+ "IERC721": [
+ 1035
+ ],
+ "IERC721Metadata": [
+ 1208
+ ],
+ "IERC721Receiver": [
+ 1053
+ ],
+ "Strings": [
+ 1804
+ ]
+ },
+ "id": 920,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 105,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:1"
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
+ "file": "./IERC721.sol",
+ "id": 106,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 920,
+ "sourceUnit": 1036,
+ "src": "58:23:1",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol",
+ "file": "./IERC721Receiver.sol",
+ "id": 107,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 920,
+ "sourceUnit": 1054,
+ "src": "82:31:1",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
+ "file": "./extensions/IERC721Metadata.sol",
+ "id": 108,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 920,
+ "sourceUnit": 1209,
+ "src": "114:42:1",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
+ "file": "../../utils/Address.sol",
+ "id": 109,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 920,
+ "sourceUnit": 1506,
+ "src": "157:33:1",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
+ "file": "../../utils/Context.sol",
+ "id": 110,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 920,
+ "sourceUnit": 1528,
+ "src": "191:33:1",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
+ "file": "../../utils/Strings.sol",
+ "id": 111,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 920,
+ "sourceUnit": 1805,
+ "src": "225:33:1",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
+ "file": "../../utils/introspection/ERC165.sol",
+ "id": 112,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 920,
+ "sourceUnit": 1829,
+ "src": "259:46:1",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [
+ {
+ "baseName": {
+ "id": 114,
+ "name": "Context",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1527,
+ "src": "573:7:1"
+ },
+ "id": 115,
+ "nodeType": "InheritanceSpecifier",
+ "src": "573:7:1"
+ },
+ {
+ "baseName": {
+ "id": 116,
+ "name": "ERC165",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1828,
+ "src": "582:6:1"
+ },
+ "id": 117,
+ "nodeType": "InheritanceSpecifier",
+ "src": "582:6:1"
+ },
+ {
+ "baseName": {
+ "id": 118,
+ "name": "IERC721",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1035,
+ "src": "590:7:1"
+ },
+ "id": 119,
+ "nodeType": "InheritanceSpecifier",
+ "src": "590:7:1"
+ },
+ {
+ "baseName": {
+ "id": 120,
+ "name": "IERC721Metadata",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1208,
+ "src": "599:15:1"
+ },
+ "id": 121,
+ "nodeType": "InheritanceSpecifier",
+ "src": "599:15:1"
+ }
+ ],
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 113,
+ "nodeType": "StructuredDocumentation",
+ "src": "307:246:1",
+ "text": " @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n the Metadata extension, but not including the Enumerable extension, which is available separately as\n {ERC721Enumerable}."
+ },
+ "fullyImplemented": true,
+ "id": 919,
+ "linearizedBaseContracts": [
+ 919,
+ 1208,
+ 1035,
+ 1828,
+ 1840,
+ 1527
+ ],
+ "name": "ERC721",
+ "nameLocation": "563:6:1",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "id": 124,
+ "libraryName": {
+ "id": 122,
+ "name": "Address",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1505,
+ "src": "627:7:1"
+ },
+ "nodeType": "UsingForDirective",
+ "src": "621:26:1",
+ "typeName": {
+ "id": 123,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "639:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ },
+ {
+ "id": 127,
+ "libraryName": {
+ "id": 125,
+ "name": "Strings",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1804,
+ "src": "658:7:1"
+ },
+ "nodeType": "UsingForDirective",
+ "src": "652:26:1",
+ "typeName": {
+ "id": 126,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "670:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ {
+ "constant": false,
+ "id": 129,
+ "mutability": "mutable",
+ "name": "_name",
+ "nameLocation": "717:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 919,
+ "src": "702:20:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 128,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "702:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": false,
+ "id": 131,
+ "mutability": "mutable",
+ "name": "_symbol",
+ "nameLocation": "764:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 919,
+ "src": "749:22:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 130,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "749:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": false,
+ "id": 135,
+ "mutability": "mutable",
+ "name": "_owners",
+ "nameLocation": "860:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 919,
+ "src": "824:43:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ },
+ "typeName": {
+ "id": 134,
+ "keyType": {
+ "id": 132,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "832:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "824:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ },
+ "valueType": {
+ "id": 133,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "843:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": false,
+ "id": 139,
+ "mutability": "mutable",
+ "name": "_balances",
+ "nameLocation": "954:9:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 919,
+ "src": "918:45:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "typeName": {
+ "id": 138,
+ "keyType": {
+ "id": 136,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "926:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "918:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "valueType": {
+ "id": 137,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "937:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": false,
+ "id": 143,
+ "mutability": "mutable",
+ "name": "_tokenApprovals",
+ "nameLocation": "1055:15:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 919,
+ "src": "1019:51:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ },
+ "typeName": {
+ "id": 142,
+ "keyType": {
+ "id": 140,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1027:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "1019:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ },
+ "valueType": {
+ "id": 141,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1038:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": false,
+ "id": 149,
+ "mutability": "mutable",
+ "name": "_operatorApprovals",
+ "nameLocation": "1178:18:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 919,
+ "src": "1125:71:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
+ "typeString": "mapping(address => mapping(address => bool))"
+ },
+ "typeName": {
+ "id": 148,
+ "keyType": {
+ "id": 144,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1133:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "1125:44:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
+ "typeString": "mapping(address => mapping(address => bool))"
+ },
+ "valueType": {
+ "id": 147,
+ "keyType": {
+ "id": 145,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1152:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "1144:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ },
+ "valueType": {
+ "id": 146,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1163:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "body": {
+ "id": 165,
+ "nodeType": "Block",
+ "src": "1372:57:1",
+ "statements": [
+ {
+ "expression": {
+ "id": 159,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 157,
+ "name": "_name",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 129,
+ "src": "1382:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 158,
+ "name": "name_",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 152,
+ "src": "1390:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "src": "1382:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "id": 160,
+ "nodeType": "ExpressionStatement",
+ "src": "1382:13:1"
+ },
+ {
+ "expression": {
+ "id": 163,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 161,
+ "name": "_symbol",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 131,
+ "src": "1405:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 162,
+ "name": "symbol_",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 154,
+ "src": "1415:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "src": "1405:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "id": 164,
+ "nodeType": "ExpressionStatement",
+ "src": "1405:17:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 150,
+ "nodeType": "StructuredDocumentation",
+ "src": "1203:108:1",
+ "text": " @dev Initializes the contract by setting a `name` and a `symbol` to the token collection."
+ },
+ "id": 166,
+ "implemented": true,
+ "kind": "constructor",
+ "modifiers": [],
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 155,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 152,
+ "mutability": "mutable",
+ "name": "name_",
+ "nameLocation": "1342:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 166,
+ "src": "1328:19:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 151,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "1328:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 154,
+ "mutability": "mutable",
+ "name": "symbol_",
+ "nameLocation": "1363:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 166,
+ "src": "1349:21:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 153,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "1349:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1327:44:1"
+ },
+ "returnParameters": {
+ "id": 156,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1372:0:1"
+ },
+ "scope": 919,
+ "src": "1316:113:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 1827,
+ 1839
+ ],
+ "body": {
+ "id": 196,
+ "nodeType": "Block",
+ "src": "1604:192:1",
+ "statements": [
+ {
+ "expression": {
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 194,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 189,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "commonType": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "id": 182,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 177,
+ "name": "interfaceId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 169,
+ "src": "1633:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "id": 179,
+ "name": "IERC721",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1035,
+ "src": "1653:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_IERC721_$1035_$",
+ "typeString": "type(contract IERC721)"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_type$_t_contract$_IERC721_$1035_$",
+ "typeString": "type(contract IERC721)"
+ }
+ ],
+ "id": 178,
+ "name": "type",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967269,
+ "src": "1648:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
+ "typeString": "function () pure"
+ }
+ },
+ "id": 180,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1648:13:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_meta_type_t_contract$_IERC721_$1035",
+ "typeString": "type(contract IERC721)"
+ }
+ },
+ "id": 181,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "interfaceId",
+ "nodeType": "MemberAccess",
+ "src": "1648:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "src": "1633:40:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "commonType": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "id": 188,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 183,
+ "name": "interfaceId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 169,
+ "src": "1689:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "id": 185,
+ "name": "IERC721Metadata",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1208,
+ "src": "1709:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_IERC721Metadata_$1208_$",
+ "typeString": "type(contract IERC721Metadata)"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_type$_t_contract$_IERC721Metadata_$1208_$",
+ "typeString": "type(contract IERC721Metadata)"
+ }
+ ],
+ "id": 184,
+ "name": "type",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967269,
+ "src": "1704:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
+ "typeString": "function () pure"
+ }
+ },
+ "id": 186,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1704:21:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_meta_type_t_contract$_IERC721Metadata_$1208",
+ "typeString": "type(contract IERC721Metadata)"
+ }
+ },
+ "id": 187,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "interfaceId",
+ "nodeType": "MemberAccess",
+ "src": "1704:33:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "src": "1689:48:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "1633:104:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "arguments": [
+ {
+ "id": 192,
+ "name": "interfaceId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 169,
+ "src": "1777:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ ],
+ "expression": {
+ "id": 190,
+ "name": "super",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967271,
+ "src": "1753:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_super$_ERC721_$919_$",
+ "typeString": "type(contract super ERC721)"
+ }
+ },
+ "id": 191,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "supportsInterface",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1827,
+ "src": "1753:23:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
+ "typeString": "function (bytes4) view returns (bool)"
+ }
+ },
+ "id": 193,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1753:36:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "1633:156:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 176,
+ "id": 195,
+ "nodeType": "Return",
+ "src": "1614:175:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 167,
+ "nodeType": "StructuredDocumentation",
+ "src": "1435:56:1",
+ "text": " @dev See {IERC165-supportsInterface}."
+ },
+ "functionSelector": "01ffc9a7",
+ "id": 197,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "supportsInterface",
+ "nameLocation": "1505:17:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 173,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [
+ {
+ "id": 171,
+ "name": "ERC165",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1828,
+ "src": "1572:6:1"
+ },
+ {
+ "id": 172,
+ "name": "IERC165",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1840,
+ "src": "1580:7:1"
+ }
+ ],
+ "src": "1563:25:1"
+ },
+ "parameters": {
+ "id": 170,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 169,
+ "mutability": "mutable",
+ "name": "interfaceId",
+ "nameLocation": "1530:11:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 197,
+ "src": "1523:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "typeName": {
+ "id": 168,
+ "name": "bytes4",
+ "nodeType": "ElementaryTypeName",
+ "src": "1523:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1522:20:1"
+ },
+ "returnParameters": {
+ "id": 176,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 175,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 197,
+ "src": "1598:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 174,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1598:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1597:6:1"
+ },
+ "scope": 919,
+ "src": "1496:300:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 960
+ ],
+ "body": {
+ "id": 220,
+ "nodeType": "Block",
+ "src": "1936:124:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 212,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 207,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 200,
+ "src": "1954:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 210,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1971:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 209,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1963:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 208,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1963:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 211,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1963:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "1954:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373",
+ "id": 213,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1975:44:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba",
+ "typeString": "literal_string \"ERC721: balance query for the zero address\""
+ },
+ "value": "ERC721: balance query for the zero address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba",
+ "typeString": "literal_string \"ERC721: balance query for the zero address\""
+ }
+ ],
+ "id": 206,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "1946:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 214,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1946:74:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 215,
+ "nodeType": "ExpressionStatement",
+ "src": "1946:74:1"
+ },
+ {
+ "expression": {
+ "baseExpression": {
+ "id": 216,
+ "name": "_balances",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 139,
+ "src": "2037:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 218,
+ "indexExpression": {
+ "id": 217,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 200,
+ "src": "2047:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "2037:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 205,
+ "id": 219,
+ "nodeType": "Return",
+ "src": "2030:23:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 198,
+ "nodeType": "StructuredDocumentation",
+ "src": "1802:48:1",
+ "text": " @dev See {IERC721-balanceOf}."
+ },
+ "functionSelector": "70a08231",
+ "id": 221,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "balanceOf",
+ "nameLocation": "1864:9:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 202,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "1909:8:1"
+ },
+ "parameters": {
+ "id": 201,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 200,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "1882:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 221,
+ "src": "1874:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 199,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1874:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1873:15:1"
+ },
+ "returnParameters": {
+ "id": 205,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 204,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 221,
+ "src": "1927:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 203,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1927:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1926:9:1"
+ },
+ "scope": 919,
+ "src": "1855:205:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 968
+ ],
+ "body": {
+ "id": 248,
+ "nodeType": "Block",
+ "src": "2198:154:1",
+ "statements": [
+ {
+ "assignments": [
+ 231
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 231,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "2216:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 248,
+ "src": "2208:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 230,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2208:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 235,
+ "initialValue": {
+ "baseExpression": {
+ "id": 232,
+ "name": "_owners",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 135,
+ "src": "2224:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ }
+ },
+ "id": 234,
+ "indexExpression": {
+ "id": 233,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 224,
+ "src": "2232:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "2224:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "2208:32:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 242,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 237,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 231,
+ "src": "2258:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 240,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2275:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 239,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "2267:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 238,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2267:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 241,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2267:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "2258:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e",
+ "id": 243,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2279:43:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397",
+ "typeString": "literal_string \"ERC721: owner query for nonexistent token\""
+ },
+ "value": "ERC721: owner query for nonexistent token"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397",
+ "typeString": "literal_string \"ERC721: owner query for nonexistent token\""
+ }
+ ],
+ "id": 236,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "2250:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 244,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2250:73:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 245,
+ "nodeType": "ExpressionStatement",
+ "src": "2250:73:1"
+ },
+ {
+ "expression": {
+ "id": 246,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 231,
+ "src": "2340:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 229,
+ "id": 247,
+ "nodeType": "Return",
+ "src": "2333:12:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 222,
+ "nodeType": "StructuredDocumentation",
+ "src": "2066:46:1",
+ "text": " @dev See {IERC721-ownerOf}."
+ },
+ "functionSelector": "6352211e",
+ "id": 249,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "ownerOf",
+ "nameLocation": "2126:7:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 226,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "2171:8:1"
+ },
+ "parameters": {
+ "id": 225,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 224,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "2142:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 249,
+ "src": "2134:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 223,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2134:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2133:17:1"
+ },
+ "returnParameters": {
+ "id": 229,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 228,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 249,
+ "src": "2189:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 227,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2189:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2188:9:1"
+ },
+ "scope": 919,
+ "src": "2117:235:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 1193
+ ],
+ "body": {
+ "id": 258,
+ "nodeType": "Block",
+ "src": "2483:29:1",
+ "statements": [
+ {
+ "expression": {
+ "id": 256,
+ "name": "_name",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 129,
+ "src": "2500:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "functionReturnParameters": 255,
+ "id": 257,
+ "nodeType": "Return",
+ "src": "2493:12:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 250,
+ "nodeType": "StructuredDocumentation",
+ "src": "2358:51:1",
+ "text": " @dev See {IERC721Metadata-name}."
+ },
+ "functionSelector": "06fdde03",
+ "id": 259,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "name",
+ "nameLocation": "2423:4:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 252,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "2450:8:1"
+ },
+ "parameters": {
+ "id": 251,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2427:2:1"
+ },
+ "returnParameters": {
+ "id": 255,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 254,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 259,
+ "src": "2468:13:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 253,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "2468:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2467:15:1"
+ },
+ "scope": 919,
+ "src": "2414:98:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 1199
+ ],
+ "body": {
+ "id": 268,
+ "nodeType": "Block",
+ "src": "2647:31:1",
+ "statements": [
+ {
+ "expression": {
+ "id": 266,
+ "name": "_symbol",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 131,
+ "src": "2664:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "functionReturnParameters": 265,
+ "id": 267,
+ "nodeType": "Return",
+ "src": "2657:14:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 260,
+ "nodeType": "StructuredDocumentation",
+ "src": "2518:53:1",
+ "text": " @dev See {IERC721Metadata-symbol}."
+ },
+ "functionSelector": "95d89b41",
+ "id": 269,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "symbol",
+ "nameLocation": "2585:6:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 262,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "2614:8:1"
+ },
+ "parameters": {
+ "id": 261,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2591:2:1"
+ },
+ "returnParameters": {
+ "id": 265,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 264,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 269,
+ "src": "2632:13:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 263,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "2632:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2631:15:1"
+ },
+ "scope": 919,
+ "src": "2576:102:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 1207
+ ],
+ "body": {
+ "id": 310,
+ "nodeType": "Block",
+ "src": "2832:241:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 280,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 272,
+ "src": "2858:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 279,
+ "name": "_exists",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 559,
+ "src": "2850:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (uint256) view returns (bool)"
+ }
+ },
+ "id": 281,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2850:16:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e",
+ "id": 282,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2868:49:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb",
+ "typeString": "literal_string \"ERC721Metadata: URI query for nonexistent token\""
+ },
+ "value": "ERC721Metadata: URI query for nonexistent token"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb",
+ "typeString": "literal_string \"ERC721Metadata: URI query for nonexistent token\""
+ }
+ ],
+ "id": 278,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "2842:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 283,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2842:76:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 284,
+ "nodeType": "ExpressionStatement",
+ "src": "2842:76:1"
+ },
+ {
+ "assignments": [
+ 286
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 286,
+ "mutability": "mutable",
+ "name": "baseURI",
+ "nameLocation": "2943:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 310,
+ "src": "2929:21:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 285,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "2929:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 289,
+ "initialValue": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 287,
+ "name": "_baseURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 320,
+ "src": "2953:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$",
+ "typeString": "function () view returns (string memory)"
+ }
+ },
+ "id": 288,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2953:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "2929:34:1"
+ },
+ {
+ "expression": {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 296,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "id": 292,
+ "name": "baseURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 286,
+ "src": "2986:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 291,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "2980:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
+ "typeString": "type(bytes storage pointer)"
+ },
+ "typeName": {
+ "id": 290,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "2980:5:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 293,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2980:14:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 294,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "src": "2980:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 295,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3004:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "2980:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "hexValue": "",
+ "id": 307,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3064:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ },
+ "value": ""
+ },
+ "id": 308,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "2980:86:1",
+ "trueExpression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 301,
+ "name": "baseURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 286,
+ "src": "3032:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "id": 302,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 272,
+ "src": "3041:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 303,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "toString",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1686,
+ "src": "3041:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$bound_to$_t_uint256_$",
+ "typeString": "function (uint256) pure returns (string memory)"
+ }
+ },
+ "id": 304,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3041:18:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "expression": {
+ "id": 299,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967295,
+ "src": "3015:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 300,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encodePacked",
+ "nodeType": "MemberAccess",
+ "src": "3015:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 305,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3015:45:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 298,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "3008:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_string_storage_ptr_$",
+ "typeString": "type(string storage pointer)"
+ },
+ "typeName": {
+ "id": 297,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "3008:6:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 306,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3008:53:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 277,
+ "id": 309,
+ "nodeType": "Return",
+ "src": "2973:93:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 270,
+ "nodeType": "StructuredDocumentation",
+ "src": "2684:55:1",
+ "text": " @dev See {IERC721Metadata-tokenURI}."
+ },
+ "functionSelector": "c87b56dd",
+ "id": 311,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "tokenURI",
+ "nameLocation": "2753:8:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 274,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "2799:8:1"
+ },
+ "parameters": {
+ "id": 273,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 272,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "2770:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 311,
+ "src": "2762:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 271,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2762:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2761:17:1"
+ },
+ "returnParameters": {
+ "id": 277,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 276,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 311,
+ "src": "2817:13:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 275,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "2817:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2816:15:1"
+ },
+ "scope": 919,
+ "src": "2744:329:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 319,
+ "nodeType": "Block",
+ "src": "3380:26:1",
+ "statements": [
+ {
+ "expression": {
+ "hexValue": "",
+ "id": 317,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3397:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ },
+ "value": ""
+ },
+ "functionReturnParameters": 316,
+ "id": 318,
+ "nodeType": "Return",
+ "src": "3390:9:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 312,
+ "nodeType": "StructuredDocumentation",
+ "src": "3079:230:1",
+ "text": " @dev Base URI for computing {tokenURI}. If set, the resulting URI for each\n token will be the concatenation of the `baseURI` and the `tokenId`. Empty\n by default, can be overriden in child contracts."
+ },
+ "id": 320,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_baseURI",
+ "nameLocation": "3323:8:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 313,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3331:2:1"
+ },
+ "returnParameters": {
+ "id": 316,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 315,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 320,
+ "src": "3365:13:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 314,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "3365:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3364:15:1"
+ },
+ "scope": 919,
+ "src": "3314:92:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "baseFunctions": [
+ 996
+ ],
+ "body": {
+ "id": 362,
+ "nodeType": "Block",
+ "src": "3533:331:1",
+ "statements": [
+ {
+ "assignments": [
+ 330
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 330,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "3551:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 362,
+ "src": "3543:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 329,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3543:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 335,
+ "initialValue": {
+ "arguments": [
+ {
+ "id": 333,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 325,
+ "src": "3574:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "id": 331,
+ "name": "ERC721",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 919,
+ "src": "3559:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC721_$919_$",
+ "typeString": "type(contract ERC721)"
+ }
+ },
+ "id": 332,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ownerOf",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 249,
+ "src": "3559:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
+ "typeString": "function (uint256) view returns (address)"
+ }
+ },
+ "id": 334,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3559:23:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "3543:39:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 339,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 337,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 323,
+ "src": "3600:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "id": 338,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 330,
+ "src": "3606:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "3600:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a20617070726f76616c20746f2063757272656e74206f776e6572",
+ "id": 340,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3613:35:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942",
+ "typeString": "literal_string \"ERC721: approval to current owner\""
+ },
+ "value": "ERC721: approval to current owner"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942",
+ "typeString": "literal_string \"ERC721: approval to current owner\""
+ }
+ ],
+ "id": 336,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "3592:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 341,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3592:57:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 342,
+ "nodeType": "ExpressionStatement",
+ "src": "3592:57:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 353,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 347,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 344,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "3681:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 345,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3681:12:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "id": 346,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 330,
+ "src": "3697:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "3681:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "arguments": [
+ {
+ "id": 349,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 330,
+ "src": "3723:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 350,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "3730:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 351,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3730:12:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 348,
+ "name": "isApprovedForAll",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 436,
+ "src": "3706:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
+ "typeString": "function (address,address) view returns (bool)"
+ }
+ },
+ "id": 352,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3706:37:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "3681:62:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c",
+ "id": 354,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3757:58:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d",
+ "typeString": "literal_string \"ERC721: approve caller is not owner nor approved for all\""
+ },
+ "value": "ERC721: approve caller is not owner nor approved for all"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d",
+ "typeString": "literal_string \"ERC721: approve caller is not owner nor approved for all\""
+ }
+ ],
+ "id": 343,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "3660:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 355,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3660:165:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 356,
+ "nodeType": "ExpressionStatement",
+ "src": "3660:165:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 358,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 323,
+ "src": "3845:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 359,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 325,
+ "src": "3849:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 357,
+ "name": "_approve",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 845,
+ "src": "3836:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 360,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3836:21:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 361,
+ "nodeType": "ExpressionStatement",
+ "src": "3836:21:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 321,
+ "nodeType": "StructuredDocumentation",
+ "src": "3412:46:1",
+ "text": " @dev See {IERC721-approve}."
+ },
+ "functionSelector": "095ea7b3",
+ "id": 363,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "approve",
+ "nameLocation": "3472:7:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 327,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "3524:8:1"
+ },
+ "parameters": {
+ "id": 326,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 323,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "3488:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 363,
+ "src": "3480:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 322,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3480:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 325,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "3500:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 363,
+ "src": "3492:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 324,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3492:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3479:29:1"
+ },
+ "returnParameters": {
+ "id": 328,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3533:0:1"
+ },
+ "scope": 919,
+ "src": "3463:401:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 1004
+ ],
+ "body": {
+ "id": 383,
+ "nodeType": "Block",
+ "src": "4010:132:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 374,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 366,
+ "src": "4036:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 373,
+ "name": "_exists",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 559,
+ "src": "4028:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (uint256) view returns (bool)"
+ }
+ },
+ "id": 375,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4028:16:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e",
+ "id": 376,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4046:46:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
+ "typeString": "literal_string \"ERC721: approved query for nonexistent token\""
+ },
+ "value": "ERC721: approved query for nonexistent token"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
+ "typeString": "literal_string \"ERC721: approved query for nonexistent token\""
+ }
+ ],
+ "id": 372,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "4020:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 377,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4020:73:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 378,
+ "nodeType": "ExpressionStatement",
+ "src": "4020:73:1"
+ },
+ {
+ "expression": {
+ "baseExpression": {
+ "id": 379,
+ "name": "_tokenApprovals",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 143,
+ "src": "4111:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ }
+ },
+ "id": 381,
+ "indexExpression": {
+ "id": 380,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 366,
+ "src": "4127:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "4111:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 371,
+ "id": 382,
+ "nodeType": "Return",
+ "src": "4104:31:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 364,
+ "nodeType": "StructuredDocumentation",
+ "src": "3870:50:1",
+ "text": " @dev See {IERC721-getApproved}."
+ },
+ "functionSelector": "081812fc",
+ "id": 384,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getApproved",
+ "nameLocation": "3934:11:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 368,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "3983:8:1"
+ },
+ "parameters": {
+ "id": 367,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 366,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "3954:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 384,
+ "src": "3946:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 365,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3946:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3945:17:1"
+ },
+ "returnParameters": {
+ "id": 371,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 370,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 384,
+ "src": "4001:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 369,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4001:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4000:9:1"
+ },
+ "scope": 919,
+ "src": "3925:217:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 1012
+ ],
+ "body": {
+ "id": 417,
+ "nodeType": "Block",
+ "src": "4293:206:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 397,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 394,
+ "name": "operator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 387,
+ "src": "4311:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 395,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "4323:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 396,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4323:12:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "4311:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a20617070726f766520746f2063616c6c6572",
+ "id": 398,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4337:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05",
+ "typeString": "literal_string \"ERC721: approve to caller\""
+ },
+ "value": "ERC721: approve to caller"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05",
+ "typeString": "literal_string \"ERC721: approve to caller\""
+ }
+ ],
+ "id": 393,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "4303:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 399,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4303:62:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 400,
+ "nodeType": "ExpressionStatement",
+ "src": "4303:62:1"
+ },
+ {
+ "expression": {
+ "id": 408,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "baseExpression": {
+ "id": 401,
+ "name": "_operatorApprovals",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 149,
+ "src": "4376:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
+ "typeString": "mapping(address => mapping(address => bool))"
+ }
+ },
+ "id": 405,
+ "indexExpression": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 402,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "4395:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 403,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4395:12:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "4376:32:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ }
+ },
+ "id": 406,
+ "indexExpression": {
+ "id": 404,
+ "name": "operator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 387,
+ "src": "4409:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "4376:42:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 407,
+ "name": "approved",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 389,
+ "src": "4421:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "4376:53:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 409,
+ "nodeType": "ExpressionStatement",
+ "src": "4376:53:1"
+ },
+ {
+ "eventCall": {
+ "arguments": [
+ {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 411,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "4459:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 412,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4459:12:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 413,
+ "name": "operator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 387,
+ "src": "4473:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 414,
+ "name": "approved",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 389,
+ "src": "4483:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 410,
+ "name": "ApprovalForAll",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 952,
+ "src": "4444:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
+ "typeString": "function (address,address,bool)"
+ }
+ },
+ "id": 415,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4444:48:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 416,
+ "nodeType": "EmitStatement",
+ "src": "4439:53:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 385,
+ "nodeType": "StructuredDocumentation",
+ "src": "4148:56:1",
+ "text": " @dev See {IERC721-setApprovalForAll}."
+ },
+ "functionSelector": "a22cb465",
+ "id": 418,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "setApprovalForAll",
+ "nameLocation": "4218:17:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 391,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "4284:8:1"
+ },
+ "parameters": {
+ "id": 390,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 387,
+ "mutability": "mutable",
+ "name": "operator",
+ "nameLocation": "4244:8:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 418,
+ "src": "4236:16:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 386,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4236:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 389,
+ "mutability": "mutable",
+ "name": "approved",
+ "nameLocation": "4259:8:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 418,
+ "src": "4254:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 388,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "4254:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4235:33:1"
+ },
+ "returnParameters": {
+ "id": 392,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4293:0:1"
+ },
+ "scope": 919,
+ "src": "4209:290:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 1022
+ ],
+ "body": {
+ "id": 435,
+ "nodeType": "Block",
+ "src": "4668:59:1",
+ "statements": [
+ {
+ "expression": {
+ "baseExpression": {
+ "baseExpression": {
+ "id": 429,
+ "name": "_operatorApprovals",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 149,
+ "src": "4685:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
+ "typeString": "mapping(address => mapping(address => bool))"
+ }
+ },
+ "id": 431,
+ "indexExpression": {
+ "id": 430,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 421,
+ "src": "4704:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "4685:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ }
+ },
+ "id": 433,
+ "indexExpression": {
+ "id": 432,
+ "name": "operator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 423,
+ "src": "4711:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "4685:35:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 428,
+ "id": 434,
+ "nodeType": "Return",
+ "src": "4678:42:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 419,
+ "nodeType": "StructuredDocumentation",
+ "src": "4505:55:1",
+ "text": " @dev See {IERC721-isApprovedForAll}."
+ },
+ "functionSelector": "e985e9c5",
+ "id": 436,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "isApprovedForAll",
+ "nameLocation": "4574:16:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 425,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "4644:8:1"
+ },
+ "parameters": {
+ "id": 424,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 421,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "4599:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 436,
+ "src": "4591:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 420,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4591:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 423,
+ "mutability": "mutable",
+ "name": "operator",
+ "nameLocation": "4614:8:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 436,
+ "src": "4606:16:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 422,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4606:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4590:33:1"
+ },
+ "returnParameters": {
+ "id": 428,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 427,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 436,
+ "src": "4662:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 426,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "4662:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4661:6:1"
+ },
+ "scope": 919,
+ "src": "4565:162:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 988
+ ],
+ "body": {
+ "id": 462,
+ "nodeType": "Block",
+ "src": "4908:211:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 449,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "4997:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 450,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4997:12:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 451,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 443,
+ "src": "5011:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 448,
+ "name": "_isApprovedOrOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 600,
+ "src": "4978:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view returns (bool)"
+ }
+ },
+ "id": 452,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4978:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564",
+ "id": 453,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5021:51:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
+ "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
+ },
+ "value": "ERC721: transfer caller is not owner nor approved"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
+ "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
+ }
+ ],
+ "id": 447,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "4970:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 454,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4970:103:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 455,
+ "nodeType": "ExpressionStatement",
+ "src": "4970:103:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 457,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 439,
+ "src": "5094:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 458,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 441,
+ "src": "5100:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 459,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 443,
+ "src": "5104:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 456,
+ "name": "_transfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 821,
+ "src": "5084:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 460,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5084:28:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 461,
+ "nodeType": "ExpressionStatement",
+ "src": "5084:28:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 437,
+ "nodeType": "StructuredDocumentation",
+ "src": "4733:51:1",
+ "text": " @dev See {IERC721-transferFrom}."
+ },
+ "functionSelector": "23b872dd",
+ "id": 463,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "transferFrom",
+ "nameLocation": "4798:12:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 445,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "4899:8:1"
+ },
+ "parameters": {
+ "id": 444,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 439,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "4828:4:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 463,
+ "src": "4820:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 438,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4820:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 441,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "4850:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 463,
+ "src": "4842:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 440,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4842:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 443,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "4870:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 463,
+ "src": "4862:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 442,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4862:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4810:73:1"
+ },
+ "returnParameters": {
+ "id": 446,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4908:0:1"
+ },
+ "scope": 919,
+ "src": "4789:330:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 978
+ ],
+ "body": {
+ "id": 481,
+ "nodeType": "Block",
+ "src": "5308:56:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 475,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 466,
+ "src": "5335:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 476,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 468,
+ "src": "5341:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 477,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 470,
+ "src": "5345:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "hexValue": "",
+ "id": 478,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5354:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ },
+ "value": ""
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ }
+ ],
+ "id": 474,
+ "name": "safeTransferFrom",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 482,
+ 512
+ ],
+ "referencedDeclaration": 512,
+ "src": "5318:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
+ "typeString": "function (address,address,uint256,bytes memory)"
+ }
+ },
+ "id": 479,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5318:39:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 480,
+ "nodeType": "ExpressionStatement",
+ "src": "5318:39:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 464,
+ "nodeType": "StructuredDocumentation",
+ "src": "5125:55:1",
+ "text": " @dev See {IERC721-safeTransferFrom}."
+ },
+ "functionSelector": "42842e0e",
+ "id": 482,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "safeTransferFrom",
+ "nameLocation": "5194:16:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 472,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "5299:8:1"
+ },
+ "parameters": {
+ "id": 471,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 466,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "5228:4:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 482,
+ "src": "5220:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 465,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5220:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 468,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "5250:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 482,
+ "src": "5242:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 467,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5242:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 470,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "5270:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 482,
+ "src": "5262:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 469,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5262:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "5210:73:1"
+ },
+ "returnParameters": {
+ "id": 473,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "5308:0:1"
+ },
+ "scope": 919,
+ "src": "5185:179:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 1034
+ ],
+ "body": {
+ "id": 511,
+ "nodeType": "Block",
+ "src": "5581:169:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 497,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "5618:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 498,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5618:12:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 499,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 489,
+ "src": "5632:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 496,
+ "name": "_isApprovedOrOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 600,
+ "src": "5599:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view returns (bool)"
+ }
+ },
+ "id": 500,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5599:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564",
+ "id": 501,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5642:51:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
+ "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
+ },
+ "value": "ERC721: transfer caller is not owner nor approved"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
+ "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
+ }
+ ],
+ "id": 495,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "5591:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 502,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5591:103:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 503,
+ "nodeType": "ExpressionStatement",
+ "src": "5591:103:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 505,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 485,
+ "src": "5718:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 506,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 487,
+ "src": "5724:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 507,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 489,
+ "src": "5728:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "id": 508,
+ "name": "_data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 491,
+ "src": "5737:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 504,
+ "name": "_safeTransfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 541,
+ "src": "5704:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
+ "typeString": "function (address,address,uint256,bytes memory)"
+ }
+ },
+ "id": 509,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5704:39:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 510,
+ "nodeType": "ExpressionStatement",
+ "src": "5704:39:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 483,
+ "nodeType": "StructuredDocumentation",
+ "src": "5370:55:1",
+ "text": " @dev See {IERC721-safeTransferFrom}."
+ },
+ "functionSelector": "b88d4fde",
+ "id": 512,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "safeTransferFrom",
+ "nameLocation": "5439:16:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 493,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "5572:8:1"
+ },
+ "parameters": {
+ "id": 492,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 485,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "5473:4:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 512,
+ "src": "5465:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 484,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5465:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 487,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "5495:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 512,
+ "src": "5487:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 486,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5487:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 489,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "5515:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 512,
+ "src": "5507:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 488,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5507:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 491,
+ "mutability": "mutable",
+ "name": "_data",
+ "nameLocation": "5545:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 512,
+ "src": "5532:18:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 490,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "5532:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "5455:101:1"
+ },
+ "returnParameters": {
+ "id": 494,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "5581:0:1"
+ },
+ "scope": 919,
+ "src": "5430:320:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 540,
+ "nodeType": "Block",
+ "src": "6753:166:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 525,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 515,
+ "src": "6773:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 526,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 517,
+ "src": "6779:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 527,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 519,
+ "src": "6783:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 524,
+ "name": "_transfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 821,
+ "src": "6763:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 528,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6763:28:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 529,
+ "nodeType": "ExpressionStatement",
+ "src": "6763:28:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 532,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 515,
+ "src": "6832:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 533,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 517,
+ "src": "6838:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 534,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 519,
+ "src": "6842:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "id": 535,
+ "name": "_data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 521,
+ "src": "6851:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 531,
+ "name": "_checkOnERC721Received",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 907,
+ "src": "6809:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
+ "typeString": "function (address,address,uint256,bytes memory) returns (bool)"
+ }
+ },
+ "id": 536,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6809:48:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
+ "id": 537,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6859:52:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
+ "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
+ },
+ "value": "ERC721: transfer to non ERC721Receiver implementer"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
+ "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
+ }
+ ],
+ "id": 530,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "6801:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 538,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6801:111:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 539,
+ "nodeType": "ExpressionStatement",
+ "src": "6801:111:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 513,
+ "nodeType": "StructuredDocumentation",
+ "src": "5756:851:1",
+ "text": " @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n are aware of the ERC721 protocol to prevent tokens from being forever locked.\n `_data` is additional data, it has no specified format and it is sent in call to `to`.\n This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n implement alternative mechanisms to perform token transfer, such as signature-based.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
+ },
+ "id": 541,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_safeTransfer",
+ "nameLocation": "6621:13:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 522,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 515,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "6652:4:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 541,
+ "src": "6644:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 514,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6644:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 517,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "6674:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 541,
+ "src": "6666:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 516,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6666:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 519,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "6694:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 541,
+ "src": "6686:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 518,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6686:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 521,
+ "mutability": "mutable",
+ "name": "_data",
+ "nameLocation": "6724:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 541,
+ "src": "6711:18:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 520,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "6711:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "6634:101:1"
+ },
+ "returnParameters": {
+ "id": 523,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "6753:0:1"
+ },
+ "scope": 919,
+ "src": "6612:307:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 558,
+ "nodeType": "Block",
+ "src": "7293:54:1",
+ "statements": [
+ {
+ "expression": {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 556,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "baseExpression": {
+ "id": 549,
+ "name": "_owners",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 135,
+ "src": "7310:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ }
+ },
+ "id": 551,
+ "indexExpression": {
+ "id": 550,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 544,
+ "src": "7318:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "7310:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 554,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7338:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 553,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "7330:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 552,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7330:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 555,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7330:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "7310:30:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 548,
+ "id": 557,
+ "nodeType": "Return",
+ "src": "7303:37:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 542,
+ "nodeType": "StructuredDocumentation",
+ "src": "6925:292:1",
+ "text": " @dev Returns whether `tokenId` exists.\n Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n Tokens start existing when they are minted (`_mint`),\n and stop existing when they are burned (`_burn`)."
+ },
+ "id": 559,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_exists",
+ "nameLocation": "7231:7:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 545,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 544,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "7247:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 559,
+ "src": "7239:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 543,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7239:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "7238:17:1"
+ },
+ "returnParameters": {
+ "id": 548,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 547,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 559,
+ "src": "7287:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 546,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "7287:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "7286:6:1"
+ },
+ "scope": 919,
+ "src": "7222:125:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 599,
+ "nodeType": "Block",
+ "src": "7604:245:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 571,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 564,
+ "src": "7630:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 570,
+ "name": "_exists",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 559,
+ "src": "7622:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (uint256) view returns (bool)"
+ }
+ },
+ "id": 572,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7622:16:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e",
+ "id": 573,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7640:46:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c",
+ "typeString": "literal_string \"ERC721: operator query for nonexistent token\""
+ },
+ "value": "ERC721: operator query for nonexistent token"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c",
+ "typeString": "literal_string \"ERC721: operator query for nonexistent token\""
+ }
+ ],
+ "id": 569,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "7614:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 574,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7614:73:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 575,
+ "nodeType": "ExpressionStatement",
+ "src": "7614:73:1"
+ },
+ {
+ "assignments": [
+ 577
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 577,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "7705:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 599,
+ "src": "7697:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 576,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7697:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 582,
+ "initialValue": {
+ "arguments": [
+ {
+ "id": 580,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 564,
+ "src": "7728:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "id": 578,
+ "name": "ERC721",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 919,
+ "src": "7713:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC721_$919_$",
+ "typeString": "type(contract ERC721)"
+ }
+ },
+ "id": 579,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ownerOf",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 249,
+ "src": "7713:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
+ "typeString": "function (uint256) view returns (address)"
+ }
+ },
+ "id": 581,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7713:23:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "7697:39:1"
+ },
+ {
+ "expression": {
+ "components": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 596,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 591,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 585,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 583,
+ "name": "spender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 562,
+ "src": "7754:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "id": 584,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 577,
+ "src": "7765:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "7754:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 590,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "arguments": [
+ {
+ "id": 587,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 564,
+ "src": "7786:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 586,
+ "name": "getApproved",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 384,
+ "src": "7774:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
+ "typeString": "function (uint256) view returns (address)"
+ }
+ },
+ "id": 588,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7774:20:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "id": 589,
+ "name": "spender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 562,
+ "src": "7798:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "7774:31:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "7754:51:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "arguments": [
+ {
+ "id": 593,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 577,
+ "src": "7826:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 594,
+ "name": "spender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 562,
+ "src": "7833:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 592,
+ "name": "isApprovedForAll",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 436,
+ "src": "7809:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
+ "typeString": "function (address,address) view returns (bool)"
+ }
+ },
+ "id": 595,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7809:32:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "7754:87:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 597,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "7753:89:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 568,
+ "id": 598,
+ "nodeType": "Return",
+ "src": "7746:96:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 560,
+ "nodeType": "StructuredDocumentation",
+ "src": "7353:147:1",
+ "text": " @dev Returns whether `spender` is allowed to manage `tokenId`.\n Requirements:\n - `tokenId` must exist."
+ },
+ "id": 600,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_isApprovedOrOwner",
+ "nameLocation": "7514:18:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 565,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 562,
+ "mutability": "mutable",
+ "name": "spender",
+ "nameLocation": "7541:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 600,
+ "src": "7533:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 561,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7533:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 564,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "7558:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 600,
+ "src": "7550:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 563,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7550:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "7532:34:1"
+ },
+ "returnParameters": {
+ "id": 568,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 567,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 600,
+ "src": "7598:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 566,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "7598:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "7597:6:1"
+ },
+ "scope": 919,
+ "src": "7505:344:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 614,
+ "nodeType": "Block",
+ "src": "8244:43:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 609,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 603,
+ "src": "8264:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 610,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 605,
+ "src": "8268:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "hexValue": "",
+ "id": 611,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8277:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ },
+ "value": ""
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ }
+ ],
+ "id": 608,
+ "name": "_safeMint",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 615,
+ 644
+ ],
+ "referencedDeclaration": 644,
+ "src": "8254:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
+ "typeString": "function (address,uint256,bytes memory)"
+ }
+ },
+ "id": 612,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8254:26:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 613,
+ "nodeType": "ExpressionStatement",
+ "src": "8254:26:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 601,
+ "nodeType": "StructuredDocumentation",
+ "src": "7855:319:1",
+ "text": " @dev Safely mints `tokenId` and transfers it to `to`.\n Requirements:\n - `tokenId` must not exist.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
+ },
+ "id": 615,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_safeMint",
+ "nameLocation": "8188:9:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 606,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 603,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "8206:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 615,
+ "src": "8198:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 602,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8198:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 605,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "8218:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 615,
+ "src": "8210:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 604,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "8210:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "8197:29:1"
+ },
+ "returnParameters": {
+ "id": 607,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "8244:0:1"
+ },
+ "scope": 919,
+ "src": "8179:108:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 643,
+ "nodeType": "Block",
+ "src": "8623:196:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 626,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 618,
+ "src": "8639:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 627,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 620,
+ "src": "8643:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 625,
+ "name": "_mint",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 701,
+ "src": "8633:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 628,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8633:18:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 629,
+ "nodeType": "ExpressionStatement",
+ "src": "8633:18:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 634,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8713:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 633,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "8705:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 632,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8705:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 635,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8705:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 636,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 618,
+ "src": "8717:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 637,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 620,
+ "src": "8721:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "id": 638,
+ "name": "_data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 622,
+ "src": "8730:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 631,
+ "name": "_checkOnERC721Received",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 907,
+ "src": "8682:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
+ "typeString": "function (address,address,uint256,bytes memory) returns (bool)"
+ }
+ },
+ "id": 639,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8682:54:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
+ "id": 640,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8750:52:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
+ "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
+ },
+ "value": "ERC721: transfer to non ERC721Receiver implementer"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
+ "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
+ }
+ ],
+ "id": 630,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "8661:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 641,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8661:151:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 642,
+ "nodeType": "ExpressionStatement",
+ "src": "8661:151:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 616,
+ "nodeType": "StructuredDocumentation",
+ "src": "8293:210:1",
+ "text": " @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n forwarded in {IERC721Receiver-onERC721Received} to contract recipients."
+ },
+ "id": 644,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_safeMint",
+ "nameLocation": "8517:9:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 623,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 618,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "8544:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 644,
+ "src": "8536:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 617,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8536:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 620,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "8564:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 644,
+ "src": "8556:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 619,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "8556:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 622,
+ "mutability": "mutable",
+ "name": "_data",
+ "nameLocation": "8594:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 644,
+ "src": "8581:18:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 621,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "8581:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "8526:79:1"
+ },
+ "returnParameters": {
+ "id": 624,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "8623:0:1"
+ },
+ "scope": 919,
+ "src": "8508:311:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 700,
+ "nodeType": "Block",
+ "src": "9202:311:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 658,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 653,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 647,
+ "src": "9220:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 656,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9234:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 655,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "9226:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 654,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9226:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 657,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9226:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "9220:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a206d696e7420746f20746865207a65726f2061646472657373",
+ "id": 659,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9238:34:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6",
+ "typeString": "literal_string \"ERC721: mint to the zero address\""
+ },
+ "value": "ERC721: mint to the zero address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6",
+ "typeString": "literal_string \"ERC721: mint to the zero address\""
+ }
+ ],
+ "id": 652,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "9212:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 660,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9212:61:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 661,
+ "nodeType": "ExpressionStatement",
+ "src": "9212:61:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 666,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "!",
+ "prefix": true,
+ "src": "9291:17:1",
+ "subExpression": {
+ "arguments": [
+ {
+ "id": 664,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 649,
+ "src": "9300:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 663,
+ "name": "_exists",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 559,
+ "src": "9292:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (uint256) view returns (bool)"
+ }
+ },
+ "id": 665,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9292:16:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a20746f6b656e20616c7265616479206d696e746564",
+ "id": 667,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9310:30:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
+ "typeString": "literal_string \"ERC721: token already minted\""
+ },
+ "value": "ERC721: token already minted"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
+ "typeString": "literal_string \"ERC721: token already minted\""
+ }
+ ],
+ "id": 662,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "9283:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 668,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9283:58:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 669,
+ "nodeType": "ExpressionStatement",
+ "src": "9283:58:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 673,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9381:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 672,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "9373:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 671,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9373:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 674,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9373:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 675,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 647,
+ "src": "9385:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 676,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 649,
+ "src": "9389:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 670,
+ "name": "_beforeTokenTransfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 918,
+ "src": "9352:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 677,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9352:45:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 678,
+ "nodeType": "ExpressionStatement",
+ "src": "9352:45:1"
+ },
+ {
+ "expression": {
+ "id": 683,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 679,
+ "name": "_balances",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 139,
+ "src": "9408:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 681,
+ "indexExpression": {
+ "id": 680,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 647,
+ "src": "9418:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "9408:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "+=",
+ "rightHandSide": {
+ "hexValue": "31",
+ "id": 682,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9425:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "9408:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 684,
+ "nodeType": "ExpressionStatement",
+ "src": "9408:18:1"
+ },
+ {
+ "expression": {
+ "id": 689,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 685,
+ "name": "_owners",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 135,
+ "src": "9436:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ }
+ },
+ "id": 687,
+ "indexExpression": {
+ "id": 686,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 649,
+ "src": "9444:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "9436:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 688,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 647,
+ "src": "9455:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "9436:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 690,
+ "nodeType": "ExpressionStatement",
+ "src": "9436:21:1"
+ },
+ {
+ "eventCall": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 694,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9490:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 693,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "9482:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 692,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9482:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 695,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9482:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 696,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 647,
+ "src": "9494:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 697,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 649,
+ "src": "9498:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 691,
+ "name": "Transfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 934,
+ "src": "9473:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 698,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9473:33:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 699,
+ "nodeType": "EmitStatement",
+ "src": "9468:38:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 645,
+ "nodeType": "StructuredDocumentation",
+ "src": "8825:311:1",
+ "text": " @dev Mints `tokenId` and transfers it to `to`.\n WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n Requirements:\n - `tokenId` must not exist.\n - `to` cannot be the zero address.\n Emits a {Transfer} event."
+ },
+ "id": 701,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_mint",
+ "nameLocation": "9150:5:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 650,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 647,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "9164:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 701,
+ "src": "9156:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 646,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9156:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 649,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "9176:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 701,
+ "src": "9168:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 648,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "9168:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "9155:29:1"
+ },
+ "returnParameters": {
+ "id": 651,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "9202:0:1"
+ },
+ "scope": 919,
+ "src": "9141:372:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 751,
+ "nodeType": "Block",
+ "src": "9779:299:1",
+ "statements": [
+ {
+ "assignments": [
+ 708
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 708,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "9797:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 751,
+ "src": "9789:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 707,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9789:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 713,
+ "initialValue": {
+ "arguments": [
+ {
+ "id": 711,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 704,
+ "src": "9820:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "id": 709,
+ "name": "ERC721",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 919,
+ "src": "9805:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC721_$919_$",
+ "typeString": "type(contract ERC721)"
+ }
+ },
+ "id": 710,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ownerOf",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 249,
+ "src": "9805:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
+ "typeString": "function (uint256) view returns (address)"
+ }
+ },
+ "id": 712,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9805:23:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "9789:39:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 715,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 708,
+ "src": "9860:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 718,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9875:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 717,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "9867:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 716,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9867:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 719,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9867:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 720,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 704,
+ "src": "9879:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 714,
+ "name": "_beforeTokenTransfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 918,
+ "src": "9839:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 721,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9839:48:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 722,
+ "nodeType": "ExpressionStatement",
+ "src": "9839:48:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 726,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9942:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 725,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "9934:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 724,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9934:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 727,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9934:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 728,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 704,
+ "src": "9946:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 723,
+ "name": "_approve",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 845,
+ "src": "9925:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 729,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9925:29:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 730,
+ "nodeType": "ExpressionStatement",
+ "src": "9925:29:1"
+ },
+ {
+ "expression": {
+ "id": 735,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 731,
+ "name": "_balances",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 139,
+ "src": "9965:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 733,
+ "indexExpression": {
+ "id": 732,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 708,
+ "src": "9975:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "9965:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "-=",
+ "rightHandSide": {
+ "hexValue": "31",
+ "id": 734,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9985:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "9965:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 736,
+ "nodeType": "ExpressionStatement",
+ "src": "9965:21:1"
+ },
+ {
+ "expression": {
+ "id": 740,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "delete",
+ "prefix": true,
+ "src": "9996:23:1",
+ "subExpression": {
+ "baseExpression": {
+ "id": 737,
+ "name": "_owners",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 135,
+ "src": "10003:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ }
+ },
+ "id": 739,
+ "indexExpression": {
+ "id": 738,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 704,
+ "src": "10011:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "10003:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 741,
+ "nodeType": "ExpressionStatement",
+ "src": "9996:23:1"
+ },
+ {
+ "eventCall": {
+ "arguments": [
+ {
+ "id": 743,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 708,
+ "src": "10044:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 746,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10059:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 745,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "10051:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 744,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10051:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 747,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10051:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 748,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 704,
+ "src": "10063:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 742,
+ "name": "Transfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 934,
+ "src": "10035:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 749,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10035:36:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 750,
+ "nodeType": "EmitStatement",
+ "src": "10030:41:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 702,
+ "nodeType": "StructuredDocumentation",
+ "src": "9519:206:1",
+ "text": " @dev Destroys `tokenId`.\n The approval is cleared when the token is burned.\n Requirements:\n - `tokenId` must exist.\n Emits a {Transfer} event."
+ },
+ "id": 752,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_burn",
+ "nameLocation": "9739:5:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 705,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 704,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "9753:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 752,
+ "src": "9745:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 703,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "9745:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "9744:17:1"
+ },
+ "returnParameters": {
+ "id": 706,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "9779:0:1"
+ },
+ "scope": 919,
+ "src": "9730:348:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 820,
+ "nodeType": "Block",
+ "src": "10511:451:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 768,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "arguments": [
+ {
+ "id": 765,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 759,
+ "src": "10544:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "id": 763,
+ "name": "ERC721",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 919,
+ "src": "10529:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC721_$919_$",
+ "typeString": "type(contract ERC721)"
+ }
+ },
+ "id": 764,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ownerOf",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 249,
+ "src": "10529:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
+ "typeString": "function (uint256) view returns (address)"
+ }
+ },
+ "id": 766,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10529:23:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "id": 767,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 755,
+ "src": "10556:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "10529:31:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e",
+ "id": 769,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10562:43:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950",
+ "typeString": "literal_string \"ERC721: transfer of token that is not own\""
+ },
+ "value": "ERC721: transfer of token that is not own"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950",
+ "typeString": "literal_string \"ERC721: transfer of token that is not own\""
+ }
+ ],
+ "id": 762,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "10521:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 770,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10521:85:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 771,
+ "nodeType": "ExpressionStatement",
+ "src": "10521:85:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 778,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 773,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 757,
+ "src": "10624:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 776,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10638:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 775,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "10630:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 774,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10630:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 777,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10630:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "10624:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a207472616e7366657220746f20746865207a65726f2061646472657373",
+ "id": 779,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10642:38:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4",
+ "typeString": "literal_string \"ERC721: transfer to the zero address\""
+ },
+ "value": "ERC721: transfer to the zero address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4",
+ "typeString": "literal_string \"ERC721: transfer to the zero address\""
+ }
+ ],
+ "id": 772,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "10616:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 780,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10616:65:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 781,
+ "nodeType": "ExpressionStatement",
+ "src": "10616:65:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 783,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 755,
+ "src": "10713:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 784,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 757,
+ "src": "10719:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 785,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 759,
+ "src": "10723:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 782,
+ "name": "_beforeTokenTransfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 918,
+ "src": "10692:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 786,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10692:39:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 787,
+ "nodeType": "ExpressionStatement",
+ "src": "10692:39:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 791,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10810:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 790,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "10802:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 789,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10802:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 792,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10802:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 793,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 759,
+ "src": "10814:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 788,
+ "name": "_approve",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 845,
+ "src": "10793:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 794,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10793:29:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 795,
+ "nodeType": "ExpressionStatement",
+ "src": "10793:29:1"
+ },
+ {
+ "expression": {
+ "id": 800,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 796,
+ "name": "_balances",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 139,
+ "src": "10833:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 798,
+ "indexExpression": {
+ "id": 797,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 755,
+ "src": "10843:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "10833:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "-=",
+ "rightHandSide": {
+ "hexValue": "31",
+ "id": 799,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10852:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "10833:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 801,
+ "nodeType": "ExpressionStatement",
+ "src": "10833:20:1"
+ },
+ {
+ "expression": {
+ "id": 806,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 802,
+ "name": "_balances",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 139,
+ "src": "10863:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 804,
+ "indexExpression": {
+ "id": 803,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 757,
+ "src": "10873:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "10863:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "+=",
+ "rightHandSide": {
+ "hexValue": "31",
+ "id": 805,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10880:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "10863:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 807,
+ "nodeType": "ExpressionStatement",
+ "src": "10863:18:1"
+ },
+ {
+ "expression": {
+ "id": 812,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 808,
+ "name": "_owners",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 135,
+ "src": "10891:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ }
+ },
+ "id": 810,
+ "indexExpression": {
+ "id": 809,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 759,
+ "src": "10899:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "10891:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 811,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 757,
+ "src": "10910:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "10891:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 813,
+ "nodeType": "ExpressionStatement",
+ "src": "10891:21:1"
+ },
+ {
+ "eventCall": {
+ "arguments": [
+ {
+ "id": 815,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 755,
+ "src": "10937:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 816,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 757,
+ "src": "10943:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 817,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 759,
+ "src": "10947:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 814,
+ "name": "Transfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 934,
+ "src": "10928:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 818,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10928:27:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 819,
+ "nodeType": "EmitStatement",
+ "src": "10923:32:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 753,
+ "nodeType": "StructuredDocumentation",
+ "src": "10084:313:1",
+ "text": " @dev Transfers `tokenId` from `from` to `to`.\n As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n Requirements:\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n Emits a {Transfer} event."
+ },
+ "id": 821,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_transfer",
+ "nameLocation": "10411:9:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 760,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 755,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "10438:4:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 821,
+ "src": "10430:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 754,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10430:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 757,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "10460:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 821,
+ "src": "10452:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 756,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10452:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 759,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "10480:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 821,
+ "src": "10472:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 758,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "10472:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "10420:73:1"
+ },
+ "returnParameters": {
+ "id": 761,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "10511:0:1"
+ },
+ "scope": 919,
+ "src": "10402:560:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 844,
+ "nodeType": "Block",
+ "src": "11137:107:1",
+ "statements": [
+ {
+ "expression": {
+ "id": 833,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 829,
+ "name": "_tokenApprovals",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 143,
+ "src": "11147:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ }
+ },
+ "id": 831,
+ "indexExpression": {
+ "id": 830,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 826,
+ "src": "11163:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "11147:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 832,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 824,
+ "src": "11174:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "11147:29:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 834,
+ "nodeType": "ExpressionStatement",
+ "src": "11147:29:1"
+ },
+ {
+ "eventCall": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 838,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 826,
+ "src": "11215:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "id": 836,
+ "name": "ERC721",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 919,
+ "src": "11200:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC721_$919_$",
+ "typeString": "type(contract ERC721)"
+ }
+ },
+ "id": 837,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ownerOf",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 249,
+ "src": "11200:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
+ "typeString": "function (uint256) view returns (address)"
+ }
+ },
+ "id": 839,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11200:23:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 840,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 824,
+ "src": "11225:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 841,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 826,
+ "src": "11229:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 835,
+ "name": "Approval",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 943,
+ "src": "11191:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 842,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11191:46:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 843,
+ "nodeType": "EmitStatement",
+ "src": "11186:51:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 822,
+ "nodeType": "StructuredDocumentation",
+ "src": "10968:100:1",
+ "text": " @dev Approve `to` to operate on `tokenId`\n Emits a {Approval} event."
+ },
+ "id": 845,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_approve",
+ "nameLocation": "11082:8:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 827,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 824,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "11099:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 845,
+ "src": "11091:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 823,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "11091:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 826,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "11111:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 845,
+ "src": "11103:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 825,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "11103:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "11090:29:1"
+ },
+ "returnParameters": {
+ "id": 828,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "11137:0:1"
+ },
+ "scope": 919,
+ "src": "11073:171:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 906,
+ "nodeType": "Block",
+ "src": "11953:622:1",
+ "statements": [
+ {
+ "condition": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "id": 859,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 850,
+ "src": "11967:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 860,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isContract",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1228,
+ "src": "11967:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
+ "typeString": "function (address) view returns (bool)"
+ }
+ },
+ "id": 861,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11967:15:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 904,
+ "nodeType": "Block",
+ "src": "12533:36:1",
+ "statements": [
+ {
+ "expression": {
+ "hexValue": "74727565",
+ "id": 902,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "12554:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "true"
+ },
+ "functionReturnParameters": 858,
+ "id": 903,
+ "nodeType": "Return",
+ "src": "12547:11:1"
+ }
+ ]
+ },
+ "id": 905,
+ "nodeType": "IfStatement",
+ "src": "11963:606:1",
+ "trueBody": {
+ "id": 901,
+ "nodeType": "Block",
+ "src": "11984:543:1",
+ "statements": [
+ {
+ "clauses": [
+ {
+ "block": {
+ "id": 881,
+ "nodeType": "Block",
+ "src": "12099:91:1",
+ "statements": [
+ {
+ "expression": {
+ "commonType": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "id": 879,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 875,
+ "name": "retval",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 873,
+ "src": "12124:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "expression": {
+ "expression": {
+ "id": 876,
+ "name": "IERC721Receiver",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1053,
+ "src": "12134:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_IERC721Receiver_$1053_$",
+ "typeString": "type(contract IERC721Receiver)"
+ }
+ },
+ "id": 877,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "onERC721Received",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1052,
+ "src": "12134:32:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$_t_bytes4_$",
+ "typeString": "function IERC721Receiver.onERC721Received(address,address,uint256,bytes calldata) returns (bytes4)"
+ }
+ },
+ "id": 878,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "selector",
+ "nodeType": "MemberAccess",
+ "src": "12134:41:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "src": "12124:51:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 858,
+ "id": 880,
+ "nodeType": "Return",
+ "src": "12117:58:1"
+ }
+ ]
+ },
+ "errorName": "",
+ "id": 882,
+ "nodeType": "TryCatchClause",
+ "parameters": {
+ "id": 874,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 873,
+ "mutability": "mutable",
+ "name": "retval",
+ "nameLocation": "12091:6:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 882,
+ "src": "12084:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "typeName": {
+ "id": 872,
+ "name": "bytes4",
+ "nodeType": "ElementaryTypeName",
+ "src": "12084:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "12083:15:1"
+ },
+ "src": "12075:115:1"
+ },
+ {
+ "block": {
+ "id": 898,
+ "nodeType": "Block",
+ "src": "12219:298:1",
+ "statements": [
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 889,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "id": 886,
+ "name": "reason",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 884,
+ "src": "12241:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 887,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "src": "12241:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 888,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "12258:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "12241:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 896,
+ "nodeType": "Block",
+ "src": "12368:135:1",
+ "statements": [
+ {
+ "AST": {
+ "nodeType": "YulBlock",
+ "src": "12399:86:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "12436:2:1",
+ "type": "",
+ "value": "32"
+ },
+ {
+ "name": "reason",
+ "nodeType": "YulIdentifier",
+ "src": "12440:6:1"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "12432:3:1"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12432:15:1"
+ },
+ {
+ "arguments": [
+ {
+ "name": "reason",
+ "nodeType": "YulIdentifier",
+ "src": "12455:6:1"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "12449:5:1"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12449:13:1"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "12425:6:1"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12425:38:1"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "12425:38:1"
+ }
+ ]
+ },
+ "evmVersion": "berlin",
+ "externalReferences": [
+ {
+ "declaration": 884,
+ "isOffset": false,
+ "isSlot": false,
+ "src": "12440:6:1",
+ "valueSize": 1
+ },
+ {
+ "declaration": 884,
+ "isOffset": false,
+ "isSlot": false,
+ "src": "12455:6:1",
+ "valueSize": 1
+ }
+ ],
+ "id": 895,
+ "nodeType": "InlineAssembly",
+ "src": "12390:95:1"
+ }
+ ]
+ },
+ "id": 897,
+ "nodeType": "IfStatement",
+ "src": "12237:266:1",
+ "trueBody": {
+ "id": 894,
+ "nodeType": "Block",
+ "src": "12261:101:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "hexValue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
+ "id": 891,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "12290:52:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
+ "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
+ },
+ "value": "ERC721: transfer to non ERC721Receiver implementer"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
+ "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
+ }
+ ],
+ "id": 890,
+ "name": "revert",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967277,
+ 4294967277
+ ],
+ "referencedDeclaration": 4294967277,
+ "src": "12283:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (string memory) pure"
+ }
+ },
+ "id": 892,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "12283:60:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 893,
+ "nodeType": "ExpressionStatement",
+ "src": "12283:60:1"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "errorName": "",
+ "id": 899,
+ "nodeType": "TryCatchClause",
+ "parameters": {
+ "id": 885,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 884,
+ "mutability": "mutable",
+ "name": "reason",
+ "nameLocation": "12211:6:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 899,
+ "src": "12198:19:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 883,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "12198:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "12197:21:1"
+ },
+ "src": "12191:326:1"
+ }
+ ],
+ "externalCall": {
+ "arguments": [
+ {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 866,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "12039:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 867,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "12039:12:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 868,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 848,
+ "src": "12053:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 869,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 852,
+ "src": "12059:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "id": 870,
+ "name": "_data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 854,
+ "src": "12068:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "arguments": [
+ {
+ "id": 863,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 850,
+ "src": "12018:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 862,
+ "name": "IERC721Receiver",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1053,
+ "src": "12002:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_IERC721Receiver_$1053_$",
+ "typeString": "type(contract IERC721Receiver)"
+ }
+ },
+ "id": 864,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "12002:19:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_IERC721Receiver_$1053",
+ "typeString": "contract IERC721Receiver"
+ }
+ },
+ "id": 865,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "onERC721Received",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1052,
+ "src": "12002:36:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
+ "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
+ }
+ },
+ "id": 871,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "12002:72:1",
+ "tryCall": true,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "id": 900,
+ "nodeType": "TryStatement",
+ "src": "11998:519:1"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "documentation": {
+ "id": 846,
+ "nodeType": "StructuredDocumentation",
+ "src": "11250:542:1",
+ "text": " @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n The call is not executed if the target address is not a contract.\n @param from address representing the previous owner of the given token ID\n @param to target address that will receive the tokens\n @param tokenId uint256 ID of the token to be transferred\n @param _data bytes optional data to send along with the call\n @return bool whether the call correctly returned the expected magic value"
+ },
+ "id": 907,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_checkOnERC721Received",
+ "nameLocation": "11806:22:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 855,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 848,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "11846:4:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 907,
+ "src": "11838:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 847,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "11838:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 850,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "11868:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 907,
+ "src": "11860:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 849,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "11860:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 852,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "11888:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 907,
+ "src": "11880:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 851,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "11880:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 854,
+ "mutability": "mutable",
+ "name": "_data",
+ "nameLocation": "11918:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 907,
+ "src": "11905:18:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 853,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "11905:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "11828:101:1"
+ },
+ "returnParameters": {
+ "id": 858,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 857,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 907,
+ "src": "11947:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 856,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "11947:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "11946:6:1"
+ },
+ "scope": 919,
+ "src": "11797:778:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "private"
+ },
+ {
+ "body": {
+ "id": 917,
+ "nodeType": "Block",
+ "src": "13251:2:1",
+ "statements": []
+ },
+ "documentation": {
+ "id": 908,
+ "nodeType": "StructuredDocumentation",
+ "src": "12581:545:1",
+ "text": " @dev Hook that is called before any token transfer. This includes minting\n and burning.\n Calling conditions:\n - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n transferred to `to`.\n - When `from` is zero, `tokenId` will be minted for `to`.\n - When `to` is zero, ``from``'s `tokenId` will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
+ },
+ "id": 918,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_beforeTokenTransfer",
+ "nameLocation": "13140:20:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 915,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 910,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "13178:4:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 918,
+ "src": "13170:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 909,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "13170:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 912,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "13200:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 918,
+ "src": "13192:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 911,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "13192:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 914,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "13220:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 918,
+ "src": "13212:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 913,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "13212:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "13160:73:1"
+ },
+ "returnParameters": {
+ "id": 916,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "13251:0:1"
+ },
+ "scope": 919,
+ "src": "13131:122:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 920,
+ "src": "554:12701:1",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:13223:1"
+ },
+ "legacyAST": {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
+ "exportedSymbols": {
+ "Address": [
+ 1505
+ ],
+ "Context": [
+ 1527
+ ],
+ "ERC165": [
+ 1828
+ ],
+ "ERC721": [
+ 919
+ ],
+ "IERC165": [
+ 1840
+ ],
+ "IERC721": [
+ 1035
+ ],
+ "IERC721Metadata": [
+ 1208
+ ],
+ "IERC721Receiver": [
+ 1053
+ ],
+ "Strings": [
+ 1804
+ ]
+ },
+ "id": 920,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 105,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:1"
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
+ "file": "./IERC721.sol",
+ "id": 106,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 920,
+ "sourceUnit": 1036,
+ "src": "58:23:1",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol",
+ "file": "./IERC721Receiver.sol",
+ "id": 107,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 920,
+ "sourceUnit": 1054,
+ "src": "82:31:1",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
+ "file": "./extensions/IERC721Metadata.sol",
+ "id": 108,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 920,
+ "sourceUnit": 1209,
+ "src": "114:42:1",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
+ "file": "../../utils/Address.sol",
+ "id": 109,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 920,
+ "sourceUnit": 1506,
+ "src": "157:33:1",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
+ "file": "../../utils/Context.sol",
+ "id": 110,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 920,
+ "sourceUnit": 1528,
+ "src": "191:33:1",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
+ "file": "../../utils/Strings.sol",
+ "id": 111,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 920,
+ "sourceUnit": 1805,
+ "src": "225:33:1",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
+ "file": "../../utils/introspection/ERC165.sol",
+ "id": 112,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 920,
+ "sourceUnit": 1829,
+ "src": "259:46:1",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [
+ {
+ "baseName": {
+ "id": 114,
+ "name": "Context",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1527,
+ "src": "573:7:1"
+ },
+ "id": 115,
+ "nodeType": "InheritanceSpecifier",
+ "src": "573:7:1"
+ },
+ {
+ "baseName": {
+ "id": 116,
+ "name": "ERC165",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1828,
+ "src": "582:6:1"
+ },
+ "id": 117,
+ "nodeType": "InheritanceSpecifier",
+ "src": "582:6:1"
+ },
+ {
+ "baseName": {
+ "id": 118,
+ "name": "IERC721",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1035,
+ "src": "590:7:1"
+ },
+ "id": 119,
+ "nodeType": "InheritanceSpecifier",
+ "src": "590:7:1"
+ },
+ {
+ "baseName": {
+ "id": 120,
+ "name": "IERC721Metadata",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1208,
+ "src": "599:15:1"
+ },
+ "id": 121,
+ "nodeType": "InheritanceSpecifier",
+ "src": "599:15:1"
+ }
+ ],
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 113,
+ "nodeType": "StructuredDocumentation",
+ "src": "307:246:1",
+ "text": " @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n the Metadata extension, but not including the Enumerable extension, which is available separately as\n {ERC721Enumerable}."
+ },
+ "fullyImplemented": true,
+ "id": 919,
+ "linearizedBaseContracts": [
+ 919,
+ 1208,
+ 1035,
+ 1828,
+ 1840,
+ 1527
+ ],
+ "name": "ERC721",
+ "nameLocation": "563:6:1",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "id": 124,
+ "libraryName": {
+ "id": 122,
+ "name": "Address",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1505,
+ "src": "627:7:1"
+ },
+ "nodeType": "UsingForDirective",
+ "src": "621:26:1",
+ "typeName": {
+ "id": 123,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "639:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ },
+ {
+ "id": 127,
+ "libraryName": {
+ "id": 125,
+ "name": "Strings",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1804,
+ "src": "658:7:1"
+ },
+ "nodeType": "UsingForDirective",
+ "src": "652:26:1",
+ "typeName": {
+ "id": 126,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "670:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ {
+ "constant": false,
+ "id": 129,
+ "mutability": "mutable",
+ "name": "_name",
+ "nameLocation": "717:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 919,
+ "src": "702:20:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 128,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "702:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": false,
+ "id": 131,
+ "mutability": "mutable",
+ "name": "_symbol",
+ "nameLocation": "764:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 919,
+ "src": "749:22:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 130,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "749:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": false,
+ "id": 135,
+ "mutability": "mutable",
+ "name": "_owners",
+ "nameLocation": "860:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 919,
+ "src": "824:43:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ },
+ "typeName": {
+ "id": 134,
+ "keyType": {
+ "id": 132,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "832:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "824:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ },
+ "valueType": {
+ "id": 133,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "843:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": false,
+ "id": 139,
+ "mutability": "mutable",
+ "name": "_balances",
+ "nameLocation": "954:9:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 919,
+ "src": "918:45:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "typeName": {
+ "id": 138,
+ "keyType": {
+ "id": 136,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "926:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "918:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ },
+ "valueType": {
+ "id": 137,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "937:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": false,
+ "id": 143,
+ "mutability": "mutable",
+ "name": "_tokenApprovals",
+ "nameLocation": "1055:15:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 919,
+ "src": "1019:51:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ },
+ "typeName": {
+ "id": 142,
+ "keyType": {
+ "id": 140,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1027:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "1019:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ },
+ "valueType": {
+ "id": 141,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1038:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "constant": false,
+ "id": 149,
+ "mutability": "mutable",
+ "name": "_operatorApprovals",
+ "nameLocation": "1178:18:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 919,
+ "src": "1125:71:1",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
+ "typeString": "mapping(address => mapping(address => bool))"
+ },
+ "typeName": {
+ "id": 148,
+ "keyType": {
+ "id": 144,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1133:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "1125:44:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
+ "typeString": "mapping(address => mapping(address => bool))"
+ },
+ "valueType": {
+ "id": 147,
+ "keyType": {
+ "id": 145,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1152:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "1144:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ },
+ "valueType": {
+ "id": 146,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1163:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "body": {
+ "id": 165,
+ "nodeType": "Block",
+ "src": "1372:57:1",
+ "statements": [
+ {
+ "expression": {
+ "id": 159,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 157,
+ "name": "_name",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 129,
+ "src": "1382:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 158,
+ "name": "name_",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 152,
+ "src": "1390:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "src": "1382:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "id": 160,
+ "nodeType": "ExpressionStatement",
+ "src": "1382:13:1"
+ },
+ {
+ "expression": {
+ "id": 163,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 161,
+ "name": "_symbol",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 131,
+ "src": "1405:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 162,
+ "name": "symbol_",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 154,
+ "src": "1415:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "src": "1405:17:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "id": 164,
+ "nodeType": "ExpressionStatement",
+ "src": "1405:17:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 150,
+ "nodeType": "StructuredDocumentation",
+ "src": "1203:108:1",
+ "text": " @dev Initializes the contract by setting a `name` and a `symbol` to the token collection."
+ },
+ "id": 166,
+ "implemented": true,
+ "kind": "constructor",
+ "modifiers": [],
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 155,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 152,
+ "mutability": "mutable",
+ "name": "name_",
+ "nameLocation": "1342:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 166,
+ "src": "1328:19:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 151,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "1328:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 154,
+ "mutability": "mutable",
+ "name": "symbol_",
+ "nameLocation": "1363:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 166,
+ "src": "1349:21:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 153,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "1349:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1327:44:1"
+ },
+ "returnParameters": {
+ "id": 156,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1372:0:1"
+ },
+ "scope": 919,
+ "src": "1316:113:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 1827,
+ 1839
+ ],
+ "body": {
+ "id": 196,
+ "nodeType": "Block",
+ "src": "1604:192:1",
+ "statements": [
+ {
+ "expression": {
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 194,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 189,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "commonType": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "id": 182,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 177,
+ "name": "interfaceId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 169,
+ "src": "1633:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "id": 179,
+ "name": "IERC721",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1035,
+ "src": "1653:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_IERC721_$1035_$",
+ "typeString": "type(contract IERC721)"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_type$_t_contract$_IERC721_$1035_$",
+ "typeString": "type(contract IERC721)"
+ }
+ ],
+ "id": 178,
+ "name": "type",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967269,
+ "src": "1648:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
+ "typeString": "function () pure"
+ }
+ },
+ "id": 180,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1648:13:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_meta_type_t_contract$_IERC721_$1035",
+ "typeString": "type(contract IERC721)"
+ }
+ },
+ "id": 181,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "interfaceId",
+ "nodeType": "MemberAccess",
+ "src": "1648:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "src": "1633:40:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "commonType": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "id": 188,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 183,
+ "name": "interfaceId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 169,
+ "src": "1689:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "id": 185,
+ "name": "IERC721Metadata",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1208,
+ "src": "1709:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_IERC721Metadata_$1208_$",
+ "typeString": "type(contract IERC721Metadata)"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_type$_t_contract$_IERC721Metadata_$1208_$",
+ "typeString": "type(contract IERC721Metadata)"
+ }
+ ],
+ "id": 184,
+ "name": "type",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967269,
+ "src": "1704:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
+ "typeString": "function () pure"
+ }
+ },
+ "id": 186,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1704:21:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_meta_type_t_contract$_IERC721Metadata_$1208",
+ "typeString": "type(contract IERC721Metadata)"
+ }
+ },
+ "id": 187,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "interfaceId",
+ "nodeType": "MemberAccess",
+ "src": "1704:33:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "src": "1689:48:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "1633:104:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "arguments": [
+ {
+ "id": 192,
+ "name": "interfaceId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 169,
+ "src": "1777:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ ],
+ "expression": {
+ "id": 190,
+ "name": "super",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967271,
+ "src": "1753:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_super$_ERC721_$919_$",
+ "typeString": "type(contract super ERC721)"
+ }
+ },
+ "id": 191,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "supportsInterface",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1827,
+ "src": "1753:23:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
+ "typeString": "function (bytes4) view returns (bool)"
+ }
+ },
+ "id": 193,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1753:36:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "1633:156:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 176,
+ "id": 195,
+ "nodeType": "Return",
+ "src": "1614:175:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 167,
+ "nodeType": "StructuredDocumentation",
+ "src": "1435:56:1",
+ "text": " @dev See {IERC165-supportsInterface}."
+ },
+ "functionSelector": "01ffc9a7",
+ "id": 197,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "supportsInterface",
+ "nameLocation": "1505:17:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 173,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [
+ {
+ "id": 171,
+ "name": "ERC165",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1828,
+ "src": "1572:6:1"
+ },
+ {
+ "id": 172,
+ "name": "IERC165",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1840,
+ "src": "1580:7:1"
+ }
+ ],
+ "src": "1563:25:1"
+ },
+ "parameters": {
+ "id": 170,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 169,
+ "mutability": "mutable",
+ "name": "interfaceId",
+ "nameLocation": "1530:11:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 197,
+ "src": "1523:18:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "typeName": {
+ "id": 168,
+ "name": "bytes4",
+ "nodeType": "ElementaryTypeName",
+ "src": "1523:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1522:20:1"
+ },
+ "returnParameters": {
+ "id": 176,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 175,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 197,
+ "src": "1598:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 174,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1598:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1597:6:1"
+ },
+ "scope": 919,
+ "src": "1496:300:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 960
+ ],
+ "body": {
+ "id": 220,
+ "nodeType": "Block",
+ "src": "1936:124:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 212,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 207,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 200,
+ "src": "1954:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 210,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1971:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 209,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1963:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 208,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1963:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 211,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1963:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "1954:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373",
+ "id": 213,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1975:44:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba",
+ "typeString": "literal_string \"ERC721: balance query for the zero address\""
+ },
+ "value": "ERC721: balance query for the zero address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba",
+ "typeString": "literal_string \"ERC721: balance query for the zero address\""
+ }
+ ],
+ "id": 206,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "1946:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 214,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1946:74:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 215,
+ "nodeType": "ExpressionStatement",
+ "src": "1946:74:1"
+ },
+ {
+ "expression": {
+ "baseExpression": {
+ "id": 216,
+ "name": "_balances",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 139,
+ "src": "2037:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 218,
+ "indexExpression": {
+ "id": 217,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 200,
+ "src": "2047:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "2037:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 205,
+ "id": 219,
+ "nodeType": "Return",
+ "src": "2030:23:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 198,
+ "nodeType": "StructuredDocumentation",
+ "src": "1802:48:1",
+ "text": " @dev See {IERC721-balanceOf}."
+ },
+ "functionSelector": "70a08231",
+ "id": 221,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "balanceOf",
+ "nameLocation": "1864:9:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 202,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "1909:8:1"
+ },
+ "parameters": {
+ "id": 201,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 200,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "1882:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 221,
+ "src": "1874:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 199,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1874:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1873:15:1"
+ },
+ "returnParameters": {
+ "id": 205,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 204,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 221,
+ "src": "1927:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 203,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1927:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1926:9:1"
+ },
+ "scope": 919,
+ "src": "1855:205:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 968
+ ],
+ "body": {
+ "id": 248,
+ "nodeType": "Block",
+ "src": "2198:154:1",
+ "statements": [
+ {
+ "assignments": [
+ 231
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 231,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "2216:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 248,
+ "src": "2208:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 230,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2208:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 235,
+ "initialValue": {
+ "baseExpression": {
+ "id": 232,
+ "name": "_owners",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 135,
+ "src": "2224:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ }
+ },
+ "id": 234,
+ "indexExpression": {
+ "id": 233,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 224,
+ "src": "2232:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "2224:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "2208:32:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 242,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 237,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 231,
+ "src": "2258:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 240,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2275:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 239,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "2267:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 238,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2267:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 241,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2267:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "2258:19:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e",
+ "id": 243,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2279:43:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397",
+ "typeString": "literal_string \"ERC721: owner query for nonexistent token\""
+ },
+ "value": "ERC721: owner query for nonexistent token"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397",
+ "typeString": "literal_string \"ERC721: owner query for nonexistent token\""
+ }
+ ],
+ "id": 236,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "2250:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 244,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2250:73:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 245,
+ "nodeType": "ExpressionStatement",
+ "src": "2250:73:1"
+ },
+ {
+ "expression": {
+ "id": 246,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 231,
+ "src": "2340:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 229,
+ "id": 247,
+ "nodeType": "Return",
+ "src": "2333:12:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 222,
+ "nodeType": "StructuredDocumentation",
+ "src": "2066:46:1",
+ "text": " @dev See {IERC721-ownerOf}."
+ },
+ "functionSelector": "6352211e",
+ "id": 249,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "ownerOf",
+ "nameLocation": "2126:7:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 226,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "2171:8:1"
+ },
+ "parameters": {
+ "id": 225,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 224,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "2142:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 249,
+ "src": "2134:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 223,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2134:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2133:17:1"
+ },
+ "returnParameters": {
+ "id": 229,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 228,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 249,
+ "src": "2189:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 227,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2189:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2188:9:1"
+ },
+ "scope": 919,
+ "src": "2117:235:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 1193
+ ],
+ "body": {
+ "id": 258,
+ "nodeType": "Block",
+ "src": "2483:29:1",
+ "statements": [
+ {
+ "expression": {
+ "id": 256,
+ "name": "_name",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 129,
+ "src": "2500:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "functionReturnParameters": 255,
+ "id": 257,
+ "nodeType": "Return",
+ "src": "2493:12:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 250,
+ "nodeType": "StructuredDocumentation",
+ "src": "2358:51:1",
+ "text": " @dev See {IERC721Metadata-name}."
+ },
+ "functionSelector": "06fdde03",
+ "id": 259,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "name",
+ "nameLocation": "2423:4:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 252,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "2450:8:1"
+ },
+ "parameters": {
+ "id": 251,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2427:2:1"
+ },
+ "returnParameters": {
+ "id": 255,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 254,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 259,
+ "src": "2468:13:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 253,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "2468:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2467:15:1"
+ },
+ "scope": 919,
+ "src": "2414:98:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 1199
+ ],
+ "body": {
+ "id": 268,
+ "nodeType": "Block",
+ "src": "2647:31:1",
+ "statements": [
+ {
+ "expression": {
+ "id": 266,
+ "name": "_symbol",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 131,
+ "src": "2664:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "functionReturnParameters": 265,
+ "id": 267,
+ "nodeType": "Return",
+ "src": "2657:14:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 260,
+ "nodeType": "StructuredDocumentation",
+ "src": "2518:53:1",
+ "text": " @dev See {IERC721Metadata-symbol}."
+ },
+ "functionSelector": "95d89b41",
+ "id": 269,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "symbol",
+ "nameLocation": "2585:6:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 262,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "2614:8:1"
+ },
+ "parameters": {
+ "id": 261,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2591:2:1"
+ },
+ "returnParameters": {
+ "id": 265,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 264,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 269,
+ "src": "2632:13:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 263,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "2632:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2631:15:1"
+ },
+ "scope": 919,
+ "src": "2576:102:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 1207
+ ],
+ "body": {
+ "id": 310,
+ "nodeType": "Block",
+ "src": "2832:241:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 280,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 272,
+ "src": "2858:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 279,
+ "name": "_exists",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 559,
+ "src": "2850:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (uint256) view returns (bool)"
+ }
+ },
+ "id": 281,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2850:16:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e",
+ "id": 282,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2868:49:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb",
+ "typeString": "literal_string \"ERC721Metadata: URI query for nonexistent token\""
+ },
+ "value": "ERC721Metadata: URI query for nonexistent token"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb",
+ "typeString": "literal_string \"ERC721Metadata: URI query for nonexistent token\""
+ }
+ ],
+ "id": 278,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "2842:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 283,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2842:76:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 284,
+ "nodeType": "ExpressionStatement",
+ "src": "2842:76:1"
+ },
+ {
+ "assignments": [
+ 286
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 286,
+ "mutability": "mutable",
+ "name": "baseURI",
+ "nameLocation": "2943:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 310,
+ "src": "2929:21:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 285,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "2929:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 289,
+ "initialValue": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 287,
+ "name": "_baseURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 320,
+ "src": "2953:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$",
+ "typeString": "function () view returns (string memory)"
+ }
+ },
+ "id": 288,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2953:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "2929:34:1"
+ },
+ {
+ "expression": {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 296,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "id": 292,
+ "name": "baseURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 286,
+ "src": "2986:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 291,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "2980:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
+ "typeString": "type(bytes storage pointer)"
+ },
+ "typeName": {
+ "id": 290,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "2980:5:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 293,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2980:14:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 294,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "src": "2980:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 295,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3004:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "2980:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseExpression": {
+ "hexValue": "",
+ "id": 307,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3064:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ },
+ "value": ""
+ },
+ "id": 308,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "Conditional",
+ "src": "2980:86:1",
+ "trueExpression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 301,
+ "name": "baseURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 286,
+ "src": "3032:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "id": 302,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 272,
+ "src": "3041:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 303,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "toString",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1686,
+ "src": "3041:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$bound_to$_t_uint256_$",
+ "typeString": "function (uint256) pure returns (string memory)"
+ }
+ },
+ "id": 304,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3041:18:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "expression": {
+ "id": 299,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967295,
+ "src": "3015:3:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 300,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encodePacked",
+ "nodeType": "MemberAccess",
+ "src": "3015:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 305,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3015:45:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 298,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "3008:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_string_storage_ptr_$",
+ "typeString": "type(string storage pointer)"
+ },
+ "typeName": {
+ "id": 297,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "3008:6:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 306,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3008:53:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 277,
+ "id": 309,
+ "nodeType": "Return",
+ "src": "2973:93:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 270,
+ "nodeType": "StructuredDocumentation",
+ "src": "2684:55:1",
+ "text": " @dev See {IERC721Metadata-tokenURI}."
+ },
+ "functionSelector": "c87b56dd",
+ "id": 311,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "tokenURI",
+ "nameLocation": "2753:8:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 274,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "2799:8:1"
+ },
+ "parameters": {
+ "id": 273,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 272,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "2770:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 311,
+ "src": "2762:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 271,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2762:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2761:17:1"
+ },
+ "returnParameters": {
+ "id": 277,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 276,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 311,
+ "src": "2817:13:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 275,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "2817:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2816:15:1"
+ },
+ "scope": 919,
+ "src": "2744:329:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 319,
+ "nodeType": "Block",
+ "src": "3380:26:1",
+ "statements": [
+ {
+ "expression": {
+ "hexValue": "",
+ "id": 317,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3397:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ },
+ "value": ""
+ },
+ "functionReturnParameters": 316,
+ "id": 318,
+ "nodeType": "Return",
+ "src": "3390:9:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 312,
+ "nodeType": "StructuredDocumentation",
+ "src": "3079:230:1",
+ "text": " @dev Base URI for computing {tokenURI}. If set, the resulting URI for each\n token will be the concatenation of the `baseURI` and the `tokenId`. Empty\n by default, can be overriden in child contracts."
+ },
+ "id": 320,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_baseURI",
+ "nameLocation": "3323:8:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 313,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3331:2:1"
+ },
+ "returnParameters": {
+ "id": 316,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 315,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 320,
+ "src": "3365:13:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 314,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "3365:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3364:15:1"
+ },
+ "scope": 919,
+ "src": "3314:92:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "baseFunctions": [
+ 996
+ ],
+ "body": {
+ "id": 362,
+ "nodeType": "Block",
+ "src": "3533:331:1",
+ "statements": [
+ {
+ "assignments": [
+ 330
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 330,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "3551:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 362,
+ "src": "3543:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 329,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3543:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 335,
+ "initialValue": {
+ "arguments": [
+ {
+ "id": 333,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 325,
+ "src": "3574:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "id": 331,
+ "name": "ERC721",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 919,
+ "src": "3559:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC721_$919_$",
+ "typeString": "type(contract ERC721)"
+ }
+ },
+ "id": 332,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ownerOf",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 249,
+ "src": "3559:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
+ "typeString": "function (uint256) view returns (address)"
+ }
+ },
+ "id": 334,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3559:23:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "3543:39:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 339,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 337,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 323,
+ "src": "3600:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "id": 338,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 330,
+ "src": "3606:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "3600:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a20617070726f76616c20746f2063757272656e74206f776e6572",
+ "id": 340,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3613:35:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942",
+ "typeString": "literal_string \"ERC721: approval to current owner\""
+ },
+ "value": "ERC721: approval to current owner"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942",
+ "typeString": "literal_string \"ERC721: approval to current owner\""
+ }
+ ],
+ "id": 336,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "3592:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 341,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3592:57:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 342,
+ "nodeType": "ExpressionStatement",
+ "src": "3592:57:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 353,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 347,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 344,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "3681:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 345,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3681:12:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "id": 346,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 330,
+ "src": "3697:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "3681:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "arguments": [
+ {
+ "id": 349,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 330,
+ "src": "3723:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 350,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "3730:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 351,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3730:12:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 348,
+ "name": "isApprovedForAll",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 436,
+ "src": "3706:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
+ "typeString": "function (address,address) view returns (bool)"
+ }
+ },
+ "id": 352,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3706:37:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "3681:62:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c",
+ "id": 354,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "3757:58:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d",
+ "typeString": "literal_string \"ERC721: approve caller is not owner nor approved for all\""
+ },
+ "value": "ERC721: approve caller is not owner nor approved for all"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d",
+ "typeString": "literal_string \"ERC721: approve caller is not owner nor approved for all\""
+ }
+ ],
+ "id": 343,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "3660:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 355,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3660:165:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 356,
+ "nodeType": "ExpressionStatement",
+ "src": "3660:165:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 358,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 323,
+ "src": "3845:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 359,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 325,
+ "src": "3849:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 357,
+ "name": "_approve",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 845,
+ "src": "3836:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 360,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "3836:21:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 361,
+ "nodeType": "ExpressionStatement",
+ "src": "3836:21:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 321,
+ "nodeType": "StructuredDocumentation",
+ "src": "3412:46:1",
+ "text": " @dev See {IERC721-approve}."
+ },
+ "functionSelector": "095ea7b3",
+ "id": 363,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "approve",
+ "nameLocation": "3472:7:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 327,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "3524:8:1"
+ },
+ "parameters": {
+ "id": 326,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 323,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "3488:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 363,
+ "src": "3480:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 322,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3480:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 325,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "3500:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 363,
+ "src": "3492:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 324,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3492:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3479:29:1"
+ },
+ "returnParameters": {
+ "id": 328,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3533:0:1"
+ },
+ "scope": 919,
+ "src": "3463:401:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 1004
+ ],
+ "body": {
+ "id": 383,
+ "nodeType": "Block",
+ "src": "4010:132:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 374,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 366,
+ "src": "4036:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 373,
+ "name": "_exists",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 559,
+ "src": "4028:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (uint256) view returns (bool)"
+ }
+ },
+ "id": 375,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4028:16:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e",
+ "id": 376,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4046:46:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
+ "typeString": "literal_string \"ERC721: approved query for nonexistent token\""
+ },
+ "value": "ERC721: approved query for nonexistent token"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
+ "typeString": "literal_string \"ERC721: approved query for nonexistent token\""
+ }
+ ],
+ "id": 372,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "4020:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 377,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4020:73:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 378,
+ "nodeType": "ExpressionStatement",
+ "src": "4020:73:1"
+ },
+ {
+ "expression": {
+ "baseExpression": {
+ "id": 379,
+ "name": "_tokenApprovals",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 143,
+ "src": "4111:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ }
+ },
+ "id": 381,
+ "indexExpression": {
+ "id": 380,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 366,
+ "src": "4127:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "4111:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 371,
+ "id": 382,
+ "nodeType": "Return",
+ "src": "4104:31:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 364,
+ "nodeType": "StructuredDocumentation",
+ "src": "3870:50:1",
+ "text": " @dev See {IERC721-getApproved}."
+ },
+ "functionSelector": "081812fc",
+ "id": 384,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getApproved",
+ "nameLocation": "3934:11:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 368,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "3983:8:1"
+ },
+ "parameters": {
+ "id": 367,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 366,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "3954:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 384,
+ "src": "3946:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 365,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3946:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3945:17:1"
+ },
+ "returnParameters": {
+ "id": 371,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 370,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 384,
+ "src": "4001:7:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 369,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4001:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4000:9:1"
+ },
+ "scope": 919,
+ "src": "3925:217:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 1012
+ ],
+ "body": {
+ "id": 417,
+ "nodeType": "Block",
+ "src": "4293:206:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 397,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 394,
+ "name": "operator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 387,
+ "src": "4311:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 395,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "4323:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 396,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4323:12:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "4311:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a20617070726f766520746f2063616c6c6572",
+ "id": 398,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "4337:27:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05",
+ "typeString": "literal_string \"ERC721: approve to caller\""
+ },
+ "value": "ERC721: approve to caller"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05",
+ "typeString": "literal_string \"ERC721: approve to caller\""
+ }
+ ],
+ "id": 393,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "4303:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 399,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4303:62:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 400,
+ "nodeType": "ExpressionStatement",
+ "src": "4303:62:1"
+ },
+ {
+ "expression": {
+ "id": 408,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "baseExpression": {
+ "id": 401,
+ "name": "_operatorApprovals",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 149,
+ "src": "4376:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
+ "typeString": "mapping(address => mapping(address => bool))"
+ }
+ },
+ "id": 405,
+ "indexExpression": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 402,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "4395:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 403,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4395:12:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "4376:32:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ }
+ },
+ "id": 406,
+ "indexExpression": {
+ "id": 404,
+ "name": "operator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 387,
+ "src": "4409:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "4376:42:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 407,
+ "name": "approved",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 389,
+ "src": "4421:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "4376:53:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 409,
+ "nodeType": "ExpressionStatement",
+ "src": "4376:53:1"
+ },
+ {
+ "eventCall": {
+ "arguments": [
+ {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 411,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "4459:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 412,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4459:12:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 413,
+ "name": "operator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 387,
+ "src": "4473:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 414,
+ "name": "approved",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 389,
+ "src": "4483:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ ],
+ "id": 410,
+ "name": "ApprovalForAll",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 952,
+ "src": "4444:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
+ "typeString": "function (address,address,bool)"
+ }
+ },
+ "id": 415,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4444:48:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 416,
+ "nodeType": "EmitStatement",
+ "src": "4439:53:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 385,
+ "nodeType": "StructuredDocumentation",
+ "src": "4148:56:1",
+ "text": " @dev See {IERC721-setApprovalForAll}."
+ },
+ "functionSelector": "a22cb465",
+ "id": 418,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "setApprovalForAll",
+ "nameLocation": "4218:17:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 391,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "4284:8:1"
+ },
+ "parameters": {
+ "id": 390,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 387,
+ "mutability": "mutable",
+ "name": "operator",
+ "nameLocation": "4244:8:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 418,
+ "src": "4236:16:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 386,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4236:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 389,
+ "mutability": "mutable",
+ "name": "approved",
+ "nameLocation": "4259:8:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 418,
+ "src": "4254:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 388,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "4254:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4235:33:1"
+ },
+ "returnParameters": {
+ "id": 392,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4293:0:1"
+ },
+ "scope": 919,
+ "src": "4209:290:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 1022
+ ],
+ "body": {
+ "id": 435,
+ "nodeType": "Block",
+ "src": "4668:59:1",
+ "statements": [
+ {
+ "expression": {
+ "baseExpression": {
+ "baseExpression": {
+ "id": 429,
+ "name": "_operatorApprovals",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 149,
+ "src": "4685:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
+ "typeString": "mapping(address => mapping(address => bool))"
+ }
+ },
+ "id": 431,
+ "indexExpression": {
+ "id": 430,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 421,
+ "src": "4704:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "4685:25:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
+ "typeString": "mapping(address => bool)"
+ }
+ },
+ "id": 433,
+ "indexExpression": {
+ "id": 432,
+ "name": "operator",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 423,
+ "src": "4711:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "4685:35:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 428,
+ "id": 434,
+ "nodeType": "Return",
+ "src": "4678:42:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 419,
+ "nodeType": "StructuredDocumentation",
+ "src": "4505:55:1",
+ "text": " @dev See {IERC721-isApprovedForAll}."
+ },
+ "functionSelector": "e985e9c5",
+ "id": 436,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "isApprovedForAll",
+ "nameLocation": "4574:16:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 425,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "4644:8:1"
+ },
+ "parameters": {
+ "id": 424,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 421,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "4599:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 436,
+ "src": "4591:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 420,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4591:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 423,
+ "mutability": "mutable",
+ "name": "operator",
+ "nameLocation": "4614:8:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 436,
+ "src": "4606:16:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 422,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4606:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4590:33:1"
+ },
+ "returnParameters": {
+ "id": 428,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 427,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 436,
+ "src": "4662:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 426,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "4662:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4661:6:1"
+ },
+ "scope": 919,
+ "src": "4565:162:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 988
+ ],
+ "body": {
+ "id": 462,
+ "nodeType": "Block",
+ "src": "4908:211:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 449,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "4997:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 450,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4997:12:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 451,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 443,
+ "src": "5011:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 448,
+ "name": "_isApprovedOrOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 600,
+ "src": "4978:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view returns (bool)"
+ }
+ },
+ "id": 452,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4978:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564",
+ "id": 453,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5021:51:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
+ "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
+ },
+ "value": "ERC721: transfer caller is not owner nor approved"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
+ "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
+ }
+ ],
+ "id": 447,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "4970:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 454,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "4970:103:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 455,
+ "nodeType": "ExpressionStatement",
+ "src": "4970:103:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 457,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 439,
+ "src": "5094:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 458,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 441,
+ "src": "5100:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 459,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 443,
+ "src": "5104:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 456,
+ "name": "_transfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 821,
+ "src": "5084:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 460,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5084:28:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 461,
+ "nodeType": "ExpressionStatement",
+ "src": "5084:28:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 437,
+ "nodeType": "StructuredDocumentation",
+ "src": "4733:51:1",
+ "text": " @dev See {IERC721-transferFrom}."
+ },
+ "functionSelector": "23b872dd",
+ "id": 463,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "transferFrom",
+ "nameLocation": "4798:12:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 445,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "4899:8:1"
+ },
+ "parameters": {
+ "id": 444,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 439,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "4828:4:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 463,
+ "src": "4820:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 438,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4820:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 441,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "4850:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 463,
+ "src": "4842:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 440,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4842:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 443,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "4870:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 463,
+ "src": "4862:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 442,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4862:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4810:73:1"
+ },
+ "returnParameters": {
+ "id": 446,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4908:0:1"
+ },
+ "scope": 919,
+ "src": "4789:330:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 978
+ ],
+ "body": {
+ "id": 481,
+ "nodeType": "Block",
+ "src": "5308:56:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 475,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 466,
+ "src": "5335:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 476,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 468,
+ "src": "5341:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 477,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 470,
+ "src": "5345:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "hexValue": "",
+ "id": 478,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5354:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ },
+ "value": ""
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ }
+ ],
+ "id": 474,
+ "name": "safeTransferFrom",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 482,
+ 512
+ ],
+ "referencedDeclaration": 512,
+ "src": "5318:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
+ "typeString": "function (address,address,uint256,bytes memory)"
+ }
+ },
+ "id": 479,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5318:39:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 480,
+ "nodeType": "ExpressionStatement",
+ "src": "5318:39:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 464,
+ "nodeType": "StructuredDocumentation",
+ "src": "5125:55:1",
+ "text": " @dev See {IERC721-safeTransferFrom}."
+ },
+ "functionSelector": "42842e0e",
+ "id": 482,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "safeTransferFrom",
+ "nameLocation": "5194:16:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 472,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "5299:8:1"
+ },
+ "parameters": {
+ "id": 471,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 466,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "5228:4:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 482,
+ "src": "5220:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 465,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5220:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 468,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "5250:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 482,
+ "src": "5242:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 467,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5242:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 470,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "5270:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 482,
+ "src": "5262:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 469,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5262:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "5210:73:1"
+ },
+ "returnParameters": {
+ "id": 473,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "5308:0:1"
+ },
+ "scope": 919,
+ "src": "5185:179:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "baseFunctions": [
+ 1034
+ ],
+ "body": {
+ "id": 511,
+ "nodeType": "Block",
+ "src": "5581:169:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 497,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "5618:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 498,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5618:12:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 499,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 489,
+ "src": "5632:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 496,
+ "name": "_isApprovedOrOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 600,
+ "src": "5599:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (address,uint256) view returns (bool)"
+ }
+ },
+ "id": 500,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5599:41:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564",
+ "id": 501,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "5642:51:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
+ "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
+ },
+ "value": "ERC721: transfer caller is not owner nor approved"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
+ "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
+ }
+ ],
+ "id": 495,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "5591:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 502,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5591:103:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 503,
+ "nodeType": "ExpressionStatement",
+ "src": "5591:103:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 505,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 485,
+ "src": "5718:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 506,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 487,
+ "src": "5724:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 507,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 489,
+ "src": "5728:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "id": 508,
+ "name": "_data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 491,
+ "src": "5737:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 504,
+ "name": "_safeTransfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 541,
+ "src": "5704:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
+ "typeString": "function (address,address,uint256,bytes memory)"
+ }
+ },
+ "id": 509,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "5704:39:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 510,
+ "nodeType": "ExpressionStatement",
+ "src": "5704:39:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 483,
+ "nodeType": "StructuredDocumentation",
+ "src": "5370:55:1",
+ "text": " @dev See {IERC721-safeTransferFrom}."
+ },
+ "functionSelector": "b88d4fde",
+ "id": 512,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "safeTransferFrom",
+ "nameLocation": "5439:16:1",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 493,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "5572:8:1"
+ },
+ "parameters": {
+ "id": 492,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 485,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "5473:4:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 512,
+ "src": "5465:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 484,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5465:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 487,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "5495:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 512,
+ "src": "5487:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 486,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "5487:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 489,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "5515:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 512,
+ "src": "5507:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 488,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "5507:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 491,
+ "mutability": "mutable",
+ "name": "_data",
+ "nameLocation": "5545:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 512,
+ "src": "5532:18:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 490,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "5532:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "5455:101:1"
+ },
+ "returnParameters": {
+ "id": 494,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "5581:0:1"
+ },
+ "scope": 919,
+ "src": "5430:320:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 540,
+ "nodeType": "Block",
+ "src": "6753:166:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 525,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 515,
+ "src": "6773:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 526,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 517,
+ "src": "6779:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 527,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 519,
+ "src": "6783:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 524,
+ "name": "_transfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 821,
+ "src": "6763:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 528,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6763:28:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 529,
+ "nodeType": "ExpressionStatement",
+ "src": "6763:28:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 532,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 515,
+ "src": "6832:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 533,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 517,
+ "src": "6838:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 534,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 519,
+ "src": "6842:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "id": 535,
+ "name": "_data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 521,
+ "src": "6851:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 531,
+ "name": "_checkOnERC721Received",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 907,
+ "src": "6809:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
+ "typeString": "function (address,address,uint256,bytes memory) returns (bool)"
+ }
+ },
+ "id": 536,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6809:48:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
+ "id": 537,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "6859:52:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
+ "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
+ },
+ "value": "ERC721: transfer to non ERC721Receiver implementer"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
+ "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
+ }
+ ],
+ "id": 530,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "6801:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 538,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "6801:111:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 539,
+ "nodeType": "ExpressionStatement",
+ "src": "6801:111:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 513,
+ "nodeType": "StructuredDocumentation",
+ "src": "5756:851:1",
+ "text": " @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n are aware of the ERC721 protocol to prevent tokens from being forever locked.\n `_data` is additional data, it has no specified format and it is sent in call to `to`.\n This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n implement alternative mechanisms to perform token transfer, such as signature-based.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
+ },
+ "id": 541,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_safeTransfer",
+ "nameLocation": "6621:13:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 522,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 515,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "6652:4:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 541,
+ "src": "6644:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 514,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6644:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 517,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "6674:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 541,
+ "src": "6666:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 516,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "6666:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 519,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "6694:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 541,
+ "src": "6686:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 518,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "6686:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 521,
+ "mutability": "mutable",
+ "name": "_data",
+ "nameLocation": "6724:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 541,
+ "src": "6711:18:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 520,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "6711:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "6634:101:1"
+ },
+ "returnParameters": {
+ "id": 523,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "6753:0:1"
+ },
+ "scope": 919,
+ "src": "6612:307:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 558,
+ "nodeType": "Block",
+ "src": "7293:54:1",
+ "statements": [
+ {
+ "expression": {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 556,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "baseExpression": {
+ "id": 549,
+ "name": "_owners",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 135,
+ "src": "7310:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ }
+ },
+ "id": 551,
+ "indexExpression": {
+ "id": 550,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 544,
+ "src": "7318:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "7310:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 554,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7338:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 553,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "7330:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 552,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7330:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 555,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7330:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "7310:30:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 548,
+ "id": 557,
+ "nodeType": "Return",
+ "src": "7303:37:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 542,
+ "nodeType": "StructuredDocumentation",
+ "src": "6925:292:1",
+ "text": " @dev Returns whether `tokenId` exists.\n Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n Tokens start existing when they are minted (`_mint`),\n and stop existing when they are burned (`_burn`)."
+ },
+ "id": 559,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_exists",
+ "nameLocation": "7231:7:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 545,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 544,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "7247:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 559,
+ "src": "7239:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 543,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7239:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "7238:17:1"
+ },
+ "returnParameters": {
+ "id": 548,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 547,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 559,
+ "src": "7287:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 546,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "7287:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "7286:6:1"
+ },
+ "scope": 919,
+ "src": "7222:125:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 599,
+ "nodeType": "Block",
+ "src": "7604:245:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 571,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 564,
+ "src": "7630:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 570,
+ "name": "_exists",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 559,
+ "src": "7622:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (uint256) view returns (bool)"
+ }
+ },
+ "id": 572,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7622:16:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e",
+ "id": 573,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "7640:46:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c",
+ "typeString": "literal_string \"ERC721: operator query for nonexistent token\""
+ },
+ "value": "ERC721: operator query for nonexistent token"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c",
+ "typeString": "literal_string \"ERC721: operator query for nonexistent token\""
+ }
+ ],
+ "id": 569,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "7614:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 574,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7614:73:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 575,
+ "nodeType": "ExpressionStatement",
+ "src": "7614:73:1"
+ },
+ {
+ "assignments": [
+ 577
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 577,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "7705:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 599,
+ "src": "7697:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 576,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7697:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 582,
+ "initialValue": {
+ "arguments": [
+ {
+ "id": 580,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 564,
+ "src": "7728:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "id": 578,
+ "name": "ERC721",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 919,
+ "src": "7713:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC721_$919_$",
+ "typeString": "type(contract ERC721)"
+ }
+ },
+ "id": 579,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ownerOf",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 249,
+ "src": "7713:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
+ "typeString": "function (uint256) view returns (address)"
+ }
+ },
+ "id": 581,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7713:23:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "7697:39:1"
+ },
+ {
+ "expression": {
+ "components": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 596,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 591,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 585,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 583,
+ "name": "spender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 562,
+ "src": "7754:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "id": 584,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 577,
+ "src": "7765:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "7754:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 590,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "arguments": [
+ {
+ "id": 587,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 564,
+ "src": "7786:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 586,
+ "name": "getApproved",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 384,
+ "src": "7774:11:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
+ "typeString": "function (uint256) view returns (address)"
+ }
+ },
+ "id": 588,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7774:20:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "id": 589,
+ "name": "spender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 562,
+ "src": "7798:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "7774:31:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "7754:51:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "arguments": [
+ {
+ "id": 593,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 577,
+ "src": "7826:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 594,
+ "name": "spender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 562,
+ "src": "7833:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 592,
+ "name": "isApprovedForAll",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 436,
+ "src": "7809:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
+ "typeString": "function (address,address) view returns (bool)"
+ }
+ },
+ "id": 595,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "7809:32:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "7754:87:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ }
+ ],
+ "id": 597,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "7753:89:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 568,
+ "id": 598,
+ "nodeType": "Return",
+ "src": "7746:96:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 560,
+ "nodeType": "StructuredDocumentation",
+ "src": "7353:147:1",
+ "text": " @dev Returns whether `spender` is allowed to manage `tokenId`.\n Requirements:\n - `tokenId` must exist."
+ },
+ "id": 600,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_isApprovedOrOwner",
+ "nameLocation": "7514:18:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 565,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 562,
+ "mutability": "mutable",
+ "name": "spender",
+ "nameLocation": "7541:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 600,
+ "src": "7533:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 561,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "7533:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 564,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "7558:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 600,
+ "src": "7550:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 563,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "7550:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "7532:34:1"
+ },
+ "returnParameters": {
+ "id": 568,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 567,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 600,
+ "src": "7598:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 566,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "7598:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "7597:6:1"
+ },
+ "scope": 919,
+ "src": "7505:344:1",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 614,
+ "nodeType": "Block",
+ "src": "8244:43:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 609,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 603,
+ "src": "8264:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 610,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 605,
+ "src": "8268:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "hexValue": "",
+ "id": 611,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8277:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ },
+ "value": ""
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
+ "typeString": "literal_string \"\""
+ }
+ ],
+ "id": 608,
+ "name": "_safeMint",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 615,
+ 644
+ ],
+ "referencedDeclaration": 644,
+ "src": "8254:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
+ "typeString": "function (address,uint256,bytes memory)"
+ }
+ },
+ "id": 612,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8254:26:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 613,
+ "nodeType": "ExpressionStatement",
+ "src": "8254:26:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 601,
+ "nodeType": "StructuredDocumentation",
+ "src": "7855:319:1",
+ "text": " @dev Safely mints `tokenId` and transfers it to `to`.\n Requirements:\n - `tokenId` must not exist.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
+ },
+ "id": 615,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_safeMint",
+ "nameLocation": "8188:9:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 606,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 603,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "8206:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 615,
+ "src": "8198:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 602,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8198:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 605,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "8218:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 615,
+ "src": "8210:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 604,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "8210:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "8197:29:1"
+ },
+ "returnParameters": {
+ "id": 607,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "8244:0:1"
+ },
+ "scope": 919,
+ "src": "8179:108:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 643,
+ "nodeType": "Block",
+ "src": "8623:196:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 626,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 618,
+ "src": "8639:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 627,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 620,
+ "src": "8643:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 625,
+ "name": "_mint",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 701,
+ "src": "8633:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 628,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8633:18:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 629,
+ "nodeType": "ExpressionStatement",
+ "src": "8633:18:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 634,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8713:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 633,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "8705:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 632,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8705:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 635,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8705:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 636,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 618,
+ "src": "8717:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 637,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 620,
+ "src": "8721:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "id": 638,
+ "name": "_data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 622,
+ "src": "8730:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 631,
+ "name": "_checkOnERC721Received",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 907,
+ "src": "8682:22:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
+ "typeString": "function (address,address,uint256,bytes memory) returns (bool)"
+ }
+ },
+ "id": 639,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8682:54:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
+ "id": 640,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "8750:52:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
+ "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
+ },
+ "value": "ERC721: transfer to non ERC721Receiver implementer"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
+ "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
+ }
+ ],
+ "id": 630,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "8661:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 641,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "8661:151:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 642,
+ "nodeType": "ExpressionStatement",
+ "src": "8661:151:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 616,
+ "nodeType": "StructuredDocumentation",
+ "src": "8293:210:1",
+ "text": " @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n forwarded in {IERC721Receiver-onERC721Received} to contract recipients."
+ },
+ "id": 644,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_safeMint",
+ "nameLocation": "8517:9:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 623,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 618,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "8544:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 644,
+ "src": "8536:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 617,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "8536:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 620,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "8564:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 644,
+ "src": "8556:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 619,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "8556:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 622,
+ "mutability": "mutable",
+ "name": "_data",
+ "nameLocation": "8594:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 644,
+ "src": "8581:18:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 621,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "8581:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "8526:79:1"
+ },
+ "returnParameters": {
+ "id": 624,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "8623:0:1"
+ },
+ "scope": 919,
+ "src": "8508:311:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 700,
+ "nodeType": "Block",
+ "src": "9202:311:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 658,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 653,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 647,
+ "src": "9220:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 656,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9234:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 655,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "9226:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 654,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9226:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 657,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9226:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "9220:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a206d696e7420746f20746865207a65726f2061646472657373",
+ "id": 659,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9238:34:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6",
+ "typeString": "literal_string \"ERC721: mint to the zero address\""
+ },
+ "value": "ERC721: mint to the zero address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6",
+ "typeString": "literal_string \"ERC721: mint to the zero address\""
+ }
+ ],
+ "id": 652,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "9212:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 660,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9212:61:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 661,
+ "nodeType": "ExpressionStatement",
+ "src": "9212:61:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 666,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "!",
+ "prefix": true,
+ "src": "9291:17:1",
+ "subExpression": {
+ "arguments": [
+ {
+ "id": 664,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 649,
+ "src": "9300:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 663,
+ "name": "_exists",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 559,
+ "src": "9292:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (uint256) view returns (bool)"
+ }
+ },
+ "id": 665,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9292:16:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a20746f6b656e20616c7265616479206d696e746564",
+ "id": 667,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9310:30:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
+ "typeString": "literal_string \"ERC721: token already minted\""
+ },
+ "value": "ERC721: token already minted"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
+ "typeString": "literal_string \"ERC721: token already minted\""
+ }
+ ],
+ "id": 662,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "9283:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 668,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9283:58:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 669,
+ "nodeType": "ExpressionStatement",
+ "src": "9283:58:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 673,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9381:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 672,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "9373:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 671,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9373:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 674,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9373:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 675,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 647,
+ "src": "9385:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 676,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 649,
+ "src": "9389:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 670,
+ "name": "_beforeTokenTransfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 918,
+ "src": "9352:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 677,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9352:45:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 678,
+ "nodeType": "ExpressionStatement",
+ "src": "9352:45:1"
+ },
+ {
+ "expression": {
+ "id": 683,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 679,
+ "name": "_balances",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 139,
+ "src": "9408:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 681,
+ "indexExpression": {
+ "id": 680,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 647,
+ "src": "9418:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "9408:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "+=",
+ "rightHandSide": {
+ "hexValue": "31",
+ "id": 682,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9425:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "9408:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 684,
+ "nodeType": "ExpressionStatement",
+ "src": "9408:18:1"
+ },
+ {
+ "expression": {
+ "id": 689,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 685,
+ "name": "_owners",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 135,
+ "src": "9436:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ }
+ },
+ "id": 687,
+ "indexExpression": {
+ "id": 686,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 649,
+ "src": "9444:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "9436:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 688,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 647,
+ "src": "9455:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "9436:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 690,
+ "nodeType": "ExpressionStatement",
+ "src": "9436:21:1"
+ },
+ {
+ "eventCall": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 694,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9490:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 693,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "9482:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 692,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9482:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 695,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9482:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 696,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 647,
+ "src": "9494:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 697,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 649,
+ "src": "9498:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 691,
+ "name": "Transfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 934,
+ "src": "9473:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 698,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9473:33:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 699,
+ "nodeType": "EmitStatement",
+ "src": "9468:38:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 645,
+ "nodeType": "StructuredDocumentation",
+ "src": "8825:311:1",
+ "text": " @dev Mints `tokenId` and transfers it to `to`.\n WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n Requirements:\n - `tokenId` must not exist.\n - `to` cannot be the zero address.\n Emits a {Transfer} event."
+ },
+ "id": 701,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_mint",
+ "nameLocation": "9150:5:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 650,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 647,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "9164:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 701,
+ "src": "9156:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 646,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9156:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 649,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "9176:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 701,
+ "src": "9168:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 648,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "9168:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "9155:29:1"
+ },
+ "returnParameters": {
+ "id": 651,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "9202:0:1"
+ },
+ "scope": 919,
+ "src": "9141:372:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 751,
+ "nodeType": "Block",
+ "src": "9779:299:1",
+ "statements": [
+ {
+ "assignments": [
+ 708
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 708,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "9797:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 751,
+ "src": "9789:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 707,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9789:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 713,
+ "initialValue": {
+ "arguments": [
+ {
+ "id": 711,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 704,
+ "src": "9820:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "id": 709,
+ "name": "ERC721",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 919,
+ "src": "9805:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC721_$919_$",
+ "typeString": "type(contract ERC721)"
+ }
+ },
+ "id": 710,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ownerOf",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 249,
+ "src": "9805:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
+ "typeString": "function (uint256) view returns (address)"
+ }
+ },
+ "id": 712,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9805:23:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "9789:39:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 715,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 708,
+ "src": "9860:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 718,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9875:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 717,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "9867:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 716,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9867:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 719,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9867:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 720,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 704,
+ "src": "9879:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 714,
+ "name": "_beforeTokenTransfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 918,
+ "src": "9839:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 721,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9839:48:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 722,
+ "nodeType": "ExpressionStatement",
+ "src": "9839:48:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 726,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9942:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 725,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "9934:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 724,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "9934:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 727,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9934:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 728,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 704,
+ "src": "9946:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 723,
+ "name": "_approve",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 845,
+ "src": "9925:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 729,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "9925:29:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 730,
+ "nodeType": "ExpressionStatement",
+ "src": "9925:29:1"
+ },
+ {
+ "expression": {
+ "id": 735,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 731,
+ "name": "_balances",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 139,
+ "src": "9965:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 733,
+ "indexExpression": {
+ "id": 732,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 708,
+ "src": "9975:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "9965:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "-=",
+ "rightHandSide": {
+ "hexValue": "31",
+ "id": 734,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "9985:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "9965:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 736,
+ "nodeType": "ExpressionStatement",
+ "src": "9965:21:1"
+ },
+ {
+ "expression": {
+ "id": 740,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "delete",
+ "prefix": true,
+ "src": "9996:23:1",
+ "subExpression": {
+ "baseExpression": {
+ "id": 737,
+ "name": "_owners",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 135,
+ "src": "10003:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ }
+ },
+ "id": 739,
+ "indexExpression": {
+ "id": 738,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 704,
+ "src": "10011:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "10003:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 741,
+ "nodeType": "ExpressionStatement",
+ "src": "9996:23:1"
+ },
+ {
+ "eventCall": {
+ "arguments": [
+ {
+ "id": 743,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 708,
+ "src": "10044:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 746,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10059:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 745,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "10051:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 744,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10051:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 747,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10051:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 748,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 704,
+ "src": "10063:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 742,
+ "name": "Transfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 934,
+ "src": "10035:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 749,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10035:36:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 750,
+ "nodeType": "EmitStatement",
+ "src": "10030:41:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 702,
+ "nodeType": "StructuredDocumentation",
+ "src": "9519:206:1",
+ "text": " @dev Destroys `tokenId`.\n The approval is cleared when the token is burned.\n Requirements:\n - `tokenId` must exist.\n Emits a {Transfer} event."
+ },
+ "id": 752,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_burn",
+ "nameLocation": "9739:5:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 705,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 704,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "9753:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 752,
+ "src": "9745:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 703,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "9745:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "9744:17:1"
+ },
+ "returnParameters": {
+ "id": 706,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "9779:0:1"
+ },
+ "scope": 919,
+ "src": "9730:348:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 820,
+ "nodeType": "Block",
+ "src": "10511:451:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 768,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "arguments": [
+ {
+ "id": 765,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 759,
+ "src": "10544:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "id": 763,
+ "name": "ERC721",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 919,
+ "src": "10529:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC721_$919_$",
+ "typeString": "type(contract ERC721)"
+ }
+ },
+ "id": 764,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ownerOf",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 249,
+ "src": "10529:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
+ "typeString": "function (uint256) view returns (address)"
+ }
+ },
+ "id": 766,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10529:23:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "id": 767,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 755,
+ "src": "10556:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "10529:31:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e",
+ "id": 769,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10562:43:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950",
+ "typeString": "literal_string \"ERC721: transfer of token that is not own\""
+ },
+ "value": "ERC721: transfer of token that is not own"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950",
+ "typeString": "literal_string \"ERC721: transfer of token that is not own\""
+ }
+ ],
+ "id": 762,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "10521:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 770,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10521:85:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 771,
+ "nodeType": "ExpressionStatement",
+ "src": "10521:85:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 778,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 773,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 757,
+ "src": "10624:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 776,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10638:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 775,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "10630:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 774,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10630:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 777,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10630:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "10624:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4552433732313a207472616e7366657220746f20746865207a65726f2061646472657373",
+ "id": 779,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10642:38:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4",
+ "typeString": "literal_string \"ERC721: transfer to the zero address\""
+ },
+ "value": "ERC721: transfer to the zero address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4",
+ "typeString": "literal_string \"ERC721: transfer to the zero address\""
+ }
+ ],
+ "id": 772,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "10616:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 780,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10616:65:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 781,
+ "nodeType": "ExpressionStatement",
+ "src": "10616:65:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 783,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 755,
+ "src": "10713:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 784,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 757,
+ "src": "10719:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 785,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 759,
+ "src": "10723:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 782,
+ "name": "_beforeTokenTransfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 918,
+ "src": "10692:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 786,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10692:39:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 787,
+ "nodeType": "ExpressionStatement",
+ "src": "10692:39:1"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 791,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10810:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 790,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "10802:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 789,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10802:7:1",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 792,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10802:10:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 793,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 759,
+ "src": "10814:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 788,
+ "name": "_approve",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 845,
+ "src": "10793:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 794,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10793:29:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 795,
+ "nodeType": "ExpressionStatement",
+ "src": "10793:29:1"
+ },
+ {
+ "expression": {
+ "id": 800,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 796,
+ "name": "_balances",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 139,
+ "src": "10833:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 798,
+ "indexExpression": {
+ "id": 797,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 755,
+ "src": "10843:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "10833:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "-=",
+ "rightHandSide": {
+ "hexValue": "31",
+ "id": 799,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10852:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "10833:20:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 801,
+ "nodeType": "ExpressionStatement",
+ "src": "10833:20:1"
+ },
+ {
+ "expression": {
+ "id": 806,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 802,
+ "name": "_balances",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 139,
+ "src": "10863:9:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
+ "typeString": "mapping(address => uint256)"
+ }
+ },
+ "id": 804,
+ "indexExpression": {
+ "id": 803,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 757,
+ "src": "10873:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "10863:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "+=",
+ "rightHandSide": {
+ "hexValue": "31",
+ "id": 805,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "10880:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "10863:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 807,
+ "nodeType": "ExpressionStatement",
+ "src": "10863:18:1"
+ },
+ {
+ "expression": {
+ "id": 812,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 808,
+ "name": "_owners",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 135,
+ "src": "10891:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ }
+ },
+ "id": 810,
+ "indexExpression": {
+ "id": 809,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 759,
+ "src": "10899:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "10891:16:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 811,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 757,
+ "src": "10910:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "10891:21:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 813,
+ "nodeType": "ExpressionStatement",
+ "src": "10891:21:1"
+ },
+ {
+ "eventCall": {
+ "arguments": [
+ {
+ "id": 815,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 755,
+ "src": "10937:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 816,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 757,
+ "src": "10943:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 817,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 759,
+ "src": "10947:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 814,
+ "name": "Transfer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 934,
+ "src": "10928:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 818,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "10928:27:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 819,
+ "nodeType": "EmitStatement",
+ "src": "10923:32:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 753,
+ "nodeType": "StructuredDocumentation",
+ "src": "10084:313:1",
+ "text": " @dev Transfers `tokenId` from `from` to `to`.\n As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n Requirements:\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n Emits a {Transfer} event."
+ },
+ "id": 821,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_transfer",
+ "nameLocation": "10411:9:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 760,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 755,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "10438:4:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 821,
+ "src": "10430:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 754,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10430:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 757,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "10460:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 821,
+ "src": "10452:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 756,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "10452:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 759,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "10480:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 821,
+ "src": "10472:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 758,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "10472:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "10420:73:1"
+ },
+ "returnParameters": {
+ "id": 761,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "10511:0:1"
+ },
+ "scope": 919,
+ "src": "10402:560:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 844,
+ "nodeType": "Block",
+ "src": "11137:107:1",
+ "statements": [
+ {
+ "expression": {
+ "id": 833,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 829,
+ "name": "_tokenApprovals",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 143,
+ "src": "11147:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
+ "typeString": "mapping(uint256 => address)"
+ }
+ },
+ "id": 831,
+ "indexExpression": {
+ "id": 830,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 826,
+ "src": "11163:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "11147:24:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 832,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 824,
+ "src": "11174:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "11147:29:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 834,
+ "nodeType": "ExpressionStatement",
+ "src": "11147:29:1"
+ },
+ {
+ "eventCall": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 838,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 826,
+ "src": "11215:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "id": 836,
+ "name": "ERC721",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 919,
+ "src": "11200:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC721_$919_$",
+ "typeString": "type(contract ERC721)"
+ }
+ },
+ "id": 837,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "ownerOf",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 249,
+ "src": "11200:14:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
+ "typeString": "function (uint256) view returns (address)"
+ }
+ },
+ "id": 839,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11200:23:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 840,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 824,
+ "src": "11225:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 841,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 826,
+ "src": "11229:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 835,
+ "name": "Approval",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 943,
+ "src": "11191:8:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,address,uint256)"
+ }
+ },
+ "id": 842,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11191:46:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 843,
+ "nodeType": "EmitStatement",
+ "src": "11186:51:1"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 822,
+ "nodeType": "StructuredDocumentation",
+ "src": "10968:100:1",
+ "text": " @dev Approve `to` to operate on `tokenId`\n Emits a {Approval} event."
+ },
+ "id": 845,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_approve",
+ "nameLocation": "11082:8:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 827,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 824,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "11099:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 845,
+ "src": "11091:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 823,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "11091:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 826,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "11111:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 845,
+ "src": "11103:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 825,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "11103:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "11090:29:1"
+ },
+ "returnParameters": {
+ "id": 828,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "11137:0:1"
+ },
+ "scope": 919,
+ "src": "11073:171:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 906,
+ "nodeType": "Block",
+ "src": "11953:622:1",
+ "statements": [
+ {
+ "condition": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "id": 859,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 850,
+ "src": "11967:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 860,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "isContract",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1228,
+ "src": "11967:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
+ "typeString": "function (address) view returns (bool)"
+ }
+ },
+ "id": 861,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "11967:15:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 904,
+ "nodeType": "Block",
+ "src": "12533:36:1",
+ "statements": [
+ {
+ "expression": {
+ "hexValue": "74727565",
+ "id": 902,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "12554:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "true"
+ },
+ "functionReturnParameters": 858,
+ "id": 903,
+ "nodeType": "Return",
+ "src": "12547:11:1"
+ }
+ ]
+ },
+ "id": 905,
+ "nodeType": "IfStatement",
+ "src": "11963:606:1",
+ "trueBody": {
+ "id": 901,
+ "nodeType": "Block",
+ "src": "11984:543:1",
+ "statements": [
+ {
+ "clauses": [
+ {
+ "block": {
+ "id": 881,
+ "nodeType": "Block",
+ "src": "12099:91:1",
+ "statements": [
+ {
+ "expression": {
+ "commonType": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "id": 879,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 875,
+ "name": "retval",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 873,
+ "src": "12124:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "expression": {
+ "expression": {
+ "id": 876,
+ "name": "IERC721Receiver",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1053,
+ "src": "12134:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_IERC721Receiver_$1053_$",
+ "typeString": "type(contract IERC721Receiver)"
+ }
+ },
+ "id": 877,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "onERC721Received",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1052,
+ "src": "12134:32:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$_t_bytes4_$",
+ "typeString": "function IERC721Receiver.onERC721Received(address,address,uint256,bytes calldata) returns (bytes4)"
+ }
+ },
+ "id": 878,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "selector",
+ "nodeType": "MemberAccess",
+ "src": "12134:41:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "src": "12124:51:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 858,
+ "id": 880,
+ "nodeType": "Return",
+ "src": "12117:58:1"
+ }
+ ]
+ },
+ "errorName": "",
+ "id": 882,
+ "nodeType": "TryCatchClause",
+ "parameters": {
+ "id": 874,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 873,
+ "mutability": "mutable",
+ "name": "retval",
+ "nameLocation": "12091:6:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 882,
+ "src": "12084:13:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "typeName": {
+ "id": 872,
+ "name": "bytes4",
+ "nodeType": "ElementaryTypeName",
+ "src": "12084:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "12083:15:1"
+ },
+ "src": "12075:115:1"
+ },
+ {
+ "block": {
+ "id": 898,
+ "nodeType": "Block",
+ "src": "12219:298:1",
+ "statements": [
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 889,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "id": 886,
+ "name": "reason",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 884,
+ "src": "12241:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 887,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "src": "12241:13:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 888,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "12258:1:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "12241:18:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 896,
+ "nodeType": "Block",
+ "src": "12368:135:1",
+ "statements": [
+ {
+ "AST": {
+ "nodeType": "YulBlock",
+ "src": "12399:86:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "12436:2:1",
+ "type": "",
+ "value": "32"
+ },
+ {
+ "name": "reason",
+ "nodeType": "YulIdentifier",
+ "src": "12440:6:1"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "12432:3:1"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12432:15:1"
+ },
+ {
+ "arguments": [
+ {
+ "name": "reason",
+ "nodeType": "YulIdentifier",
+ "src": "12455:6:1"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "12449:5:1"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12449:13:1"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "12425:6:1"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12425:38:1"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "12425:38:1"
+ }
+ ]
+ },
+ "evmVersion": "berlin",
+ "externalReferences": [
+ {
+ "declaration": 884,
+ "isOffset": false,
+ "isSlot": false,
+ "src": "12440:6:1",
+ "valueSize": 1
+ },
+ {
+ "declaration": 884,
+ "isOffset": false,
+ "isSlot": false,
+ "src": "12455:6:1",
+ "valueSize": 1
+ }
+ ],
+ "id": 895,
+ "nodeType": "InlineAssembly",
+ "src": "12390:95:1"
+ }
+ ]
+ },
+ "id": 897,
+ "nodeType": "IfStatement",
+ "src": "12237:266:1",
+ "trueBody": {
+ "id": 894,
+ "nodeType": "Block",
+ "src": "12261:101:1",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "hexValue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
+ "id": 891,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "12290:52:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
+ "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
+ },
+ "value": "ERC721: transfer to non ERC721Receiver implementer"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
+ "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
+ }
+ ],
+ "id": 890,
+ "name": "revert",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967277,
+ 4294967277
+ ],
+ "referencedDeclaration": 4294967277,
+ "src": "12283:6:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (string memory) pure"
+ }
+ },
+ "id": 892,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "12283:60:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 893,
+ "nodeType": "ExpressionStatement",
+ "src": "12283:60:1"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "errorName": "",
+ "id": 899,
+ "nodeType": "TryCatchClause",
+ "parameters": {
+ "id": 885,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 884,
+ "mutability": "mutable",
+ "name": "reason",
+ "nameLocation": "12211:6:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 899,
+ "src": "12198:19:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 883,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "12198:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "12197:21:1"
+ },
+ "src": "12191:326:1"
+ }
+ ],
+ "externalCall": {
+ "arguments": [
+ {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 866,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "12039:10:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 867,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "12039:12:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 868,
+ "name": "from",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 848,
+ "src": "12053:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 869,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 852,
+ "src": "12059:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "id": 870,
+ "name": "_data",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 854,
+ "src": "12068:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "arguments": [
+ {
+ "id": 863,
+ "name": "to",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 850,
+ "src": "12018:2:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 862,
+ "name": "IERC721Receiver",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1053,
+ "src": "12002:15:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_IERC721Receiver_$1053_$",
+ "typeString": "type(contract IERC721Receiver)"
+ }
+ },
+ "id": 864,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "12002:19:1",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_IERC721Receiver_$1053",
+ "typeString": "contract IERC721Receiver"
+ }
+ },
+ "id": 865,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "onERC721Received",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1052,
+ "src": "12002:36:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
+ "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
+ }
+ },
+ "id": 871,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "12002:72:1",
+ "tryCall": true,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "id": 900,
+ "nodeType": "TryStatement",
+ "src": "11998:519:1"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "documentation": {
+ "id": 846,
+ "nodeType": "StructuredDocumentation",
+ "src": "11250:542:1",
+ "text": " @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n The call is not executed if the target address is not a contract.\n @param from address representing the previous owner of the given token ID\n @param to target address that will receive the tokens\n @param tokenId uint256 ID of the token to be transferred\n @param _data bytes optional data to send along with the call\n @return bool whether the call correctly returned the expected magic value"
+ },
+ "id": 907,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_checkOnERC721Received",
+ "nameLocation": "11806:22:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 855,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 848,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "11846:4:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 907,
+ "src": "11838:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 847,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "11838:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 850,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "11868:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 907,
+ "src": "11860:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 849,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "11860:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 852,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "11888:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 907,
+ "src": "11880:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 851,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "11880:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 854,
+ "mutability": "mutable",
+ "name": "_data",
+ "nameLocation": "11918:5:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 907,
+ "src": "11905:18:1",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 853,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "11905:5:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "11828:101:1"
+ },
+ "returnParameters": {
+ "id": 858,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 857,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 907,
+ "src": "11947:4:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 856,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "11947:4:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "11946:6:1"
+ },
+ "scope": 919,
+ "src": "11797:778:1",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "private"
+ },
+ {
+ "body": {
+ "id": 917,
+ "nodeType": "Block",
+ "src": "13251:2:1",
+ "statements": []
+ },
+ "documentation": {
+ "id": 908,
+ "nodeType": "StructuredDocumentation",
+ "src": "12581:545:1",
+ "text": " @dev Hook that is called before any token transfer. This includes minting\n and burning.\n Calling conditions:\n - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n transferred to `to`.\n - When `from` is zero, `tokenId` will be minted for `to`.\n - When `to` is zero, ``from``'s `tokenId` will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
+ },
+ "id": 918,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_beforeTokenTransfer",
+ "nameLocation": "13140:20:1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 915,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 910,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "13178:4:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 918,
+ "src": "13170:12:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 909,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "13170:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 912,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "13200:2:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 918,
+ "src": "13192:10:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 911,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "13192:7:1",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 914,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "13220:7:1",
+ "nodeType": "VariableDeclaration",
+ "scope": 918,
+ "src": "13212:15:1",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 913,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "13212:7:1",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "13160:73:1"
+ },
+ "returnParameters": {
+ "id": 916,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "13251:0:1"
+ },
+ "scope": 919,
+ "src": "13131:122:1",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 920,
+ "src": "554:12701:1",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:13223:1"
+ },
+ "compiler": {
+ "name": "solc",
+ "version": "0.8.6+commit.11564f7e.Emscripten.clang"
+ },
+ "networks": {},
+ "schemaVersion": "3.4.3",
+ "updatedAt": "2021-09-07T13:34:26.777Z",
+ "devdoc": {
+ "details": "Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including the Metadata extension, but not including the Enumerable extension, which is available separately as {ERC721Enumerable}.",
+ "kind": "dev",
+ "methods": {
+ "approve(address,uint256)": {
+ "details": "See {IERC721-approve}."
+ },
+ "balanceOf(address)": {
+ "details": "See {IERC721-balanceOf}."
+ },
+ "constructor": {
+ "details": "Initializes the contract by setting a `name` and a `symbol` to the token collection."
+ },
+ "getApproved(uint256)": {
+ "details": "See {IERC721-getApproved}."
+ },
+ "isApprovedForAll(address,address)": {
+ "details": "See {IERC721-isApprovedForAll}."
+ },
+ "name()": {
+ "details": "See {IERC721Metadata-name}."
+ },
+ "ownerOf(uint256)": {
+ "details": "See {IERC721-ownerOf}."
+ },
+ "safeTransferFrom(address,address,uint256)": {
+ "details": "See {IERC721-safeTransferFrom}."
+ },
+ "safeTransferFrom(address,address,uint256,bytes)": {
+ "details": "See {IERC721-safeTransferFrom}."
+ },
+ "setApprovalForAll(address,bool)": {
+ "details": "See {IERC721-setApprovalForAll}."
+ },
+ "supportsInterface(bytes4)": {
+ "details": "See {IERC165-supportsInterface}."
+ },
+ "symbol()": {
+ "details": "See {IERC721Metadata-symbol}."
+ },
+ "tokenURI(uint256)": {
+ "details": "See {IERC721Metadata-tokenURI}."
+ },
+ "transferFrom(address,address,uint256)": {
+ "details": "See {IERC721-transferFrom}."
+ }
+ },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {},
+ "version": 1
+ }
+}
\ No newline at end of file
diff --git a/build/contracts/ERC721URIStorage.json b/build/contracts/ERC721URIStorage.json
new file mode 100644
index 0000000..a0e15ce
--- /dev/null
+++ b/build/contracts/ERC721URIStorage.json
@@ -0,0 +1,3597 @@
+{
+ "contractName": "ERC721URIStorage",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "approved",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenURI",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"ERC721 token with storage based token URI management.\",\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol\":\"ERC721URIStorage\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x7d2b8ba4b256bfcac347991b75242f9bc37f499c5236af50cf09d0b35943dc0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8eeaf6afe00229af4c232ca058bb08b7a24cc3886f0b387159ac49ffd8b5312\",\"dweb:/ipfs/QmdnVKmDDWDvdRr6vtrxy3G6WafqA2TAhUZv1UFMsm4B4r\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xf101e8720213560fab41104d53b3cc7ba0456ef3a98455aa7f022391783144a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3e7820bcf567e6892d937c3cb10db263a4042e446799bca602535868d822384e\",\"dweb:/ipfs/QmPG2oeDjKncqsEeyYGjAN7CwAJmMgHterXGGnpzhha4z7\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xd9517254724276e2e8de3769183c1f738f445f0095c26fd9b86d3c6687e887b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0e604bcdcd5e5b2fb299ad09769cde6db19d5aa1929d1b5e939234a0f10d7eb8\",\"dweb:/ipfs/Qmd8hXE3GZfBHuWx3RNiYgFW2ci7KvHtib8DiwzJ2dgo9V\"]},\"@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol\":{\"keccak256\":\"0x188d038a65a945481cc13fe30db334472dfbed61f7959d4478d05feb6303b1ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7aec4efa22389811ffa393463569410bbca1ecaa551bc94d69020bc9567e9277\",\"dweb:/ipfs/QmPwk5uVSHPQkepebrZSQ9xqgXdPABKqHwJZ2HkzNByLRE\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0xd32fb7f530a914b1083d10a6bed3a586f2451952fec04fe542bcc670a82f7ba5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af63ab940a34687c45f0ad84960b048fc5f49330c92ccb422db7822a444733b9\",\"dweb:/ipfs/QmUShaQEu8HS1GjDnsMJQ8jkZEBrecn6NuDZ3pfjY1gVck\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://39a05eec7083dfa0cc7e0cbfe6cd1bd085a340af1ede93fdff3ad047c5fb3d8e\",\"dweb:/ipfs/QmVApz5fCUq2QC8gKTsNNdCmcedJ3ETHp68zR5N3WUKS4r\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x90565a39ae45c80f0468dc96c7b20d0afc3055f344c8203a0c9258239f350b9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26e8b38a7ac8e7b4463af00cf7fff1bf48ae9875765bf4f7751e100124d0bc8c\",\"dweb:/ipfs/QmWcsmkVr24xmmjfnBQZoemFniXjj3vwT78Cz6uqZW1Hux\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x391d3ba97ab6856a16b225d6ee29617ad15ff00db70f3b4df1ab5ea33aa47c9d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d636ba90bbbeed04a1ea7fe9ec2466757e30fd38ba2ca173636dbf69a518735e\",\"dweb:/ipfs/QmQwCB2BHnEuYR22PYt9HkpbgeFDhq4rHmaYqAZbX3WRC7\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x5718c5df9bd67ac68a796961df938821bb5dc0cd4c6118d77e9145afb187409b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d10e1d9b26042424789246603906ad06143bf9a928f4e99de8b5e3bdc662f549\",\"dweb:/ipfs/Qmejonoaj5MLekPus229rJQHcC6E9dz2xorjHJR84fMfmn\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0xa28007762d9da9db878dd421960c8cb9a10471f47ab5c1b3309bfe48e9e79ff4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://796ab6e88af7bf0e78def0f059310c903af6a312b565344e0ff524a0f26e81c6\",\"dweb:/ipfs/QmcsVgLgzWdor3UnAztUkXKNGcysm1MPneWksF72AvnwBx\"]}},\"version\":1}",
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "immutableReferences": {},
+ "generatedSources": [],
+ "deployedGeneratedSources": [],
+ "sourceMap": "",
+ "deployedSourceMap": "",
+ "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport \"../ERC721.sol\";\n\n/**\n * @dev ERC721 token with storage based token URI management.\n */\nabstract contract ERC721URIStorage is ERC721 {\n using Strings for uint256;\n\n // Optional mapping for token URIs\n mapping(uint256 => string) private _tokenURIs;\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721URIStorage: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = _baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n\n return super.tokenURI(tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721URIStorage: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual override {\n super._burn(tokenId);\n\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n }\n}\n",
+ "sourcePath": "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol",
+ "ast": {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol",
+ "exportedSymbols": {
+ "Address": [
+ 1505
+ ],
+ "Context": [
+ 1527
+ ],
+ "ERC165": [
+ 1828
+ ],
+ "ERC721": [
+ 919
+ ],
+ "ERC721URIStorage": [
+ 1181
+ ],
+ "IERC165": [
+ 1840
+ ],
+ "IERC721": [
+ 1035
+ ],
+ "IERC721Metadata": [
+ 1208
+ ],
+ "IERC721Receiver": [
+ 1053
+ ],
+ "Strings": [
+ 1804
+ ]
+ },
+ "id": 1182,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1055,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:4"
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
+ "file": "../ERC721.sol",
+ "id": 1056,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 1182,
+ "sourceUnit": 920,
+ "src": "58:23:4",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "abstract": true,
+ "baseContracts": [
+ {
+ "baseName": {
+ "id": 1058,
+ "name": "ERC721",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 919,
+ "src": "191:6:4"
+ },
+ "id": 1059,
+ "nodeType": "InheritanceSpecifier",
+ "src": "191:6:4"
+ }
+ ],
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 1057,
+ "nodeType": "StructuredDocumentation",
+ "src": "83:69:4",
+ "text": " @dev ERC721 token with storage based token URI management."
+ },
+ "fullyImplemented": false,
+ "id": 1181,
+ "linearizedBaseContracts": [
+ 1181,
+ 919,
+ 1208,
+ 1035,
+ 1828,
+ 1840,
+ 1527
+ ],
+ "name": "ERC721URIStorage",
+ "nameLocation": "171:16:4",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "id": 1062,
+ "libraryName": {
+ "id": 1060,
+ "name": "Strings",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1804,
+ "src": "210:7:4"
+ },
+ "nodeType": "UsingForDirective",
+ "src": "204:26:4",
+ "typeName": {
+ "id": 1061,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "222:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ {
+ "constant": false,
+ "id": 1066,
+ "mutability": "mutable",
+ "name": "_tokenURIs",
+ "nameLocation": "310:10:4",
+ "nodeType": "VariableDeclaration",
+ "scope": 1181,
+ "src": "275:45:4",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
+ "typeString": "mapping(uint256 => string)"
+ },
+ "typeName": {
+ "id": 1065,
+ "keyType": {
+ "id": 1063,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "283:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "275:26:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
+ "typeString": "mapping(uint256 => string)"
+ },
+ "valueType": {
+ "id": 1064,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "294:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "baseFunctions": [
+ 311
+ ],
+ "body": {
+ "id": 1127,
+ "nodeType": "Block",
+ "src": "475:575:4",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 1077,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1069,
+ "src": "501:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1076,
+ "name": "_exists",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 559,
+ "src": "493:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (uint256) view returns (bool)"
+ }
+ },
+ "id": 1078,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "493:16:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "45524337323155524953746f726167653a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e",
+ "id": 1079,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "511:51:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_8e9ed1638ba7e2d59e03d0957c9339381732ac84d73f65c86c45db1467eafa2a",
+ "typeString": "literal_string \"ERC721URIStorage: URI query for nonexistent token\""
+ },
+ "value": "ERC721URIStorage: URI query for nonexistent token"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_8e9ed1638ba7e2d59e03d0957c9339381732ac84d73f65c86c45db1467eafa2a",
+ "typeString": "literal_string \"ERC721URIStorage: URI query for nonexistent token\""
+ }
+ ],
+ "id": 1075,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "485:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1080,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "485:78:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1081,
+ "nodeType": "ExpressionStatement",
+ "src": "485:78:4"
+ },
+ {
+ "assignments": [
+ 1083
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1083,
+ "mutability": "mutable",
+ "name": "_tokenURI",
+ "nameLocation": "588:9:4",
+ "nodeType": "VariableDeclaration",
+ "scope": 1127,
+ "src": "574:23:4",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1082,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "574:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1087,
+ "initialValue": {
+ "baseExpression": {
+ "id": 1084,
+ "name": "_tokenURIs",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1066,
+ "src": "600:10:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
+ "typeString": "mapping(uint256 => string storage ref)"
+ }
+ },
+ "id": 1086,
+ "indexExpression": {
+ "id": 1085,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1069,
+ "src": "611:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "600:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "574:45:4"
+ },
+ {
+ "assignments": [
+ 1089
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1089,
+ "mutability": "mutable",
+ "name": "base",
+ "nameLocation": "643:4:4",
+ "nodeType": "VariableDeclaration",
+ "scope": 1127,
+ "src": "629:18:4",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1088,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "629:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1092,
+ "initialValue": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 1090,
+ "name": "_baseURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 320,
+ "src": "650:8:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$",
+ "typeString": "function () view returns (string memory)"
+ }
+ },
+ "id": 1091,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "650:10:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "629:31:4"
+ },
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1099,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1095,
+ "name": "base",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1089,
+ "src": "739:4:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 1094,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "733:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
+ "typeString": "type(bytes storage pointer)"
+ },
+ "typeName": {
+ "id": 1093,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "733:5:4",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1096,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "733:11:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 1097,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "src": "733:18:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1098,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "755:1:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "733:23:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1103,
+ "nodeType": "IfStatement",
+ "src": "729:70:4",
+ "trueBody": {
+ "id": 1102,
+ "nodeType": "Block",
+ "src": "758:41:4",
+ "statements": [
+ {
+ "expression": {
+ "id": 1100,
+ "name": "_tokenURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1083,
+ "src": "779:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 1074,
+ "id": 1101,
+ "nodeType": "Return",
+ "src": "772:16:4"
+ }
+ ]
+ }
+ },
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1110,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1106,
+ "name": "_tokenURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1083,
+ "src": "907:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 1105,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "901:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
+ "typeString": "type(bytes storage pointer)"
+ },
+ "typeName": {
+ "id": 1104,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "901:5:4",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1107,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "901:16:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 1108,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "src": "901:23:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1109,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "927:1:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "901:27:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1121,
+ "nodeType": "IfStatement",
+ "src": "897:106:4",
+ "trueBody": {
+ "id": 1120,
+ "nodeType": "Block",
+ "src": "930:73:4",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 1115,
+ "name": "base",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1089,
+ "src": "975:4:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "id": 1116,
+ "name": "_tokenURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1083,
+ "src": "981:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "expression": {
+ "id": 1113,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967295,
+ "src": "958:3:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 1114,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encodePacked",
+ "nodeType": "MemberAccess",
+ "src": "958:16:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 1117,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "958:33:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 1112,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "951:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_string_storage_ptr_$",
+ "typeString": "type(string storage pointer)"
+ },
+ "typeName": {
+ "id": 1111,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "951:6:4",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1118,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "951:41:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 1074,
+ "id": 1119,
+ "nodeType": "Return",
+ "src": "944:48:4"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1124,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1069,
+ "src": "1035:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "id": 1122,
+ "name": "super",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967271,
+ "src": "1020:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_super$_ERC721URIStorage_$1181_$",
+ "typeString": "type(contract super ERC721URIStorage)"
+ }
+ },
+ "id": 1123,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "tokenURI",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 311,
+ "src": "1020:14:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_string_memory_ptr_$",
+ "typeString": "function (uint256) view returns (string memory)"
+ }
+ },
+ "id": 1125,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1020:23:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 1074,
+ "id": 1126,
+ "nodeType": "Return",
+ "src": "1013:30:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1067,
+ "nodeType": "StructuredDocumentation",
+ "src": "327:55:4",
+ "text": " @dev See {IERC721Metadata-tokenURI}."
+ },
+ "functionSelector": "c87b56dd",
+ "id": 1128,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "tokenURI",
+ "nameLocation": "396:8:4",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 1071,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "442:8:4"
+ },
+ "parameters": {
+ "id": 1070,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1069,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "413:7:4",
+ "nodeType": "VariableDeclaration",
+ "scope": 1128,
+ "src": "405:15:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1068,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "405:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "404:17:4"
+ },
+ "returnParameters": {
+ "id": 1074,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1073,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1128,
+ "src": "460:13:4",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1072,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "460:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "459:15:4"
+ },
+ "scope": 1181,
+ "src": "387:663:4",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 1149,
+ "nodeType": "Block",
+ "src": "1278:133:4",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 1138,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1131,
+ "src": "1304:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1137,
+ "name": "_exists",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 559,
+ "src": "1296:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (uint256) view returns (bool)"
+ }
+ },
+ "id": 1139,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1296:16:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "45524337323155524953746f726167653a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e",
+ "id": 1140,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1314:48:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4",
+ "typeString": "literal_string \"ERC721URIStorage: URI set of nonexistent token\""
+ },
+ "value": "ERC721URIStorage: URI set of nonexistent token"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4",
+ "typeString": "literal_string \"ERC721URIStorage: URI set of nonexistent token\""
+ }
+ ],
+ "id": 1136,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "1288:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1141,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1288:75:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1142,
+ "nodeType": "ExpressionStatement",
+ "src": "1288:75:4"
+ },
+ {
+ "expression": {
+ "id": 1147,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 1143,
+ "name": "_tokenURIs",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1066,
+ "src": "1373:10:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
+ "typeString": "mapping(uint256 => string storage ref)"
+ }
+ },
+ "id": 1145,
+ "indexExpression": {
+ "id": 1144,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1131,
+ "src": "1384:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "1373:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 1146,
+ "name": "_tokenURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1133,
+ "src": "1395:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "src": "1373:31:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "id": 1148,
+ "nodeType": "ExpressionStatement",
+ "src": "1373:31:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1129,
+ "nodeType": "StructuredDocumentation",
+ "src": "1056:136:4",
+ "text": " @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n Requirements:\n - `tokenId` must exist."
+ },
+ "id": 1150,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_setTokenURI",
+ "nameLocation": "1206:12:4",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1134,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1131,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "1227:7:4",
+ "nodeType": "VariableDeclaration",
+ "scope": 1150,
+ "src": "1219:15:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1130,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1219:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1133,
+ "mutability": "mutable",
+ "name": "_tokenURI",
+ "nameLocation": "1250:9:4",
+ "nodeType": "VariableDeclaration",
+ "scope": 1150,
+ "src": "1236:23:4",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1132,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "1236:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1218:42:4"
+ },
+ "returnParameters": {
+ "id": 1135,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1278:0:4"
+ },
+ "scope": 1181,
+ "src": "1197:214:4",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "baseFunctions": [
+ 752
+ ],
+ "body": {
+ "id": 1179,
+ "nodeType": "Block",
+ "src": "1686:142:4",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1160,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1153,
+ "src": "1708:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "id": 1157,
+ "name": "super",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967271,
+ "src": "1696:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_super$_ERC721URIStorage_$1181_$",
+ "typeString": "type(contract super ERC721URIStorage)"
+ }
+ },
+ "id": 1159,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_burn",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 752,
+ "src": "1696:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
+ "typeString": "function (uint256)"
+ }
+ },
+ "id": 1161,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1696:20:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1162,
+ "nodeType": "ExpressionStatement",
+ "src": "1696:20:4"
+ },
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1171,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "baseExpression": {
+ "id": 1165,
+ "name": "_tokenURIs",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1066,
+ "src": "1737:10:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
+ "typeString": "mapping(uint256 => string storage ref)"
+ }
+ },
+ "id": 1167,
+ "indexExpression": {
+ "id": 1166,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1153,
+ "src": "1748:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "1737:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ ],
+ "id": 1164,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1731:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
+ "typeString": "type(bytes storage pointer)"
+ },
+ "typeName": {
+ "id": 1163,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "1731:5:4",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1168,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1731:26:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes storage pointer"
+ }
+ },
+ "id": 1169,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "src": "1731:33:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1170,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1768:1:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1731:38:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1178,
+ "nodeType": "IfStatement",
+ "src": "1727:95:4",
+ "trueBody": {
+ "id": 1177,
+ "nodeType": "Block",
+ "src": "1771:51:4",
+ "statements": [
+ {
+ "expression": {
+ "id": 1175,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "delete",
+ "prefix": true,
+ "src": "1785:26:4",
+ "subExpression": {
+ "baseExpression": {
+ "id": 1172,
+ "name": "_tokenURIs",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1066,
+ "src": "1792:10:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
+ "typeString": "mapping(uint256 => string storage ref)"
+ }
+ },
+ "id": 1174,
+ "indexExpression": {
+ "id": 1173,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1153,
+ "src": "1803:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "1792:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1176,
+ "nodeType": "ExpressionStatement",
+ "src": "1785:26:4"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1151,
+ "nodeType": "StructuredDocumentation",
+ "src": "1417:206:4",
+ "text": " @dev Destroys `tokenId`.\n The approval is cleared when the token is burned.\n Requirements:\n - `tokenId` must exist.\n Emits a {Transfer} event."
+ },
+ "id": 1180,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_burn",
+ "nameLocation": "1637:5:4",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 1155,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "1677:8:4"
+ },
+ "parameters": {
+ "id": 1154,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1153,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "1651:7:4",
+ "nodeType": "VariableDeclaration",
+ "scope": 1180,
+ "src": "1643:15:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1152,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1643:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1642:17:4"
+ },
+ "returnParameters": {
+ "id": 1156,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1686:0:4"
+ },
+ "scope": 1181,
+ "src": "1628:200:4",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 1182,
+ "src": "153:1677:4",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:1798:4"
+ },
+ "legacyAST": {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol",
+ "exportedSymbols": {
+ "Address": [
+ 1505
+ ],
+ "Context": [
+ 1527
+ ],
+ "ERC165": [
+ 1828
+ ],
+ "ERC721": [
+ 919
+ ],
+ "ERC721URIStorage": [
+ 1181
+ ],
+ "IERC165": [
+ 1840
+ ],
+ "IERC721": [
+ 1035
+ ],
+ "IERC721Metadata": [
+ 1208
+ ],
+ "IERC721Receiver": [
+ 1053
+ ],
+ "Strings": [
+ 1804
+ ]
+ },
+ "id": 1182,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1055,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:4"
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
+ "file": "../ERC721.sol",
+ "id": 1056,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 1182,
+ "sourceUnit": 920,
+ "src": "58:23:4",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "abstract": true,
+ "baseContracts": [
+ {
+ "baseName": {
+ "id": 1058,
+ "name": "ERC721",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 919,
+ "src": "191:6:4"
+ },
+ "id": 1059,
+ "nodeType": "InheritanceSpecifier",
+ "src": "191:6:4"
+ }
+ ],
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 1057,
+ "nodeType": "StructuredDocumentation",
+ "src": "83:69:4",
+ "text": " @dev ERC721 token with storage based token URI management."
+ },
+ "fullyImplemented": false,
+ "id": 1181,
+ "linearizedBaseContracts": [
+ 1181,
+ 919,
+ 1208,
+ 1035,
+ 1828,
+ 1840,
+ 1527
+ ],
+ "name": "ERC721URIStorage",
+ "nameLocation": "171:16:4",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "id": 1062,
+ "libraryName": {
+ "id": 1060,
+ "name": "Strings",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1804,
+ "src": "210:7:4"
+ },
+ "nodeType": "UsingForDirective",
+ "src": "204:26:4",
+ "typeName": {
+ "id": 1061,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "222:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ },
+ {
+ "constant": false,
+ "id": 1066,
+ "mutability": "mutable",
+ "name": "_tokenURIs",
+ "nameLocation": "310:10:4",
+ "nodeType": "VariableDeclaration",
+ "scope": 1181,
+ "src": "275:45:4",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
+ "typeString": "mapping(uint256 => string)"
+ },
+ "typeName": {
+ "id": 1065,
+ "keyType": {
+ "id": 1063,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "283:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "275:26:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
+ "typeString": "mapping(uint256 => string)"
+ },
+ "valueType": {
+ "id": 1064,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "294:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "baseFunctions": [
+ 311
+ ],
+ "body": {
+ "id": 1127,
+ "nodeType": "Block",
+ "src": "475:575:4",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 1077,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1069,
+ "src": "501:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1076,
+ "name": "_exists",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 559,
+ "src": "493:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (uint256) view returns (bool)"
+ }
+ },
+ "id": 1078,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "493:16:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "45524337323155524953746f726167653a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e",
+ "id": 1079,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "511:51:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_8e9ed1638ba7e2d59e03d0957c9339381732ac84d73f65c86c45db1467eafa2a",
+ "typeString": "literal_string \"ERC721URIStorage: URI query for nonexistent token\""
+ },
+ "value": "ERC721URIStorage: URI query for nonexistent token"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_8e9ed1638ba7e2d59e03d0957c9339381732ac84d73f65c86c45db1467eafa2a",
+ "typeString": "literal_string \"ERC721URIStorage: URI query for nonexistent token\""
+ }
+ ],
+ "id": 1075,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "485:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1080,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "485:78:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1081,
+ "nodeType": "ExpressionStatement",
+ "src": "485:78:4"
+ },
+ {
+ "assignments": [
+ 1083
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1083,
+ "mutability": "mutable",
+ "name": "_tokenURI",
+ "nameLocation": "588:9:4",
+ "nodeType": "VariableDeclaration",
+ "scope": 1127,
+ "src": "574:23:4",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1082,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "574:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1087,
+ "initialValue": {
+ "baseExpression": {
+ "id": 1084,
+ "name": "_tokenURIs",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1066,
+ "src": "600:10:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
+ "typeString": "mapping(uint256 => string storage ref)"
+ }
+ },
+ "id": 1086,
+ "indexExpression": {
+ "id": 1085,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1069,
+ "src": "611:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "600:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "574:45:4"
+ },
+ {
+ "assignments": [
+ 1089
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1089,
+ "mutability": "mutable",
+ "name": "base",
+ "nameLocation": "643:4:4",
+ "nodeType": "VariableDeclaration",
+ "scope": 1127,
+ "src": "629:18:4",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1088,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "629:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1092,
+ "initialValue": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 1090,
+ "name": "_baseURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 320,
+ "src": "650:8:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$",
+ "typeString": "function () view returns (string memory)"
+ }
+ },
+ "id": 1091,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "650:10:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "629:31:4"
+ },
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1099,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1095,
+ "name": "base",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1089,
+ "src": "739:4:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 1094,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "733:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
+ "typeString": "type(bytes storage pointer)"
+ },
+ "typeName": {
+ "id": 1093,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "733:5:4",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1096,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "733:11:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 1097,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "src": "733:18:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1098,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "755:1:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "733:23:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1103,
+ "nodeType": "IfStatement",
+ "src": "729:70:4",
+ "trueBody": {
+ "id": 1102,
+ "nodeType": "Block",
+ "src": "758:41:4",
+ "statements": [
+ {
+ "expression": {
+ "id": 1100,
+ "name": "_tokenURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1083,
+ "src": "779:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 1074,
+ "id": 1101,
+ "nodeType": "Return",
+ "src": "772:16:4"
+ }
+ ]
+ }
+ },
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1110,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1106,
+ "name": "_tokenURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1083,
+ "src": "907:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 1105,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "901:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
+ "typeString": "type(bytes storage pointer)"
+ },
+ "typeName": {
+ "id": 1104,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "901:5:4",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1107,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "901:16:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 1108,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "src": "901:23:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1109,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "927:1:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "901:27:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1121,
+ "nodeType": "IfStatement",
+ "src": "897:106:4",
+ "trueBody": {
+ "id": 1120,
+ "nodeType": "Block",
+ "src": "930:73:4",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 1115,
+ "name": "base",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1089,
+ "src": "975:4:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ {
+ "id": 1116,
+ "name": "_tokenURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1083,
+ "src": "981:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "expression": {
+ "id": 1113,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967295,
+ "src": "958:3:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 1114,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberName": "encodePacked",
+ "nodeType": "MemberAccess",
+ "src": "958:16:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 1117,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "958:33:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 1112,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "951:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_string_storage_ptr_$",
+ "typeString": "type(string storage pointer)"
+ },
+ "typeName": {
+ "id": 1111,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "951:6:4",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1118,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "951:41:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 1074,
+ "id": 1119,
+ "nodeType": "Return",
+ "src": "944:48:4"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1124,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1069,
+ "src": "1035:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "id": 1122,
+ "name": "super",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967271,
+ "src": "1020:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_super$_ERC721URIStorage_$1181_$",
+ "typeString": "type(contract super ERC721URIStorage)"
+ }
+ },
+ "id": 1123,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "tokenURI",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 311,
+ "src": "1020:14:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_string_memory_ptr_$",
+ "typeString": "function (uint256) view returns (string memory)"
+ }
+ },
+ "id": 1125,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1020:23:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 1074,
+ "id": 1126,
+ "nodeType": "Return",
+ "src": "1013:30:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1067,
+ "nodeType": "StructuredDocumentation",
+ "src": "327:55:4",
+ "text": " @dev See {IERC721Metadata-tokenURI}."
+ },
+ "functionSelector": "c87b56dd",
+ "id": 1128,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "tokenURI",
+ "nameLocation": "396:8:4",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 1071,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "442:8:4"
+ },
+ "parameters": {
+ "id": 1070,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1069,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "413:7:4",
+ "nodeType": "VariableDeclaration",
+ "scope": 1128,
+ "src": "405:15:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1068,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "405:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "404:17:4"
+ },
+ "returnParameters": {
+ "id": 1074,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1073,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1128,
+ "src": "460:13:4",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1072,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "460:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "459:15:4"
+ },
+ "scope": 1181,
+ "src": "387:663:4",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 1149,
+ "nodeType": "Block",
+ "src": "1278:133:4",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 1138,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1131,
+ "src": "1304:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1137,
+ "name": "_exists",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 559,
+ "src": "1296:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (uint256) view returns (bool)"
+ }
+ },
+ "id": 1139,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1296:16:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "45524337323155524953746f726167653a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e",
+ "id": 1140,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1314:48:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4",
+ "typeString": "literal_string \"ERC721URIStorage: URI set of nonexistent token\""
+ },
+ "value": "ERC721URIStorage: URI set of nonexistent token"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4",
+ "typeString": "literal_string \"ERC721URIStorage: URI set of nonexistent token\""
+ }
+ ],
+ "id": 1136,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "1288:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1141,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1288:75:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1142,
+ "nodeType": "ExpressionStatement",
+ "src": "1288:75:4"
+ },
+ {
+ "expression": {
+ "id": 1147,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 1143,
+ "name": "_tokenURIs",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1066,
+ "src": "1373:10:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
+ "typeString": "mapping(uint256 => string storage ref)"
+ }
+ },
+ "id": 1145,
+ "indexExpression": {
+ "id": 1144,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1131,
+ "src": "1384:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "1373:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 1146,
+ "name": "_tokenURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1133,
+ "src": "1395:9:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "src": "1373:31:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "id": 1148,
+ "nodeType": "ExpressionStatement",
+ "src": "1373:31:4"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1129,
+ "nodeType": "StructuredDocumentation",
+ "src": "1056:136:4",
+ "text": " @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n Requirements:\n - `tokenId` must exist."
+ },
+ "id": 1150,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_setTokenURI",
+ "nameLocation": "1206:12:4",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1134,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1131,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "1227:7:4",
+ "nodeType": "VariableDeclaration",
+ "scope": 1150,
+ "src": "1219:15:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1130,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1219:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1133,
+ "mutability": "mutable",
+ "name": "_tokenURI",
+ "nameLocation": "1250:9:4",
+ "nodeType": "VariableDeclaration",
+ "scope": 1150,
+ "src": "1236:23:4",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1132,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "1236:6:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1218:42:4"
+ },
+ "returnParameters": {
+ "id": 1135,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1278:0:4"
+ },
+ "scope": 1181,
+ "src": "1197:214:4",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ },
+ {
+ "baseFunctions": [
+ 752
+ ],
+ "body": {
+ "id": 1179,
+ "nodeType": "Block",
+ "src": "1686:142:4",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1160,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1153,
+ "src": "1708:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "id": 1157,
+ "name": "super",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967271,
+ "src": "1696:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_super$_ERC721URIStorage_$1181_$",
+ "typeString": "type(contract super ERC721URIStorage)"
+ }
+ },
+ "id": 1159,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "_burn",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 752,
+ "src": "1696:11:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
+ "typeString": "function (uint256)"
+ }
+ },
+ "id": 1161,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1696:20:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1162,
+ "nodeType": "ExpressionStatement",
+ "src": "1696:20:4"
+ },
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1171,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "arguments": [
+ {
+ "baseExpression": {
+ "id": 1165,
+ "name": "_tokenURIs",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1066,
+ "src": "1737:10:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
+ "typeString": "mapping(uint256 => string storage ref)"
+ }
+ },
+ "id": 1167,
+ "indexExpression": {
+ "id": 1166,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1153,
+ "src": "1748:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "1737:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ ],
+ "id": 1164,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1731:5:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
+ "typeString": "type(bytes storage pointer)"
+ },
+ "typeName": {
+ "id": 1163,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "1731:5:4",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1168,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1731:26:4",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes storage pointer"
+ }
+ },
+ "id": 1169,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "src": "1731:33:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1170,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1768:1:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1731:38:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1178,
+ "nodeType": "IfStatement",
+ "src": "1727:95:4",
+ "trueBody": {
+ "id": 1177,
+ "nodeType": "Block",
+ "src": "1771:51:4",
+ "statements": [
+ {
+ "expression": {
+ "id": 1175,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "delete",
+ "prefix": true,
+ "src": "1785:26:4",
+ "subExpression": {
+ "baseExpression": {
+ "id": 1172,
+ "name": "_tokenURIs",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1066,
+ "src": "1792:10:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
+ "typeString": "mapping(uint256 => string storage ref)"
+ }
+ },
+ "id": 1174,
+ "indexExpression": {
+ "id": 1173,
+ "name": "tokenId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1153,
+ "src": "1803:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "1792:19:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage",
+ "typeString": "string storage ref"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1176,
+ "nodeType": "ExpressionStatement",
+ "src": "1785:26:4"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1151,
+ "nodeType": "StructuredDocumentation",
+ "src": "1417:206:4",
+ "text": " @dev Destroys `tokenId`.\n The approval is cleared when the token is burned.\n Requirements:\n - `tokenId` must exist.\n Emits a {Transfer} event."
+ },
+ "id": 1180,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_burn",
+ "nameLocation": "1637:5:4",
+ "nodeType": "FunctionDefinition",
+ "overrides": {
+ "id": 1155,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "1677:8:4"
+ },
+ "parameters": {
+ "id": 1154,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1153,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "1651:7:4",
+ "nodeType": "VariableDeclaration",
+ "scope": 1180,
+ "src": "1643:15:4",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1152,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1643:7:4",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1642:17:4"
+ },
+ "returnParameters": {
+ "id": 1156,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1686:0:4"
+ },
+ "scope": 1181,
+ "src": "1628:200:4",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 1182,
+ "src": "153:1677:4",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:1798:4"
+ },
+ "compiler": {
+ "name": "solc",
+ "version": "0.8.6+commit.11564f7e.Emscripten.clang"
+ },
+ "networks": {},
+ "schemaVersion": "3.4.3",
+ "updatedAt": "2021-09-07T13:34:26.814Z",
+ "devdoc": {
+ "details": "ERC721 token with storage based token URI management.",
+ "kind": "dev",
+ "methods": {
+ "approve(address,uint256)": {
+ "details": "See {IERC721-approve}."
+ },
+ "balanceOf(address)": {
+ "details": "See {IERC721-balanceOf}."
+ },
+ "getApproved(uint256)": {
+ "details": "See {IERC721-getApproved}."
+ },
+ "isApprovedForAll(address,address)": {
+ "details": "See {IERC721-isApprovedForAll}."
+ },
+ "name()": {
+ "details": "See {IERC721Metadata-name}."
+ },
+ "ownerOf(uint256)": {
+ "details": "See {IERC721-ownerOf}."
+ },
+ "safeTransferFrom(address,address,uint256)": {
+ "details": "See {IERC721-safeTransferFrom}."
+ },
+ "safeTransferFrom(address,address,uint256,bytes)": {
+ "details": "See {IERC721-safeTransferFrom}."
+ },
+ "setApprovalForAll(address,bool)": {
+ "details": "See {IERC721-setApprovalForAll}."
+ },
+ "supportsInterface(bytes4)": {
+ "details": "See {IERC165-supportsInterface}."
+ },
+ "symbol()": {
+ "details": "See {IERC721Metadata-symbol}."
+ },
+ "tokenURI(uint256)": {
+ "details": "See {IERC721Metadata-tokenURI}."
+ },
+ "transferFrom(address,address,uint256)": {
+ "details": "See {IERC721-transferFrom}."
+ }
+ },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {},
+ "version": 1
+ }
+}
\ No newline at end of file
diff --git a/build/contracts/IERC165.json b/build/contracts/IERC165.json
new file mode 100644
index 0000000..eae8bc5
--- /dev/null
+++ b/build/contracts/IERC165.json
@@ -0,0 +1,334 @@
+{
+ "contractName": "IERC165",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"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}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"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.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0xa28007762d9da9db878dd421960c8cb9a10471f47ab5c1b3309bfe48e9e79ff4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://796ab6e88af7bf0e78def0f059310c903af6a312b565344e0ff524a0f26e81c6\",\"dweb:/ipfs/QmcsVgLgzWdor3UnAztUkXKNGcysm1MPneWksF72AvnwBx\"]}},\"version\":1}",
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "immutableReferences": {},
+ "generatedSources": [],
+ "deployedGeneratedSources": [],
+ "sourceMap": "",
+ "deployedSourceMap": "",
+ "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n",
+ "sourcePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
+ "ast": {
+ "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
+ "exportedSymbols": {
+ "IERC165": [
+ 1840
+ ]
+ },
+ "id": 1841,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1830,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:11"
+ },
+ {
+ "abstract": false,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "interface",
+ "documentation": {
+ "id": 1831,
+ "nodeType": "StructuredDocumentation",
+ "src": "58:279:11",
+ "text": " @dev Interface of the ERC165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[EIP].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."
+ },
+ "fullyImplemented": false,
+ "id": 1840,
+ "linearizedBaseContracts": [
+ 1840
+ ],
+ "name": "IERC165",
+ "nameLocation": "348:7:11",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "documentation": {
+ "id": 1832,
+ "nodeType": "StructuredDocumentation",
+ "src": "362:340:11",
+ "text": " @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."
+ },
+ "functionSelector": "01ffc9a7",
+ "id": 1839,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "supportsInterface",
+ "nameLocation": "716:17:11",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1835,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1834,
+ "mutability": "mutable",
+ "name": "interfaceId",
+ "nameLocation": "741:11:11",
+ "nodeType": "VariableDeclaration",
+ "scope": 1839,
+ "src": "734:18:11",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "typeName": {
+ "id": 1833,
+ "name": "bytes4",
+ "nodeType": "ElementaryTypeName",
+ "src": "734:6:11",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "733:20:11"
+ },
+ "returnParameters": {
+ "id": 1838,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1837,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1839,
+ "src": "777:4:11",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1836,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "777:4:11",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "776:6:11"
+ },
+ "scope": 1840,
+ "src": "707:76:11",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ }
+ ],
+ "scope": 1841,
+ "src": "338:447:11",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:753:11"
+ },
+ "legacyAST": {
+ "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
+ "exportedSymbols": {
+ "IERC165": [
+ 1840
+ ]
+ },
+ "id": 1841,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1830,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:11"
+ },
+ {
+ "abstract": false,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "interface",
+ "documentation": {
+ "id": 1831,
+ "nodeType": "StructuredDocumentation",
+ "src": "58:279:11",
+ "text": " @dev Interface of the ERC165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[EIP].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."
+ },
+ "fullyImplemented": false,
+ "id": 1840,
+ "linearizedBaseContracts": [
+ 1840
+ ],
+ "name": "IERC165",
+ "nameLocation": "348:7:11",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "documentation": {
+ "id": 1832,
+ "nodeType": "StructuredDocumentation",
+ "src": "362:340:11",
+ "text": " @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."
+ },
+ "functionSelector": "01ffc9a7",
+ "id": 1839,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "supportsInterface",
+ "nameLocation": "716:17:11",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1835,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1834,
+ "mutability": "mutable",
+ "name": "interfaceId",
+ "nameLocation": "741:11:11",
+ "nodeType": "VariableDeclaration",
+ "scope": 1839,
+ "src": "734:18:11",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "typeName": {
+ "id": 1833,
+ "name": "bytes4",
+ "nodeType": "ElementaryTypeName",
+ "src": "734:6:11",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "733:20:11"
+ },
+ "returnParameters": {
+ "id": 1838,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1837,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1839,
+ "src": "777:4:11",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1836,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "777:4:11",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "776:6:11"
+ },
+ "scope": 1840,
+ "src": "707:76:11",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ }
+ ],
+ "scope": 1841,
+ "src": "338:447:11",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:753:11"
+ },
+ "compiler": {
+ "name": "solc",
+ "version": "0.8.6+commit.11564f7e.Emscripten.clang"
+ },
+ "networks": {},
+ "schemaVersion": "3.4.3",
+ "updatedAt": "2021-09-07T13:34:26.837Z",
+ "devdoc": {
+ "details": "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}.",
+ "kind": "dev",
+ "methods": {
+ "supportsInterface(bytes4)": {
+ "details": "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."
+ }
+ },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {},
+ "version": 1
+ }
+}
\ No newline at end of file
diff --git a/build/contracts/IERC721.json b/build/contracts/IERC721.json
new file mode 100644
index 0000000..bf32d16
--- /dev/null
+++ b/build/contracts/IERC721.json
@@ -0,0 +1,3048 @@
+{
+ "contractName": "IERC721",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "approved",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Required interface of an ERC721 compliant contract.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"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.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":\"IERC721\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xf101e8720213560fab41104d53b3cc7ba0456ef3a98455aa7f022391783144a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3e7820bcf567e6892d937c3cb10db263a4042e446799bca602535868d822384e\",\"dweb:/ipfs/QmPG2oeDjKncqsEeyYGjAN7CwAJmMgHterXGGnpzhha4z7\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0xa28007762d9da9db878dd421960c8cb9a10471f47ab5c1b3309bfe48e9e79ff4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://796ab6e88af7bf0e78def0f059310c903af6a312b565344e0ff524a0f26e81c6\",\"dweb:/ipfs/QmcsVgLgzWdor3UnAztUkXKNGcysm1MPneWksF72AvnwBx\"]}},\"version\":1}",
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "immutableReferences": {},
+ "generatedSources": [],
+ "deployedGeneratedSources": [],
+ "sourceMap": "",
+ "deployedSourceMap": "",
+ "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721 is IERC165 {\n /**\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n */\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n */\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n */\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n /**\n * @dev Returns the number of tokens in ``owner``'s account.\n */\n function balanceOf(address owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function ownerOf(uint256 tokenId) external view returns (address owner);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) external;\n\n /**\n * @dev Transfers `tokenId` token from `from` to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) external;\n\n /**\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n * The approval is cleared when the token is transferred.\n *\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n *\n * Requirements:\n *\n * - The caller must own the token or be an approved operator.\n * - `tokenId` must exist.\n *\n * Emits an {Approval} event.\n */\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @dev Returns the account approved for `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function getApproved(uint256 tokenId) external view returns (address operator);\n\n /**\n * @dev Approve or remove `operator` as an operator for the caller.\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n *\n * Requirements:\n *\n * - The `operator` cannot be the caller.\n *\n * Emits an {ApprovalForAll} event.\n */\n function setApprovalForAll(address operator, bool _approved) external;\n\n /**\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n *\n * See {setApprovalForAll}\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes calldata data\n ) external;\n}\n",
+ "sourcePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
+ "ast": {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
+ "exportedSymbols": {
+ "IERC165": [
+ 1840
+ ],
+ "IERC721": [
+ 1035
+ ]
+ },
+ "id": 1036,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 921,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:2"
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
+ "file": "../../utils/introspection/IERC165.sol",
+ "id": 922,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 1036,
+ "sourceUnit": 1841,
+ "src": "58:47:2",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [
+ {
+ "baseName": {
+ "id": 924,
+ "name": "IERC165",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1840,
+ "src": "196:7:2"
+ },
+ "id": 925,
+ "nodeType": "InheritanceSpecifier",
+ "src": "196:7:2"
+ }
+ ],
+ "contractDependencies": [],
+ "contractKind": "interface",
+ "documentation": {
+ "id": 923,
+ "nodeType": "StructuredDocumentation",
+ "src": "107:67:2",
+ "text": " @dev Required interface of an ERC721 compliant contract."
+ },
+ "fullyImplemented": false,
+ "id": 1035,
+ "linearizedBaseContracts": [
+ 1035,
+ 1840
+ ],
+ "name": "IERC721",
+ "nameLocation": "185:7:2",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 926,
+ "nodeType": "StructuredDocumentation",
+ "src": "210:88:2",
+ "text": " @dev Emitted when `tokenId` token is transferred from `from` to `to`."
+ },
+ "id": 934,
+ "name": "Transfer",
+ "nameLocation": "309:8:2",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 933,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 928,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "334:4:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 934,
+ "src": "318:20:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 927,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "318:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 930,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "356:2:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 934,
+ "src": "340:18:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 929,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "340:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 932,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "376:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 934,
+ "src": "360:23:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 931,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "360:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "317:67:2"
+ },
+ "src": "303:82:2"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 935,
+ "nodeType": "StructuredDocumentation",
+ "src": "391:94:2",
+ "text": " @dev Emitted when `owner` enables `approved` to manage the `tokenId` token."
+ },
+ "id": 943,
+ "name": "Approval",
+ "nameLocation": "496:8:2",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 942,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 937,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "521:5:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 943,
+ "src": "505:21:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 936,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "505:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 939,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "approved",
+ "nameLocation": "544:8:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 943,
+ "src": "528:24:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 938,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "528:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 941,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "570:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 943,
+ "src": "554:23:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 940,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "554:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "504:74:2"
+ },
+ "src": "490:89:2"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 944,
+ "nodeType": "StructuredDocumentation",
+ "src": "585:117:2",
+ "text": " @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."
+ },
+ "id": 952,
+ "name": "ApprovalForAll",
+ "nameLocation": "713:14:2",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 951,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 946,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "744:5:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 952,
+ "src": "728:21:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 945,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "728:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 948,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "operator",
+ "nameLocation": "767:8:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 952,
+ "src": "751:24:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 947,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "751:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 950,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "approved",
+ "nameLocation": "782:8:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 952,
+ "src": "777:13:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 949,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "777:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "727:64:2"
+ },
+ "src": "707:85:2"
+ },
+ {
+ "documentation": {
+ "id": 953,
+ "nodeType": "StructuredDocumentation",
+ "src": "798:76:2",
+ "text": " @dev Returns the number of tokens in ``owner``'s account."
+ },
+ "functionSelector": "70a08231",
+ "id": 960,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "balanceOf",
+ "nameLocation": "888:9:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 956,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 955,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "906:5:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 960,
+ "src": "898:13:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 954,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "898:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "897:15:2"
+ },
+ "returnParameters": {
+ "id": 959,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 958,
+ "mutability": "mutable",
+ "name": "balance",
+ "nameLocation": "944:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 960,
+ "src": "936:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 957,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "936:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "935:17:2"
+ },
+ "scope": 1035,
+ "src": "879:74:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 961,
+ "nodeType": "StructuredDocumentation",
+ "src": "959:131:2",
+ "text": " @dev Returns the owner of the `tokenId` token.\n Requirements:\n - `tokenId` must exist."
+ },
+ "functionSelector": "6352211e",
+ "id": 968,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "ownerOf",
+ "nameLocation": "1104:7:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 964,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 963,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "1120:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 968,
+ "src": "1112:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 962,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1112:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1111:17:2"
+ },
+ "returnParameters": {
+ "id": 967,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 966,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "1160:5:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 968,
+ "src": "1152:13:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 965,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1152:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1151:15:2"
+ },
+ "scope": 1035,
+ "src": "1095:72:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 969,
+ "nodeType": "StructuredDocumentation",
+ "src": "1173:690:2",
+ "text": " @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n are aware of the ERC721 protocol to prevent tokens from being forever locked.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
+ },
+ "functionSelector": "42842e0e",
+ "id": 978,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "safeTransferFrom",
+ "nameLocation": "1877:16:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 976,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 971,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "1911:4:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 978,
+ "src": "1903:12:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 970,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1903:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 973,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "1933:2:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 978,
+ "src": "1925:10:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 972,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1925:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 975,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "1953:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 978,
+ "src": "1945:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 974,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1945:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1893:73:2"
+ },
+ "returnParameters": {
+ "id": 977,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1975:0:2"
+ },
+ "scope": 1035,
+ "src": "1868:108:2",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 979,
+ "nodeType": "StructuredDocumentation",
+ "src": "1982:504:2",
+ "text": " @dev Transfers `tokenId` token from `from` to `to`.\n WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n Emits a {Transfer} event."
+ },
+ "functionSelector": "23b872dd",
+ "id": 988,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "transferFrom",
+ "nameLocation": "2500:12:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 986,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 981,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "2530:4:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 988,
+ "src": "2522:12:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 980,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2522:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 983,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "2552:2:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 988,
+ "src": "2544:10:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 982,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2544:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 985,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "2572:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 988,
+ "src": "2564:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 984,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2564:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2512:73:2"
+ },
+ "returnParameters": {
+ "id": 987,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2594:0:2"
+ },
+ "scope": 1035,
+ "src": "2491:104:2",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 989,
+ "nodeType": "StructuredDocumentation",
+ "src": "2601:452:2",
+ "text": " @dev Gives permission to `to` to transfer `tokenId` token to another account.\n The approval is cleared when the token is transferred.\n Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n Requirements:\n - The caller must own the token or be an approved operator.\n - `tokenId` must exist.\n Emits an {Approval} event."
+ },
+ "functionSelector": "095ea7b3",
+ "id": 996,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "approve",
+ "nameLocation": "3067:7:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 994,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 991,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "3083:2:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 996,
+ "src": "3075:10:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 990,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3075:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 993,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "3095:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 996,
+ "src": "3087:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 992,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3087:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3074:29:2"
+ },
+ "returnParameters": {
+ "id": 995,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3112:0:2"
+ },
+ "scope": 1035,
+ "src": "3058:55:2",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 997,
+ "nodeType": "StructuredDocumentation",
+ "src": "3119:139:2",
+ "text": " @dev Returns the account approved for `tokenId` token.\n Requirements:\n - `tokenId` must exist."
+ },
+ "functionSelector": "081812fc",
+ "id": 1004,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getApproved",
+ "nameLocation": "3272:11:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1000,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 999,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "3292:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1004,
+ "src": "3284:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 998,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3284:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3283:17:2"
+ },
+ "returnParameters": {
+ "id": 1003,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1002,
+ "mutability": "mutable",
+ "name": "operator",
+ "nameLocation": "3332:8:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1004,
+ "src": "3324:16:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1001,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3324:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3323:18:2"
+ },
+ "scope": 1035,
+ "src": "3263:79:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 1005,
+ "nodeType": "StructuredDocumentation",
+ "src": "3348:309:2",
+ "text": " @dev Approve or remove `operator` as an operator for the caller.\n Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n Requirements:\n - The `operator` cannot be the caller.\n Emits an {ApprovalForAll} event."
+ },
+ "functionSelector": "a22cb465",
+ "id": 1012,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "setApprovalForAll",
+ "nameLocation": "3671:17:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1010,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1007,
+ "mutability": "mutable",
+ "name": "operator",
+ "nameLocation": "3697:8:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1012,
+ "src": "3689:16:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1006,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3689:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1009,
+ "mutability": "mutable",
+ "name": "_approved",
+ "nameLocation": "3712:9:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1012,
+ "src": "3707:14:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1008,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "3707:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3688:34:2"
+ },
+ "returnParameters": {
+ "id": 1011,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3731:0:2"
+ },
+ "scope": 1035,
+ "src": "3662:70:2",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 1013,
+ "nodeType": "StructuredDocumentation",
+ "src": "3738:138:2",
+ "text": " @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n See {setApprovalForAll}"
+ },
+ "functionSelector": "e985e9c5",
+ "id": 1022,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "isApprovedForAll",
+ "nameLocation": "3890:16:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1018,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1015,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "3915:5:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1022,
+ "src": "3907:13:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1014,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3907:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1017,
+ "mutability": "mutable",
+ "name": "operator",
+ "nameLocation": "3930:8:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1022,
+ "src": "3922:16:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1016,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3922:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3906:33:2"
+ },
+ "returnParameters": {
+ "id": 1021,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1020,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1022,
+ "src": "3963:4:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1019,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "3963:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3962:6:2"
+ },
+ "scope": 1035,
+ "src": "3881:88:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 1023,
+ "nodeType": "StructuredDocumentation",
+ "src": "3975:556:2",
+ "text": " @dev Safely transfers `tokenId` token from `from` to `to`.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
+ },
+ "functionSelector": "b88d4fde",
+ "id": 1034,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "safeTransferFrom",
+ "nameLocation": "4545:16:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1032,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1025,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "4579:4:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1034,
+ "src": "4571:12:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1024,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4571:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1027,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "4601:2:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1034,
+ "src": "4593:10:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1026,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4593:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1029,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "4621:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1034,
+ "src": "4613:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1028,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4613:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1031,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "4653:4:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1034,
+ "src": "4638:19:2",
+ "stateVariable": false,
+ "storageLocation": "calldata",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_calldata_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1030,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "4638:5:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4561:102:2"
+ },
+ "returnParameters": {
+ "id": 1033,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4672:0:2"
+ },
+ "scope": 1035,
+ "src": "4536:137:2",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ }
+ ],
+ "scope": 1036,
+ "src": "175:4500:2",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:4643:2"
+ },
+ "legacyAST": {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
+ "exportedSymbols": {
+ "IERC165": [
+ 1840
+ ],
+ "IERC721": [
+ 1035
+ ]
+ },
+ "id": 1036,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 921,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:2"
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
+ "file": "../../utils/introspection/IERC165.sol",
+ "id": 922,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 1036,
+ "sourceUnit": 1841,
+ "src": "58:47:2",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [
+ {
+ "baseName": {
+ "id": 924,
+ "name": "IERC165",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1840,
+ "src": "196:7:2"
+ },
+ "id": 925,
+ "nodeType": "InheritanceSpecifier",
+ "src": "196:7:2"
+ }
+ ],
+ "contractDependencies": [],
+ "contractKind": "interface",
+ "documentation": {
+ "id": 923,
+ "nodeType": "StructuredDocumentation",
+ "src": "107:67:2",
+ "text": " @dev Required interface of an ERC721 compliant contract."
+ },
+ "fullyImplemented": false,
+ "id": 1035,
+ "linearizedBaseContracts": [
+ 1035,
+ 1840
+ ],
+ "name": "IERC721",
+ "nameLocation": "185:7:2",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 926,
+ "nodeType": "StructuredDocumentation",
+ "src": "210:88:2",
+ "text": " @dev Emitted when `tokenId` token is transferred from `from` to `to`."
+ },
+ "id": 934,
+ "name": "Transfer",
+ "nameLocation": "309:8:2",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 933,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 928,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "334:4:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 934,
+ "src": "318:20:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 927,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "318:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 930,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "356:2:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 934,
+ "src": "340:18:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 929,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "340:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 932,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "376:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 934,
+ "src": "360:23:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 931,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "360:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "317:67:2"
+ },
+ "src": "303:82:2"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 935,
+ "nodeType": "StructuredDocumentation",
+ "src": "391:94:2",
+ "text": " @dev Emitted when `owner` enables `approved` to manage the `tokenId` token."
+ },
+ "id": 943,
+ "name": "Approval",
+ "nameLocation": "496:8:2",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 942,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 937,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "521:5:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 943,
+ "src": "505:21:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 936,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "505:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 939,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "approved",
+ "nameLocation": "544:8:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 943,
+ "src": "528:24:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 938,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "528:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 941,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "570:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 943,
+ "src": "554:23:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 940,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "554:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "504:74:2"
+ },
+ "src": "490:89:2"
+ },
+ {
+ "anonymous": false,
+ "documentation": {
+ "id": 944,
+ "nodeType": "StructuredDocumentation",
+ "src": "585:117:2",
+ "text": " @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."
+ },
+ "id": 952,
+ "name": "ApprovalForAll",
+ "nameLocation": "713:14:2",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 951,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 946,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "744:5:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 952,
+ "src": "728:21:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 945,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "728:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 948,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "operator",
+ "nameLocation": "767:8:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 952,
+ "src": "751:24:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 947,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "751:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 950,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "approved",
+ "nameLocation": "782:8:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 952,
+ "src": "777:13:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 949,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "777:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "727:64:2"
+ },
+ "src": "707:85:2"
+ },
+ {
+ "documentation": {
+ "id": 953,
+ "nodeType": "StructuredDocumentation",
+ "src": "798:76:2",
+ "text": " @dev Returns the number of tokens in ``owner``'s account."
+ },
+ "functionSelector": "70a08231",
+ "id": 960,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "balanceOf",
+ "nameLocation": "888:9:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 956,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 955,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "906:5:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 960,
+ "src": "898:13:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 954,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "898:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "897:15:2"
+ },
+ "returnParameters": {
+ "id": 959,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 958,
+ "mutability": "mutable",
+ "name": "balance",
+ "nameLocation": "944:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 960,
+ "src": "936:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 957,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "936:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "935:17:2"
+ },
+ "scope": 1035,
+ "src": "879:74:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 961,
+ "nodeType": "StructuredDocumentation",
+ "src": "959:131:2",
+ "text": " @dev Returns the owner of the `tokenId` token.\n Requirements:\n - `tokenId` must exist."
+ },
+ "functionSelector": "6352211e",
+ "id": 968,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "ownerOf",
+ "nameLocation": "1104:7:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 964,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 963,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "1120:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 968,
+ "src": "1112:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 962,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1112:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1111:17:2"
+ },
+ "returnParameters": {
+ "id": 967,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 966,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "1160:5:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 968,
+ "src": "1152:13:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 965,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1152:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1151:15:2"
+ },
+ "scope": 1035,
+ "src": "1095:72:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 969,
+ "nodeType": "StructuredDocumentation",
+ "src": "1173:690:2",
+ "text": " @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n are aware of the ERC721 protocol to prevent tokens from being forever locked.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
+ },
+ "functionSelector": "42842e0e",
+ "id": 978,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "safeTransferFrom",
+ "nameLocation": "1877:16:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 976,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 971,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "1911:4:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 978,
+ "src": "1903:12:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 970,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1903:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 973,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "1933:2:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 978,
+ "src": "1925:10:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 972,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1925:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 975,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "1953:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 978,
+ "src": "1945:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 974,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1945:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1893:73:2"
+ },
+ "returnParameters": {
+ "id": 977,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1975:0:2"
+ },
+ "scope": 1035,
+ "src": "1868:108:2",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 979,
+ "nodeType": "StructuredDocumentation",
+ "src": "1982:504:2",
+ "text": " @dev Transfers `tokenId` token from `from` to `to`.\n WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n Emits a {Transfer} event."
+ },
+ "functionSelector": "23b872dd",
+ "id": 988,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "transferFrom",
+ "nameLocation": "2500:12:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 986,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 981,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "2530:4:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 988,
+ "src": "2522:12:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 980,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2522:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 983,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "2552:2:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 988,
+ "src": "2544:10:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 982,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2544:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 985,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "2572:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 988,
+ "src": "2564:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 984,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2564:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2512:73:2"
+ },
+ "returnParameters": {
+ "id": 987,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2594:0:2"
+ },
+ "scope": 1035,
+ "src": "2491:104:2",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 989,
+ "nodeType": "StructuredDocumentation",
+ "src": "2601:452:2",
+ "text": " @dev Gives permission to `to` to transfer `tokenId` token to another account.\n The approval is cleared when the token is transferred.\n Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n Requirements:\n - The caller must own the token or be an approved operator.\n - `tokenId` must exist.\n Emits an {Approval} event."
+ },
+ "functionSelector": "095ea7b3",
+ "id": 996,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "approve",
+ "nameLocation": "3067:7:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 994,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 991,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "3083:2:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 996,
+ "src": "3075:10:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 990,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3075:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 993,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "3095:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 996,
+ "src": "3087:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 992,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3087:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3074:29:2"
+ },
+ "returnParameters": {
+ "id": 995,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3112:0:2"
+ },
+ "scope": 1035,
+ "src": "3058:55:2",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 997,
+ "nodeType": "StructuredDocumentation",
+ "src": "3119:139:2",
+ "text": " @dev Returns the account approved for `tokenId` token.\n Requirements:\n - `tokenId` must exist."
+ },
+ "functionSelector": "081812fc",
+ "id": 1004,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getApproved",
+ "nameLocation": "3272:11:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1000,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 999,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "3292:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1004,
+ "src": "3284:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 998,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "3284:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3283:17:2"
+ },
+ "returnParameters": {
+ "id": 1003,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1002,
+ "mutability": "mutable",
+ "name": "operator",
+ "nameLocation": "3332:8:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1004,
+ "src": "3324:16:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1001,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3324:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3323:18:2"
+ },
+ "scope": 1035,
+ "src": "3263:79:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 1005,
+ "nodeType": "StructuredDocumentation",
+ "src": "3348:309:2",
+ "text": " @dev Approve or remove `operator` as an operator for the caller.\n Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n Requirements:\n - The `operator` cannot be the caller.\n Emits an {ApprovalForAll} event."
+ },
+ "functionSelector": "a22cb465",
+ "id": 1012,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "setApprovalForAll",
+ "nameLocation": "3671:17:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1010,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1007,
+ "mutability": "mutable",
+ "name": "operator",
+ "nameLocation": "3697:8:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1012,
+ "src": "3689:16:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1006,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3689:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1009,
+ "mutability": "mutable",
+ "name": "_approved",
+ "nameLocation": "3712:9:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1012,
+ "src": "3707:14:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1008,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "3707:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3688:34:2"
+ },
+ "returnParameters": {
+ "id": 1011,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "3731:0:2"
+ },
+ "scope": 1035,
+ "src": "3662:70:2",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 1013,
+ "nodeType": "StructuredDocumentation",
+ "src": "3738:138:2",
+ "text": " @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n See {setApprovalForAll}"
+ },
+ "functionSelector": "e985e9c5",
+ "id": 1022,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "isApprovedForAll",
+ "nameLocation": "3890:16:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1018,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1015,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "3915:5:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1022,
+ "src": "3907:13:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1014,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3907:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1017,
+ "mutability": "mutable",
+ "name": "operator",
+ "nameLocation": "3930:8:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1022,
+ "src": "3922:16:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1016,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "3922:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3906:33:2"
+ },
+ "returnParameters": {
+ "id": 1021,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1020,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1022,
+ "src": "3963:4:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 1019,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "3963:4:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "3962:6:2"
+ },
+ "scope": 1035,
+ "src": "3881:88:2",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 1023,
+ "nodeType": "StructuredDocumentation",
+ "src": "3975:556:2",
+ "text": " @dev Safely transfers `tokenId` token from `from` to `to`.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
+ },
+ "functionSelector": "b88d4fde",
+ "id": 1034,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "safeTransferFrom",
+ "nameLocation": "4545:16:2",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1032,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1025,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "4579:4:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1034,
+ "src": "4571:12:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1024,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4571:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1027,
+ "mutability": "mutable",
+ "name": "to",
+ "nameLocation": "4601:2:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1034,
+ "src": "4593:10:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1026,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "4593:7:2",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1029,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "4621:7:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1034,
+ "src": "4613:15:2",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1028,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "4613:7:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1031,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "4653:4:2",
+ "nodeType": "VariableDeclaration",
+ "scope": 1034,
+ "src": "4638:19:2",
+ "stateVariable": false,
+ "storageLocation": "calldata",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_calldata_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1030,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "4638:5:2",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "4561:102:2"
+ },
+ "returnParameters": {
+ "id": 1033,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "4672:0:2"
+ },
+ "scope": 1035,
+ "src": "4536:137:2",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ }
+ ],
+ "scope": 1036,
+ "src": "175:4500:2",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:4643:2"
+ },
+ "compiler": {
+ "name": "solc",
+ "version": "0.8.6+commit.11564f7e.Emscripten.clang"
+ },
+ "networks": {},
+ "schemaVersion": "3.4.3",
+ "updatedAt": "2021-09-07T13:34:26.809Z",
+ "devdoc": {
+ "details": "Required interface of an ERC721 compliant contract.",
+ "events": {
+ "Approval(address,address,uint256)": {
+ "details": "Emitted when `owner` enables `approved` to manage the `tokenId` token."
+ },
+ "ApprovalForAll(address,address,bool)": {
+ "details": "Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."
+ },
+ "Transfer(address,address,uint256)": {
+ "details": "Emitted when `tokenId` token is transferred from `from` to `to`."
+ }
+ },
+ "kind": "dev",
+ "methods": {
+ "approve(address,uint256)": {
+ "details": "Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event."
+ },
+ "balanceOf(address)": {
+ "details": "Returns the number of tokens in ``owner``'s account."
+ },
+ "getApproved(uint256)": {
+ "details": "Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist."
+ },
+ "isApprovedForAll(address,address)": {
+ "details": "Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}"
+ },
+ "ownerOf(uint256)": {
+ "details": "Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist."
+ },
+ "safeTransferFrom(address,address,uint256)": {
+ "details": "Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event."
+ },
+ "safeTransferFrom(address,address,uint256,bytes)": {
+ "details": "Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event."
+ },
+ "setApprovalForAll(address,bool)": {
+ "details": "Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event."
+ },
+ "supportsInterface(bytes4)": {
+ "details": "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."
+ },
+ "transferFrom(address,address,uint256)": {
+ "details": "Transfers `tokenId` token from `from` to `to`. WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event."
+ }
+ },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {},
+ "version": 1
+ }
+}
\ No newline at end of file
diff --git a/build/contracts/IERC721Metadata.json b/build/contracts/IERC721Metadata.json
new file mode 100644
index 0000000..ddb034e
--- /dev/null
+++ b/build/contracts/IERC721Metadata.json
@@ -0,0 +1,992 @@
+{
+ "contractName": "IERC721Metadata",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "approved",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenURI",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"See https://eips.ethereum.org/EIPS/eip-721\",\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"name()\":{\"details\":\"Returns the token collection name.\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"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.\"},\"symbol()\":{\"details\":\"Returns the token collection symbol.\"},\"tokenURI(uint256)\":{\"details\":\"Returns the Uniform Resource Identifier (URI) for `tokenId` token.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"title\":\"ERC-721 Non-Fungible Token Standard, optional metadata extension\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":\"IERC721Metadata\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xf101e8720213560fab41104d53b3cc7ba0456ef3a98455aa7f022391783144a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3e7820bcf567e6892d937c3cb10db263a4042e446799bca602535868d822384e\",\"dweb:/ipfs/QmPG2oeDjKncqsEeyYGjAN7CwAJmMgHterXGGnpzhha4z7\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0xd32fb7f530a914b1083d10a6bed3a586f2451952fec04fe542bcc670a82f7ba5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af63ab940a34687c45f0ad84960b048fc5f49330c92ccb422db7822a444733b9\",\"dweb:/ipfs/QmUShaQEu8HS1GjDnsMJQ8jkZEBrecn6NuDZ3pfjY1gVck\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0xa28007762d9da9db878dd421960c8cb9a10471f47ab5c1b3309bfe48e9e79ff4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://796ab6e88af7bf0e78def0f059310c903af6a312b565344e0ff524a0f26e81c6\",\"dweb:/ipfs/QmcsVgLgzWdor3UnAztUkXKNGcysm1MPneWksF72AvnwBx\"]}},\"version\":1}",
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "immutableReferences": {},
+ "generatedSources": [],
+ "deployedGeneratedSources": [],
+ "sourceMap": "",
+ "deployedSourceMap": "",
+ "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport \"../IERC721.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721Metadata is IERC721 {\n /**\n * @dev Returns the token collection name.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the token collection symbol.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n */\n function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n",
+ "sourcePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
+ "ast": {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
+ "exportedSymbols": {
+ "IERC165": [
+ 1840
+ ],
+ "IERC721": [
+ 1035
+ ],
+ "IERC721Metadata": [
+ 1208
+ ]
+ },
+ "id": 1209,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1183,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:5"
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
+ "file": "../IERC721.sol",
+ "id": 1184,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 1209,
+ "sourceUnit": 1036,
+ "src": "58:24:5",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [
+ {
+ "baseName": {
+ "id": 1186,
+ "name": "IERC721",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1035,
+ "src": "247:7:5"
+ },
+ "id": 1187,
+ "nodeType": "InheritanceSpecifier",
+ "src": "247:7:5"
+ }
+ ],
+ "contractDependencies": [],
+ "contractKind": "interface",
+ "documentation": {
+ "id": 1185,
+ "nodeType": "StructuredDocumentation",
+ "src": "84:133:5",
+ "text": " @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n @dev See https://eips.ethereum.org/EIPS/eip-721"
+ },
+ "fullyImplemented": false,
+ "id": 1208,
+ "linearizedBaseContracts": [
+ 1208,
+ 1035,
+ 1840
+ ],
+ "name": "IERC721Metadata",
+ "nameLocation": "228:15:5",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "documentation": {
+ "id": 1188,
+ "nodeType": "StructuredDocumentation",
+ "src": "261:58:5",
+ "text": " @dev Returns the token collection name."
+ },
+ "functionSelector": "06fdde03",
+ "id": 1193,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "name",
+ "nameLocation": "333:4:5",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1189,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "337:2:5"
+ },
+ "returnParameters": {
+ "id": 1192,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1191,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1193,
+ "src": "363:13:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1190,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "363:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "362:15:5"
+ },
+ "scope": 1208,
+ "src": "324:54:5",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 1194,
+ "nodeType": "StructuredDocumentation",
+ "src": "384:60:5",
+ "text": " @dev Returns the token collection symbol."
+ },
+ "functionSelector": "95d89b41",
+ "id": 1199,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "symbol",
+ "nameLocation": "458:6:5",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1195,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "464:2:5"
+ },
+ "returnParameters": {
+ "id": 1198,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1197,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1199,
+ "src": "490:13:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1196,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "490:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "489:15:5"
+ },
+ "scope": 1208,
+ "src": "449:56:5",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 1200,
+ "nodeType": "StructuredDocumentation",
+ "src": "511:90:5",
+ "text": " @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token."
+ },
+ "functionSelector": "c87b56dd",
+ "id": 1207,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "tokenURI",
+ "nameLocation": "615:8:5",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1203,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1202,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "632:7:5",
+ "nodeType": "VariableDeclaration",
+ "scope": 1207,
+ "src": "624:15:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1201,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "624:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "623:17:5"
+ },
+ "returnParameters": {
+ "id": 1206,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1205,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1207,
+ "src": "664:13:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1204,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "664:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "663:15:5"
+ },
+ "scope": 1208,
+ "src": "606:73:5",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ }
+ ],
+ "scope": 1209,
+ "src": "218:463:5",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:649:5"
+ },
+ "legacyAST": {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
+ "exportedSymbols": {
+ "IERC165": [
+ 1840
+ ],
+ "IERC721": [
+ 1035
+ ],
+ "IERC721Metadata": [
+ 1208
+ ]
+ },
+ "id": 1209,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1183,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:5"
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
+ "file": "../IERC721.sol",
+ "id": 1184,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 1209,
+ "sourceUnit": 1036,
+ "src": "58:24:5",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [
+ {
+ "baseName": {
+ "id": 1186,
+ "name": "IERC721",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1035,
+ "src": "247:7:5"
+ },
+ "id": 1187,
+ "nodeType": "InheritanceSpecifier",
+ "src": "247:7:5"
+ }
+ ],
+ "contractDependencies": [],
+ "contractKind": "interface",
+ "documentation": {
+ "id": 1185,
+ "nodeType": "StructuredDocumentation",
+ "src": "84:133:5",
+ "text": " @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n @dev See https://eips.ethereum.org/EIPS/eip-721"
+ },
+ "fullyImplemented": false,
+ "id": 1208,
+ "linearizedBaseContracts": [
+ 1208,
+ 1035,
+ 1840
+ ],
+ "name": "IERC721Metadata",
+ "nameLocation": "228:15:5",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "documentation": {
+ "id": 1188,
+ "nodeType": "StructuredDocumentation",
+ "src": "261:58:5",
+ "text": " @dev Returns the token collection name."
+ },
+ "functionSelector": "06fdde03",
+ "id": 1193,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "name",
+ "nameLocation": "333:4:5",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1189,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "337:2:5"
+ },
+ "returnParameters": {
+ "id": 1192,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1191,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1193,
+ "src": "363:13:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1190,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "363:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "362:15:5"
+ },
+ "scope": 1208,
+ "src": "324:54:5",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 1194,
+ "nodeType": "StructuredDocumentation",
+ "src": "384:60:5",
+ "text": " @dev Returns the token collection symbol."
+ },
+ "functionSelector": "95d89b41",
+ "id": 1199,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "symbol",
+ "nameLocation": "458:6:5",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1195,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "464:2:5"
+ },
+ "returnParameters": {
+ "id": 1198,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1197,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1199,
+ "src": "490:13:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1196,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "490:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "489:15:5"
+ },
+ "scope": 1208,
+ "src": "449:56:5",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "documentation": {
+ "id": 1200,
+ "nodeType": "StructuredDocumentation",
+ "src": "511:90:5",
+ "text": " @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token."
+ },
+ "functionSelector": "c87b56dd",
+ "id": 1207,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "tokenURI",
+ "nameLocation": "615:8:5",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1203,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1202,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "632:7:5",
+ "nodeType": "VariableDeclaration",
+ "scope": 1207,
+ "src": "624:15:5",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1201,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "624:7:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "623:17:5"
+ },
+ "returnParameters": {
+ "id": 1206,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1205,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1207,
+ "src": "664:13:5",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1204,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "664:6:5",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "663:15:5"
+ },
+ "scope": 1208,
+ "src": "606:73:5",
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ }
+ ],
+ "scope": 1209,
+ "src": "218:463:5",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:649:5"
+ },
+ "compiler": {
+ "name": "solc",
+ "version": "0.8.6+commit.11564f7e.Emscripten.clang"
+ },
+ "networks": {},
+ "schemaVersion": "3.4.3",
+ "updatedAt": "2021-09-07T13:34:26.818Z",
+ "devdoc": {
+ "details": "See https://eips.ethereum.org/EIPS/eip-721",
+ "kind": "dev",
+ "methods": {
+ "approve(address,uint256)": {
+ "details": "Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event."
+ },
+ "balanceOf(address)": {
+ "details": "Returns the number of tokens in ``owner``'s account."
+ },
+ "getApproved(uint256)": {
+ "details": "Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist."
+ },
+ "isApprovedForAll(address,address)": {
+ "details": "Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}"
+ },
+ "name()": {
+ "details": "Returns the token collection name."
+ },
+ "ownerOf(uint256)": {
+ "details": "Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist."
+ },
+ "safeTransferFrom(address,address,uint256)": {
+ "details": "Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event."
+ },
+ "safeTransferFrom(address,address,uint256,bytes)": {
+ "details": "Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event."
+ },
+ "setApprovalForAll(address,bool)": {
+ "details": "Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event."
+ },
+ "supportsInterface(bytes4)": {
+ "details": "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."
+ },
+ "symbol()": {
+ "details": "Returns the token collection symbol."
+ },
+ "tokenURI(uint256)": {
+ "details": "Returns the Uniform Resource Identifier (URI) for `tokenId` token."
+ },
+ "transferFrom(address,address,uint256)": {
+ "details": "Transfers `tokenId` token from `from` to `to`. WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event."
+ }
+ },
+ "title": "ERC-721 Non-Fungible Token Standard, optional metadata extension",
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {},
+ "version": 1
+ }
+}
\ No newline at end of file
diff --git a/build/contracts/IERC721Receiver.json b/build/contracts/IERC721Receiver.json
new file mode 100644
index 0000000..374d287
--- /dev/null
+++ b/build/contracts/IERC721Receiver.json
@@ -0,0 +1,516 @@
+{
+ "contractName": "IERC721Receiver",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "onERC721Received",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "",
+ "type": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for any contract that wants to support safeTransfers from ERC721 asset contracts.\",\"kind\":\"dev\",\"methods\":{\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} by `operator` from `from`, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\"}},\"title\":\"ERC721 token receiver interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":\"IERC721Receiver\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xd9517254724276e2e8de3769183c1f738f445f0095c26fd9b86d3c6687e887b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0e604bcdcd5e5b2fb299ad09769cde6db19d5aa1929d1b5e939234a0f10d7eb8\",\"dweb:/ipfs/Qmd8hXE3GZfBHuWx3RNiYgFW2ci7KvHtib8DiwzJ2dgo9V\"]}},\"version\":1}",
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "immutableReferences": {},
+ "generatedSources": [],
+ "deployedGeneratedSources": [],
+ "sourceMap": "",
+ "deployedSourceMap": "",
+ "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(\n address operator,\n address from,\n uint256 tokenId,\n bytes calldata data\n ) external returns (bytes4);\n}\n",
+ "sourcePath": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol",
+ "ast": {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol",
+ "exportedSymbols": {
+ "IERC721Receiver": [
+ 1053
+ ]
+ },
+ "id": 1054,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1037,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:3"
+ },
+ {
+ "abstract": false,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "interface",
+ "documentation": {
+ "id": 1038,
+ "nodeType": "StructuredDocumentation",
+ "src": "58:152:3",
+ "text": " @title ERC721 token receiver interface\n @dev Interface for any contract that wants to support safeTransfers\n from ERC721 asset contracts."
+ },
+ "fullyImplemented": false,
+ "id": 1053,
+ "linearizedBaseContracts": [
+ 1053
+ ],
+ "name": "IERC721Receiver",
+ "nameLocation": "221:15:3",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "documentation": {
+ "id": 1039,
+ "nodeType": "StructuredDocumentation",
+ "src": "243:485:3",
+ "text": " @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n by `operator` from `from`, this function is called.\n It must return its Solidity selector to confirm the token transfer.\n If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`."
+ },
+ "functionSelector": "150b7a02",
+ "id": 1052,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "onERC721Received",
+ "nameLocation": "742:16:3",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1048,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1041,
+ "mutability": "mutable",
+ "name": "operator",
+ "nameLocation": "776:8:3",
+ "nodeType": "VariableDeclaration",
+ "scope": 1052,
+ "src": "768:16:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1040,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "768:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1043,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "802:4:3",
+ "nodeType": "VariableDeclaration",
+ "scope": 1052,
+ "src": "794:12:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1042,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "794:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1045,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "824:7:3",
+ "nodeType": "VariableDeclaration",
+ "scope": 1052,
+ "src": "816:15:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1044,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "816:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1047,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "856:4:3",
+ "nodeType": "VariableDeclaration",
+ "scope": 1052,
+ "src": "841:19:3",
+ "stateVariable": false,
+ "storageLocation": "calldata",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_calldata_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1046,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "841:5:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "758:108:3"
+ },
+ "returnParameters": {
+ "id": 1051,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1050,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1052,
+ "src": "885:6:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "typeName": {
+ "id": 1049,
+ "name": "bytes4",
+ "nodeType": "ElementaryTypeName",
+ "src": "885:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "884:8:3"
+ },
+ "scope": 1053,
+ "src": "733:160:3",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ }
+ ],
+ "scope": 1054,
+ "src": "211:684:3",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:863:3"
+ },
+ "legacyAST": {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol",
+ "exportedSymbols": {
+ "IERC721Receiver": [
+ 1053
+ ]
+ },
+ "id": 1054,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1037,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:3"
+ },
+ {
+ "abstract": false,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "interface",
+ "documentation": {
+ "id": 1038,
+ "nodeType": "StructuredDocumentation",
+ "src": "58:152:3",
+ "text": " @title ERC721 token receiver interface\n @dev Interface for any contract that wants to support safeTransfers\n from ERC721 asset contracts."
+ },
+ "fullyImplemented": false,
+ "id": 1053,
+ "linearizedBaseContracts": [
+ 1053
+ ],
+ "name": "IERC721Receiver",
+ "nameLocation": "221:15:3",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "documentation": {
+ "id": 1039,
+ "nodeType": "StructuredDocumentation",
+ "src": "243:485:3",
+ "text": " @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n by `operator` from `from`, this function is called.\n It must return its Solidity selector to confirm the token transfer.\n If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`."
+ },
+ "functionSelector": "150b7a02",
+ "id": 1052,
+ "implemented": false,
+ "kind": "function",
+ "modifiers": [],
+ "name": "onERC721Received",
+ "nameLocation": "742:16:3",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1048,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1041,
+ "mutability": "mutable",
+ "name": "operator",
+ "nameLocation": "776:8:3",
+ "nodeType": "VariableDeclaration",
+ "scope": 1052,
+ "src": "768:16:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1040,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "768:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1043,
+ "mutability": "mutable",
+ "name": "from",
+ "nameLocation": "802:4:3",
+ "nodeType": "VariableDeclaration",
+ "scope": 1052,
+ "src": "794:12:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1042,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "794:7:3",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1045,
+ "mutability": "mutable",
+ "name": "tokenId",
+ "nameLocation": "824:7:3",
+ "nodeType": "VariableDeclaration",
+ "scope": 1052,
+ "src": "816:15:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1044,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "816:7:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1047,
+ "mutability": "mutable",
+ "name": "data",
+ "nameLocation": "856:4:3",
+ "nodeType": "VariableDeclaration",
+ "scope": 1052,
+ "src": "841:19:3",
+ "stateVariable": false,
+ "storageLocation": "calldata",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_calldata_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1046,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "841:5:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "758:108:3"
+ },
+ "returnParameters": {
+ "id": 1051,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1050,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1052,
+ "src": "885:6:3",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "typeName": {
+ "id": 1049,
+ "name": "bytes4",
+ "nodeType": "ElementaryTypeName",
+ "src": "885:6:3",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "884:8:3"
+ },
+ "scope": 1053,
+ "src": "733:160:3",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ }
+ ],
+ "scope": 1054,
+ "src": "211:684:3",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:863:3"
+ },
+ "compiler": {
+ "name": "solc",
+ "version": "0.8.6+commit.11564f7e.Emscripten.clang"
+ },
+ "networks": {},
+ "schemaVersion": "3.4.3",
+ "updatedAt": "2021-09-07T13:34:26.813Z",
+ "devdoc": {
+ "details": "Interface for any contract that wants to support safeTransfers from ERC721 asset contracts.",
+ "kind": "dev",
+ "methods": {
+ "onERC721Received(address,address,uint256,bytes)": {
+ "details": "Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} by `operator` from `from`, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`."
+ }
+ },
+ "title": "ERC721 token receiver interface",
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {},
+ "version": 1
+ }
+}
\ No newline at end of file
diff --git a/build/contracts/Migrations.json b/build/contracts/Migrations.json
new file mode 100644
index 0000000..9153581
--- /dev/null
+++ b/build/contracts/Migrations.json
@@ -0,0 +1,2319 @@
+{
+ "contractName": "Migrations",
+ "abi": [
+ {
+ "inputs": [],
+ "name": "last_completed_migration",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "completed",
+ "type": "uint256"
+ }
+ ],
+ "name": "setCompleted",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"last_completed_migration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"completed\",\"type\":\"uint256\"}],\"name\":\"setCompleted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/Migrations.sol\":\"Migrations\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/Migrations.sol\":{\"keccak256\":\"0x7eaedbb1a3e4e0f585d9063393872f88ded247ca3c3c3c8492ea18e7629a6411\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a3eb571cee910095df65a06a1c1d3f89187c72a3c184ef87a7538d9aa39ad07\",\"dweb:/ipfs/QmdqR3vrSSGR49qFGZr49Mb39z7dgD6tSzEDoaqtM31o61\"]}},\"version\":1}",
+ "bytecode": "0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005057600080fd5b50610327806100606000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063445df0ac146100465780638da5cb5b14610064578063fdacd57614610082575b600080fd5b61004e61009e565b60405161005b919061021e565b60405180910390f35b61006c6100a4565b60405161007991906101e3565b60405180910390f35b61009c60048036038101906100979190610175565b6100c8565b005b60015481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014d906101fe565b60405180910390fd5b8060018190555050565b60008135905061016f816102da565b92915050565b60006020828403121561018b5761018a610286565b5b600061019984828501610160565b91505092915050565b6101ab8161024a565b82525050565b60006101be603383610239565b91506101c98261028b565b604082019050919050565b6101dd8161027c565b82525050565b60006020820190506101f860008301846101a2565b92915050565b60006020820190508181036000830152610217816101b1565b9050919050565b600060208201905061023360008301846101d4565b92915050565b600082825260208201905092915050565b60006102558261025c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b7f546869732066756e6374696f6e206973207265737472696374656420746f207460008201527f686520636f6e74726163742773206f776e657200000000000000000000000000602082015250565b6102e38161027c565b81146102ee57600080fd5b5056fea2646970667358221220df76f7122d83e4f5c15417ed72b104ad31587dab5d3f7c99545269620d04f8cb64736f6c63430008060033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063445df0ac146100465780638da5cb5b14610064578063fdacd57614610082575b600080fd5b61004e61009e565b60405161005b919061021e565b60405180910390f35b61006c6100a4565b60405161007991906101e3565b60405180910390f35b61009c60048036038101906100979190610175565b6100c8565b005b60015481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014d906101fe565b60405180910390fd5b8060018190555050565b60008135905061016f816102da565b92915050565b60006020828403121561018b5761018a610286565b5b600061019984828501610160565b91505092915050565b6101ab8161024a565b82525050565b60006101be603383610239565b91506101c98261028b565b604082019050919050565b6101dd8161027c565b82525050565b60006020820190506101f860008301846101a2565b92915050565b60006020820190508181036000830152610217816101b1565b9050919050565b600060208201905061023360008301846101d4565b92915050565b600082825260208201905092915050565b60006102558261025c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b7f546869732066756e6374696f6e206973207265737472696374656420746f207460008201527f686520636f6e74726163742773206f776e657200000000000000000000000000602082015250565b6102e38161027c565b81146102ee57600080fd5b5056fea2646970667358221220df76f7122d83e4f5c15417ed72b104ad31587dab5d3f7c99545269620d04f8cb64736f6c63430008060033",
+ "immutableReferences": {},
+ "generatedSources": [],
+ "deployedGeneratedSources": [
+ {
+ "ast": {
+ "nodeType": "YulBlock",
+ "src": "0:3176:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "59:87:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "69:29:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "91:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldataload",
+ "nodeType": "YulIdentifier",
+ "src": "78:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "78:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "69:5:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "134:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "validator_revert_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "107:26:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "107:33:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "107:33:14"
+ }
+ ]
+ },
+ "name": "abi_decode_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "37:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "45:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "53:5:14",
+ "type": ""
+ }
+ ],
+ "src": "7:139:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "218:263:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "264:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "266:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "266:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "266:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "239:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "248:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "235:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "235:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "260:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "231:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "231:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "228:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "357:117:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "372:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "386:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "376:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "401:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "436:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "447:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "432:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "432:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "456:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "411:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "411:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "401:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "188:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "199:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "211:6:14",
+ "type": ""
+ }
+ ],
+ "src": "152:329:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "552:53:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "569:3:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "592:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "574:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "574:24:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "562:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "562:37:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "562:37:14"
+ }
+ ]
+ },
+ "name": "abi_encode_t_address_to_t_address_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "540:5:14",
+ "type": ""
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "547:3:14",
+ "type": ""
+ }
+ ],
+ "src": "487:118:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "757:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "767:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "833:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "838:2:14",
+ "type": "",
+ "value": "51"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "774:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "774:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "767:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "939:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_f60fe2d9d123295bf92ecf95167f1fa709e374da35e4c083bd39dc2d82acd8b1",
+ "nodeType": "YulIdentifier",
+ "src": "850:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "850:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "850:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "952:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "963:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "968:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "959:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "959:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "952:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_f60fe2d9d123295bf92ecf95167f1fa709e374da35e4c083bd39dc2d82acd8b1_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "745:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "753:3:14",
+ "type": ""
+ }
+ ],
+ "src": "611:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1048:53:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "1065:3:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "1088:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "1070:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1070:24:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "1058:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1058:37:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "1058:37:14"
+ }
+ ]
+ },
+ "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "1036:5:14",
+ "type": ""
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "1043:3:14",
+ "type": ""
+ }
+ ],
+ "src": "983:118:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1205:124:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "1215:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "1227:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1238:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "1223:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1223:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "1215:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "1295:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "1308:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1319:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "1304:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1304:17:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_address_to_t_address_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "1251:43:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1251:71:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "1251:71:14"
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "1177:9:14",
+ "type": ""
+ },
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "1189:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "1200:4:14",
+ "type": ""
+ }
+ ],
+ "src": "1107:222:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1506:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "1516:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "1528:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1539:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "1524:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1524:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "1516:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "1563:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1574:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "1559:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1559:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "1582:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "1588:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "1578:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1578:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "1552:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1552:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "1552:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "1608:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "1742:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_f60fe2d9d123295bf92ecf95167f1fa709e374da35e4c083bd39dc2d82acd8b1_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "1616:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1616:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "1608:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_f60fe2d9d123295bf92ecf95167f1fa709e374da35e4c083bd39dc2d82acd8b1__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "1486:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "1501:4:14",
+ "type": ""
+ }
+ ],
+ "src": "1335:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1858:124:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "1868:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "1880:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1891:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "1876:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1876:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "1868:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "1948:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "1961:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1972:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "1957:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1957:17:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "1904:43:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1904:71:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "1904:71:14"
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "1830:9:14",
+ "type": ""
+ },
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "1842:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "1853:4:14",
+ "type": ""
+ }
+ ],
+ "src": "1760:222:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2028:35:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "2038:19:14",
+ "value": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2054:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "2048:5:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2048:9:14"
+ },
+ "variableNames": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "2038:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "allocate_unbounded",
+ "nodeType": "YulFunctionDefinition",
+ "returnVariables": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "2021:6:14",
+ "type": ""
+ }
+ ],
+ "src": "1988:75:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2165:73:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "2182:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "2187:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "2175:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2175:19:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "2175:19:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "2203:29:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "2222:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2227:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2218:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2218:14:14"
+ },
+ "variableNames": [
+ {
+ "name": "updated_pos",
+ "nodeType": "YulIdentifier",
+ "src": "2203:11:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "2137:3:14",
+ "type": ""
+ },
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "2142:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "updated_pos",
+ "nodeType": "YulTypedName",
+ "src": "2153:11:14",
+ "type": ""
+ }
+ ],
+ "src": "2069:169:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2289:51:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "2299:35:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "2328:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint160",
+ "nodeType": "YulIdentifier",
+ "src": "2310:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2310:24:14"
+ },
+ "variableNames": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulIdentifier",
+ "src": "2299:7:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "cleanup_t_address",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "2271:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulTypedName",
+ "src": "2281:7:14",
+ "type": ""
+ }
+ ],
+ "src": "2244:96:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2391:81:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "2401:65:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "2416:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2423:42:14",
+ "type": "",
+ "value": "0xffffffffffffffffffffffffffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "and",
+ "nodeType": "YulIdentifier",
+ "src": "2412:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2412:54:14"
+ },
+ "variableNames": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulIdentifier",
+ "src": "2401:7:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "cleanup_t_uint160",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "2373:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulTypedName",
+ "src": "2383:7:14",
+ "type": ""
+ }
+ ],
+ "src": "2346:126:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2523:32:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "2533:16:14",
+ "value": {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "2544:5:14"
+ },
+ "variableNames": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulIdentifier",
+ "src": "2533:7:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "2505:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulTypedName",
+ "src": "2515:7:14",
+ "type": ""
+ }
+ ],
+ "src": "2478:77:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2650:28:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2667:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2670:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "2660:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2660:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "2660:12:14"
+ }
+ ]
+ },
+ "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
+ "nodeType": "YulFunctionDefinition",
+ "src": "2561:117:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2773:28:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2790:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2793:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "2783:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2783:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "2783:12:14"
+ }
+ ]
+ },
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulFunctionDefinition",
+ "src": "2684:117:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2913:132:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "2935:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2943:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2931:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2931:14:14"
+ },
+ {
+ "hexValue": "546869732066756e6374696f6e206973207265737472696374656420746f2074",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "2947:34:14",
+ "type": "",
+ "value": "This function is restricted to t"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "2924:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2924:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "2924:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "3003:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3011:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2999:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2999:15:14"
+ },
+ {
+ "hexValue": "686520636f6e74726163742773206f776e6572",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "3016:21:14",
+ "type": "",
+ "value": "he contract's owner"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "2992:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2992:46:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "2992:46:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_f60fe2d9d123295bf92ecf95167f1fa709e374da35e4c083bd39dc2d82acd8b1",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "2905:6:14",
+ "type": ""
+ }
+ ],
+ "src": "2807:238:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3094:79:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3151:16:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3160:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3163:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "3153:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3153:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3153:12:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "3117:5:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "3142:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "3124:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3124:24:14"
+ }
+ ],
+ "functionName": {
+ "name": "eq",
+ "nodeType": "YulIdentifier",
+ "src": "3114:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3114:35:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "3107:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3107:43:14"
+ },
+ "nodeType": "YulIf",
+ "src": "3104:2:14"
+ }
+ ]
+ },
+ "name": "validator_revert_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "3087:5:14",
+ "type": ""
+ }
+ ],
+ "src": "3051:122:14"
+ }
+ ]
+ },
+ "contents": "{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_t_stringliteral_f60fe2d9d123295bf92ecf95167f1fa709e374da35e4c083bd39dc2d82acd8b1_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 51)\n store_literal_in_memory_f60fe2d9d123295bf92ecf95167f1fa709e374da35e4c083bd39dc2d82acd8b1(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_encode_tuple_t_stringliteral_f60fe2d9d123295bf92ecf95167f1fa709e374da35e4c083bd39dc2d82acd8b1__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_f60fe2d9d123295bf92ecf95167f1fa709e374da35e4c083bd39dc2d82acd8b1_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function store_literal_in_memory_f60fe2d9d123295bf92ecf95167f1fa709e374da35e4c083bd39dc2d82acd8b1(memPtr) {\n\n mstore(add(memPtr, 0), \"This function is restricted to t\")\n\n mstore(add(memPtr, 32), \"he contract's owner\")\n\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n",
+ "id": 14,
+ "language": "Yul",
+ "name": "#utility.yul"
+ }
+ ],
+ "sourceMap": "66:352:12:-:0;;;113:10;90:33;;;;;;;;;;;;;;;;;;;;66:352;;;;;;;;;;;;;;;;",
+ "deployedSourceMap": "66:352:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;127:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;90:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;313:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;127:36;;;;:::o;90:33::-;;;;;;;;;;;;:::o;313:103::-;225:5;;;;;;;;;;211:19;;:10;:19;;;196:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;402:9:::1;375:24;:36;;;;313:103:::0;:::o;7:139:14:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:329::-;211:6;260:2;248:9;239:7;235:23;231:32;228:2;;;266:79;;:::i;:::-;228:2;386:1;411:53;456:7;447:6;436:9;432:22;411:53;:::i;:::-;401:63;;357:117;218:263;;;;:::o;487:118::-;574:24;592:5;574:24;:::i;:::-;569:3;562:37;552:53;;:::o;611:366::-;753:3;774:67;838:2;833:3;774:67;:::i;:::-;767:74;;850:93;939:3;850:93;:::i;:::-;968:2;963:3;959:12;952:19;;757:220;;;:::o;983:118::-;1070:24;1088:5;1070:24;:::i;:::-;1065:3;1058:37;1048:53;;:::o;1107:222::-;1200:4;1238:2;1227:9;1223:18;1215:26;;1251:71;1319:1;1308:9;1304:17;1295:6;1251:71;:::i;:::-;1205:124;;;;:::o;1335:419::-;1501:4;1539:2;1528:9;1524:18;1516:26;;1588:9;1582:4;1578:20;1574:1;1563:9;1559:17;1552:47;1616:131;1742:4;1616:131;:::i;:::-;1608:139;;1506:248;;;:::o;1760:222::-;1853:4;1891:2;1880:9;1876:18;1868:26;;1904:71;1972:1;1961:9;1957:17;1948:6;1904:71;:::i;:::-;1858:124;;;;:::o;2069:169::-;2153:11;2187:6;2182:3;2175:19;2227:4;2222:3;2218:14;2203:29;;2165:73;;;;:::o;2244:96::-;2281:7;2310:24;2328:5;2310:24;:::i;:::-;2299:35;;2289:51;;;:::o;2346:126::-;2383:7;2423:42;2416:5;2412:54;2401:65;;2391:81;;;:::o;2478:77::-;2515:7;2544:5;2533:16;;2523:32;;;:::o;2684:117::-;2793:1;2790;2783:12;2807:238;2947:34;2943:1;2935:6;2931:14;2924:58;3016:21;3011:2;3003:6;2999:15;2992:46;2913:132;:::o;3051:122::-;3124:24;3142:5;3124:24;:::i;:::-;3117:5;3114:35;3104:2;;3163:1;3160;3153:12;3104:2;3094:79;:::o",
+ "source": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\ncontract Migrations {\n address public owner = msg.sender;\n uint public last_completed_migration;\n\n modifier restricted() {\n require(\n msg.sender == owner,\n \"This function is restricted to the contract's owner\"\n );\n _;\n }\n\n function setCompleted(uint completed) public restricted {\n last_completed_migration = completed;\n }\n}\n",
+ "sourcePath": "/home/uzairbangee/Development/Blockchain/FirstNFT/contracts/Migrations.sol",
+ "ast": {
+ "absolutePath": "project:/contracts/Migrations.sol",
+ "exportedSymbols": {
+ "Migrations": [
+ 1873
+ ]
+ },
+ "id": 1874,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1842,
+ "literals": [
+ "solidity",
+ ">=",
+ "0.4",
+ ".22",
+ "<",
+ "0.9",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "32:32:12"
+ },
+ {
+ "abstract": false,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "fullyImplemented": true,
+ "id": 1873,
+ "linearizedBaseContracts": [
+ 1873
+ ],
+ "name": "Migrations",
+ "nameLocation": "75:10:12",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "constant": false,
+ "functionSelector": "8da5cb5b",
+ "id": 1846,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "105:5:12",
+ "nodeType": "VariableDeclaration",
+ "scope": 1873,
+ "src": "90:33:12",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1843,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "90:7:12",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": {
+ "expression": {
+ "id": 1844,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967281,
+ "src": "113:3:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 1845,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "src": "113:10:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "functionSelector": "445df0ac",
+ "id": 1848,
+ "mutability": "mutable",
+ "name": "last_completed_migration",
+ "nameLocation": "139:24:12",
+ "nodeType": "VariableDeclaration",
+ "scope": 1873,
+ "src": "127:36:12",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1847,
+ "name": "uint",
+ "nodeType": "ElementaryTypeName",
+ "src": "127:4:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 1859,
+ "nodeType": "Block",
+ "src": "190:119:12",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 1854,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "id": 1851,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967281,
+ "src": "211:3:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 1852,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "src": "211:10:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "id": 1853,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1846,
+ "src": "225:5:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "211:19:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "546869732066756e6374696f6e206973207265737472696374656420746f2074686520636f6e74726163742773206f776e6572",
+ "id": 1855,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "238:53:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_f60fe2d9d123295bf92ecf95167f1fa709e374da35e4c083bd39dc2d82acd8b1",
+ "typeString": "literal_string \"This function is restricted to the contract's owner\""
+ },
+ "value": "This function is restricted to the contract's owner"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_f60fe2d9d123295bf92ecf95167f1fa709e374da35e4c083bd39dc2d82acd8b1",
+ "typeString": "literal_string \"This function is restricted to the contract's owner\""
+ }
+ ],
+ "id": 1850,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "196:7:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1856,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "196:101:12",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1857,
+ "nodeType": "ExpressionStatement",
+ "src": "196:101:12"
+ },
+ {
+ "id": 1858,
+ "nodeType": "PlaceholderStatement",
+ "src": "303:1:12"
+ }
+ ]
+ },
+ "id": 1860,
+ "name": "restricted",
+ "nameLocation": "177:10:12",
+ "nodeType": "ModifierDefinition",
+ "parameters": {
+ "id": 1849,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "187:2:12"
+ },
+ "src": "168:141:12",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1871,
+ "nodeType": "Block",
+ "src": "369:47:12",
+ "statements": [
+ {
+ "expression": {
+ "id": 1869,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 1867,
+ "name": "last_completed_migration",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1848,
+ "src": "375:24:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 1868,
+ "name": "completed",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1862,
+ "src": "402:9:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "375:36:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1870,
+ "nodeType": "ExpressionStatement",
+ "src": "375:36:12"
+ }
+ ]
+ },
+ "functionSelector": "fdacd576",
+ "id": 1872,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "id": 1865,
+ "kind": "modifierInvocation",
+ "modifierName": {
+ "id": 1864,
+ "name": "restricted",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1860,
+ "src": "358:10:12"
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "358:10:12"
+ }
+ ],
+ "name": "setCompleted",
+ "nameLocation": "322:12:12",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1863,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1862,
+ "mutability": "mutable",
+ "name": "completed",
+ "nameLocation": "340:9:12",
+ "nodeType": "VariableDeclaration",
+ "scope": 1872,
+ "src": "335:14:12",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1861,
+ "name": "uint",
+ "nodeType": "ElementaryTypeName",
+ "src": "335:4:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "334:16:12"
+ },
+ "returnParameters": {
+ "id": 1866,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "369:0:12"
+ },
+ "scope": 1873,
+ "src": "313:103:12",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ }
+ ],
+ "scope": 1874,
+ "src": "66:352:12",
+ "usedErrors": []
+ }
+ ],
+ "src": "32:387:12"
+ },
+ "legacyAST": {
+ "absolutePath": "project:/contracts/Migrations.sol",
+ "exportedSymbols": {
+ "Migrations": [
+ 1873
+ ]
+ },
+ "id": 1874,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1842,
+ "literals": [
+ "solidity",
+ ">=",
+ "0.4",
+ ".22",
+ "<",
+ "0.9",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "32:32:12"
+ },
+ {
+ "abstract": false,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "fullyImplemented": true,
+ "id": 1873,
+ "linearizedBaseContracts": [
+ 1873
+ ],
+ "name": "Migrations",
+ "nameLocation": "75:10:12",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "constant": false,
+ "functionSelector": "8da5cb5b",
+ "id": 1846,
+ "mutability": "mutable",
+ "name": "owner",
+ "nameLocation": "105:5:12",
+ "nodeType": "VariableDeclaration",
+ "scope": 1873,
+ "src": "90:33:12",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1843,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "90:7:12",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "value": {
+ "expression": {
+ "id": 1844,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967281,
+ "src": "113:3:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 1845,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "src": "113:10:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "public"
+ },
+ {
+ "constant": false,
+ "functionSelector": "445df0ac",
+ "id": 1848,
+ "mutability": "mutable",
+ "name": "last_completed_migration",
+ "nameLocation": "139:24:12",
+ "nodeType": "VariableDeclaration",
+ "scope": 1873,
+ "src": "127:36:12",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1847,
+ "name": "uint",
+ "nodeType": "ElementaryTypeName",
+ "src": "127:4:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 1859,
+ "nodeType": "Block",
+ "src": "190:119:12",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 1854,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "id": 1851,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 4294967281,
+ "src": "211:3:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 1852,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "src": "211:10:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "id": 1853,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1846,
+ "src": "225:5:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "211:19:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "546869732066756e6374696f6e206973207265737472696374656420746f2074686520636f6e74726163742773206f776e6572",
+ "id": 1855,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "238:53:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_f60fe2d9d123295bf92ecf95167f1fa709e374da35e4c083bd39dc2d82acd8b1",
+ "typeString": "literal_string \"This function is restricted to the contract's owner\""
+ },
+ "value": "This function is restricted to the contract's owner"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_f60fe2d9d123295bf92ecf95167f1fa709e374da35e4c083bd39dc2d82acd8b1",
+ "typeString": "literal_string \"This function is restricted to the contract's owner\""
+ }
+ ],
+ "id": 1850,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "196:7:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1856,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "196:101:12",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1857,
+ "nodeType": "ExpressionStatement",
+ "src": "196:101:12"
+ },
+ {
+ "id": 1858,
+ "nodeType": "PlaceholderStatement",
+ "src": "303:1:12"
+ }
+ ]
+ },
+ "id": 1860,
+ "name": "restricted",
+ "nameLocation": "177:10:12",
+ "nodeType": "ModifierDefinition",
+ "parameters": {
+ "id": 1849,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "187:2:12"
+ },
+ "src": "168:141:12",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1871,
+ "nodeType": "Block",
+ "src": "369:47:12",
+ "statements": [
+ {
+ "expression": {
+ "id": 1869,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 1867,
+ "name": "last_completed_migration",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1848,
+ "src": "375:24:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 1868,
+ "name": "completed",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1862,
+ "src": "402:9:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "375:36:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1870,
+ "nodeType": "ExpressionStatement",
+ "src": "375:36:12"
+ }
+ ]
+ },
+ "functionSelector": "fdacd576",
+ "id": 1872,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "id": 1865,
+ "kind": "modifierInvocation",
+ "modifierName": {
+ "id": 1864,
+ "name": "restricted",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1860,
+ "src": "358:10:12"
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "358:10:12"
+ }
+ ],
+ "name": "setCompleted",
+ "nameLocation": "322:12:12",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1863,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1862,
+ "mutability": "mutable",
+ "name": "completed",
+ "nameLocation": "340:9:12",
+ "nodeType": "VariableDeclaration",
+ "scope": 1872,
+ "src": "335:14:12",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1861,
+ "name": "uint",
+ "nodeType": "ElementaryTypeName",
+ "src": "335:4:12",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "334:16:12"
+ },
+ "returnParameters": {
+ "id": 1866,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "369:0:12"
+ },
+ "scope": 1873,
+ "src": "313:103:12",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ }
+ ],
+ "scope": 1874,
+ "src": "66:352:12",
+ "usedErrors": []
+ }
+ ],
+ "src": "32:387:12"
+ },
+ "compiler": {
+ "name": "solc",
+ "version": "0.8.6+commit.11564f7e.Emscripten.clang"
+ },
+ "networks": {},
+ "schemaVersion": "3.4.3",
+ "updatedAt": "2021-09-07T13:34:26.838Z",
+ "devdoc": {
+ "kind": "dev",
+ "methods": {},
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {},
+ "version": 1
+ }
+}
\ No newline at end of file
diff --git a/build/contracts/Ownable.json b/build/contracts/Ownable.json
new file mode 100644
index 0000000..98914c5
--- /dev/null
+++ b/build/contracts/Ownable.json
@@ -0,0 +1,2540 @@
+{
+ "contractName": "Ownable",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "previousOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "OwnershipTransferred",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "renounceOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"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.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"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.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x6bb804a310218875e89d12c053e94a13a4607cdf7cc2052f3e52bd32a0dc50a1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2ebbbe6d0011175bd9e7268b83de3f9c2f9d8d4cbfbaef12aff977d7d727163\",\"dweb:/ipfs/Qmd5c7Vxtis9wzkDNhxwc6A2QT5H9xn9kfjhx7qx44vpro\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x90565a39ae45c80f0468dc96c7b20d0afc3055f344c8203a0c9258239f350b9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26e8b38a7ac8e7b4463af00cf7fff1bf48ae9875765bf4f7751e100124d0bc8c\",\"dweb:/ipfs/QmWcsmkVr24xmmjfnBQZoemFniXjj3vwT78Cz6uqZW1Hux\"]}},\"version\":1}",
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "immutableReferences": {},
+ "generatedSources": [],
+ "deployedGeneratedSources": [],
+ "sourceMap": "",
+ "deployedSourceMap": "",
+ "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor() {\n _setOwner(_msgSender());\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _setOwner(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _setOwner(newOwner);\n }\n\n function _setOwner(address newOwner) private {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n",
+ "sourcePath": "@openzeppelin/contracts/access/Ownable.sol",
+ "ast": {
+ "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
+ "exportedSymbols": {
+ "Context": [
+ 1527
+ ],
+ "Ownable": [
+ 103
+ ]
+ },
+ "id": 104,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:0"
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
+ "file": "../utils/Context.sol",
+ "id": 2,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 104,
+ "sourceUnit": 1528,
+ "src": "58:30:0",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "abstract": true,
+ "baseContracts": [
+ {
+ "baseName": {
+ "id": 4,
+ "name": "Context",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1527,
+ "src": "614:7:0"
+ },
+ "id": 5,
+ "nodeType": "InheritanceSpecifier",
+ "src": "614:7:0"
+ }
+ ],
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 3,
+ "nodeType": "StructuredDocumentation",
+ "src": "90:494:0",
+ "text": " @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."
+ },
+ "fullyImplemented": true,
+ "id": 103,
+ "linearizedBaseContracts": [
+ 103,
+ 1527
+ ],
+ "name": "Ownable",
+ "nameLocation": "603:7:0",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "constant": false,
+ "id": 7,
+ "mutability": "mutable",
+ "name": "_owner",
+ "nameLocation": "644:6:0",
+ "nodeType": "VariableDeclaration",
+ "scope": 103,
+ "src": "628:22:0",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "628:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "anonymous": false,
+ "id": 13,
+ "name": "OwnershipTransferred",
+ "nameLocation": "663:20:0",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 12,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 9,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "previousOwner",
+ "nameLocation": "700:13:0",
+ "nodeType": "VariableDeclaration",
+ "scope": 13,
+ "src": "684:29:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "684:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 11,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "newOwner",
+ "nameLocation": "731:8:0",
+ "nodeType": "VariableDeclaration",
+ "scope": 13,
+ "src": "715:24:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 10,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "715:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "683:57:0"
+ },
+ "src": "657:84:0"
+ },
+ {
+ "body": {
+ "id": 22,
+ "nodeType": "Block",
+ "src": "857:40:0",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 18,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "877:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 19,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "877:12:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 17,
+ "name": "_setOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 102,
+ "src": "867:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
+ "typeString": "function (address)"
+ }
+ },
+ "id": 20,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "867:23:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 21,
+ "nodeType": "ExpressionStatement",
+ "src": "867:23:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 14,
+ "nodeType": "StructuredDocumentation",
+ "src": "747:91:0",
+ "text": " @dev Initializes the contract setting the deployer as the initial owner."
+ },
+ "id": 23,
+ "implemented": true,
+ "kind": "constructor",
+ "modifiers": [],
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 15,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "854:2:0"
+ },
+ "returnParameters": {
+ "id": 16,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "857:0:0"
+ },
+ "scope": 103,
+ "src": "843:54:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 31,
+ "nodeType": "Block",
+ "src": "1028:30:0",
+ "statements": [
+ {
+ "expression": {
+ "id": 29,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7,
+ "src": "1045:6:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 28,
+ "id": 30,
+ "nodeType": "Return",
+ "src": "1038:13:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 24,
+ "nodeType": "StructuredDocumentation",
+ "src": "903:65:0",
+ "text": " @dev Returns the address of the current owner."
+ },
+ "functionSelector": "8da5cb5b",
+ "id": 32,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "owner",
+ "nameLocation": "982:5:0",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 25,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "987:2:0"
+ },
+ "returnParameters": {
+ "id": 28,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 27,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 32,
+ "src": "1019:7:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 26,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1019:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1018:9:0"
+ },
+ "scope": 103,
+ "src": "973:85:0",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 45,
+ "nodeType": "Block",
+ "src": "1167:96:0",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 40,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 36,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 32,
+ "src": "1185:5:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 37,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1185:7:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 38,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "1196:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 39,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1196:12:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "1185:23:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
+ "id": 41,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1210:34:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
+ "typeString": "literal_string \"Ownable: caller is not the owner\""
+ },
+ "value": "Ownable: caller is not the owner"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
+ "typeString": "literal_string \"Ownable: caller is not the owner\""
+ }
+ ],
+ "id": 35,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "1177:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 42,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1177:68:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 43,
+ "nodeType": "ExpressionStatement",
+ "src": "1177:68:0"
+ },
+ {
+ "id": 44,
+ "nodeType": "PlaceholderStatement",
+ "src": "1255:1:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 33,
+ "nodeType": "StructuredDocumentation",
+ "src": "1064:77:0",
+ "text": " @dev Throws if called by any account other than the owner."
+ },
+ "id": 46,
+ "name": "onlyOwner",
+ "nameLocation": "1155:9:0",
+ "nodeType": "ModifierDefinition",
+ "parameters": {
+ "id": 34,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1164:2:0"
+ },
+ "src": "1146:117:0",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 59,
+ "nodeType": "Block",
+ "src": "1659:38:0",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 55,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1687:1:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 54,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1679:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 53,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1679:7:0",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 56,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1679:10:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 52,
+ "name": "_setOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 102,
+ "src": "1669:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
+ "typeString": "function (address)"
+ }
+ },
+ "id": 57,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1669:21:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 58,
+ "nodeType": "ExpressionStatement",
+ "src": "1669:21:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 47,
+ "nodeType": "StructuredDocumentation",
+ "src": "1269:331:0",
+ "text": " @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner."
+ },
+ "functionSelector": "715018a6",
+ "id": 60,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "id": 50,
+ "kind": "modifierInvocation",
+ "modifierName": {
+ "id": 49,
+ "name": "onlyOwner",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 46,
+ "src": "1649:9:0"
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "1649:9:0"
+ }
+ ],
+ "name": "renounceOwnership",
+ "nameLocation": "1614:17:0",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 48,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1631:2:0"
+ },
+ "returnParameters": {
+ "id": 51,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1659:0:0"
+ },
+ "scope": 103,
+ "src": "1605:92:0",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 82,
+ "nodeType": "Block",
+ "src": "1916:119:0",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 74,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 69,
+ "name": "newOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 63,
+ "src": "1934:8:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 72,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1954:1:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 71,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1946:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 70,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1946:7:0",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 73,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1946:10:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "1934:22:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373",
+ "id": 75,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1958:40:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe",
+ "typeString": "literal_string \"Ownable: new owner is the zero address\""
+ },
+ "value": "Ownable: new owner is the zero address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe",
+ "typeString": "literal_string \"Ownable: new owner is the zero address\""
+ }
+ ],
+ "id": 68,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "1926:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 76,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1926:73:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 77,
+ "nodeType": "ExpressionStatement",
+ "src": "1926:73:0"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 79,
+ "name": "newOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 63,
+ "src": "2019:8:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 78,
+ "name": "_setOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 102,
+ "src": "2009:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
+ "typeString": "function (address)"
+ }
+ },
+ "id": 80,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2009:19:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 81,
+ "nodeType": "ExpressionStatement",
+ "src": "2009:19:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 61,
+ "nodeType": "StructuredDocumentation",
+ "src": "1703:138:0",
+ "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."
+ },
+ "functionSelector": "f2fde38b",
+ "id": 83,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "id": 66,
+ "kind": "modifierInvocation",
+ "modifierName": {
+ "id": 65,
+ "name": "onlyOwner",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 46,
+ "src": "1906:9:0"
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "1906:9:0"
+ }
+ ],
+ "name": "transferOwnership",
+ "nameLocation": "1855:17:0",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 64,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 63,
+ "mutability": "mutable",
+ "name": "newOwner",
+ "nameLocation": "1881:8:0",
+ "nodeType": "VariableDeclaration",
+ "scope": 83,
+ "src": "1873:16:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 62,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1873:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1872:18:0"
+ },
+ "returnParameters": {
+ "id": 67,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1916:0:0"
+ },
+ "scope": 103,
+ "src": "1846:189:0",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 101,
+ "nodeType": "Block",
+ "src": "2086:124:0",
+ "statements": [
+ {
+ "assignments": [
+ 89
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 89,
+ "mutability": "mutable",
+ "name": "oldOwner",
+ "nameLocation": "2104:8:0",
+ "nodeType": "VariableDeclaration",
+ "scope": 101,
+ "src": "2096:16:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 88,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2096:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 91,
+ "initialValue": {
+ "id": 90,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7,
+ "src": "2115:6:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "2096:25:0"
+ },
+ {
+ "expression": {
+ "id": 94,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 92,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7,
+ "src": "2131:6:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 93,
+ "name": "newOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 85,
+ "src": "2140:8:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "2131:17:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 95,
+ "nodeType": "ExpressionStatement",
+ "src": "2131:17:0"
+ },
+ {
+ "eventCall": {
+ "arguments": [
+ {
+ "id": 97,
+ "name": "oldOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 89,
+ "src": "2184:8:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 98,
+ "name": "newOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 85,
+ "src": "2194:8:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 96,
+ "name": "OwnershipTransferred",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13,
+ "src": "2163:20:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
+ "typeString": "function (address,address)"
+ }
+ },
+ "id": 99,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2163:40:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 100,
+ "nodeType": "EmitStatement",
+ "src": "2158:45:0"
+ }
+ ]
+ },
+ "id": 102,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_setOwner",
+ "nameLocation": "2050:9:0",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 86,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 85,
+ "mutability": "mutable",
+ "name": "newOwner",
+ "nameLocation": "2068:8:0",
+ "nodeType": "VariableDeclaration",
+ "scope": 102,
+ "src": "2060:16:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 84,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2060:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2059:18:0"
+ },
+ "returnParameters": {
+ "id": 87,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2086:0:0"
+ },
+ "scope": 103,
+ "src": "2041:169:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "private"
+ }
+ ],
+ "scope": 104,
+ "src": "585:1627:0",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:2180:0"
+ },
+ "legacyAST": {
+ "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
+ "exportedSymbols": {
+ "Context": [
+ 1527
+ ],
+ "Ownable": [
+ 103
+ ]
+ },
+ "id": 104,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:0"
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
+ "file": "../utils/Context.sol",
+ "id": 2,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 104,
+ "sourceUnit": 1528,
+ "src": "58:30:0",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "abstract": true,
+ "baseContracts": [
+ {
+ "baseName": {
+ "id": 4,
+ "name": "Context",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1527,
+ "src": "614:7:0"
+ },
+ "id": 5,
+ "nodeType": "InheritanceSpecifier",
+ "src": "614:7:0"
+ }
+ ],
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 3,
+ "nodeType": "StructuredDocumentation",
+ "src": "90:494:0",
+ "text": " @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."
+ },
+ "fullyImplemented": true,
+ "id": 103,
+ "linearizedBaseContracts": [
+ 103,
+ 1527
+ ],
+ "name": "Ownable",
+ "nameLocation": "603:7:0",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "constant": false,
+ "id": 7,
+ "mutability": "mutable",
+ "name": "_owner",
+ "nameLocation": "644:6:0",
+ "nodeType": "VariableDeclaration",
+ "scope": 103,
+ "src": "628:22:0",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 6,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "628:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "anonymous": false,
+ "id": 13,
+ "name": "OwnershipTransferred",
+ "nameLocation": "663:20:0",
+ "nodeType": "EventDefinition",
+ "parameters": {
+ "id": 12,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 9,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "previousOwner",
+ "nameLocation": "700:13:0",
+ "nodeType": "VariableDeclaration",
+ "scope": 13,
+ "src": "684:29:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 8,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "684:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 11,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "newOwner",
+ "nameLocation": "731:8:0",
+ "nodeType": "VariableDeclaration",
+ "scope": 13,
+ "src": "715:24:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 10,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "715:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "683:57:0"
+ },
+ "src": "657:84:0"
+ },
+ {
+ "body": {
+ "id": 22,
+ "nodeType": "Block",
+ "src": "857:40:0",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 18,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "877:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 19,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "877:12:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 17,
+ "name": "_setOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 102,
+ "src": "867:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
+ "typeString": "function (address)"
+ }
+ },
+ "id": 20,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "867:23:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 21,
+ "nodeType": "ExpressionStatement",
+ "src": "867:23:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 14,
+ "nodeType": "StructuredDocumentation",
+ "src": "747:91:0",
+ "text": " @dev Initializes the contract setting the deployer as the initial owner."
+ },
+ "id": 23,
+ "implemented": true,
+ "kind": "constructor",
+ "modifiers": [],
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 15,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "854:2:0"
+ },
+ "returnParameters": {
+ "id": 16,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "857:0:0"
+ },
+ "scope": 103,
+ "src": "843:54:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 31,
+ "nodeType": "Block",
+ "src": "1028:30:0",
+ "statements": [
+ {
+ "expression": {
+ "id": 29,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7,
+ "src": "1045:6:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 28,
+ "id": 30,
+ "nodeType": "Return",
+ "src": "1038:13:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 24,
+ "nodeType": "StructuredDocumentation",
+ "src": "903:65:0",
+ "text": " @dev Returns the address of the current owner."
+ },
+ "functionSelector": "8da5cb5b",
+ "id": 32,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "owner",
+ "nameLocation": "982:5:0",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 25,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "987:2:0"
+ },
+ "returnParameters": {
+ "id": 28,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 27,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 32,
+ "src": "1019:7:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 26,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1019:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1018:9:0"
+ },
+ "scope": 103,
+ "src": "973:85:0",
+ "stateMutability": "view",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 45,
+ "nodeType": "Block",
+ "src": "1167:96:0",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 40,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 36,
+ "name": "owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 32,
+ "src": "1185:5:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 37,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1185:7:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "id": 38,
+ "name": "_msgSender",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1517,
+ "src": "1196:10:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
+ "typeString": "function () view returns (address)"
+ }
+ },
+ "id": 39,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1196:12:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "1185:23:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
+ "id": 41,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1210:34:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
+ "typeString": "literal_string \"Ownable: caller is not the owner\""
+ },
+ "value": "Ownable: caller is not the owner"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
+ "typeString": "literal_string \"Ownable: caller is not the owner\""
+ }
+ ],
+ "id": 35,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "1177:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 42,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1177:68:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 43,
+ "nodeType": "ExpressionStatement",
+ "src": "1177:68:0"
+ },
+ {
+ "id": 44,
+ "nodeType": "PlaceholderStatement",
+ "src": "1255:1:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 33,
+ "nodeType": "StructuredDocumentation",
+ "src": "1064:77:0",
+ "text": " @dev Throws if called by any account other than the owner."
+ },
+ "id": 46,
+ "name": "onlyOwner",
+ "nameLocation": "1155:9:0",
+ "nodeType": "ModifierDefinition",
+ "parameters": {
+ "id": 34,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1164:2:0"
+ },
+ "src": "1146:117:0",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 59,
+ "nodeType": "Block",
+ "src": "1659:38:0",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 55,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1687:1:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 54,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1679:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 53,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1679:7:0",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 56,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1679:10:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 52,
+ "name": "_setOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 102,
+ "src": "1669:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
+ "typeString": "function (address)"
+ }
+ },
+ "id": 57,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1669:21:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 58,
+ "nodeType": "ExpressionStatement",
+ "src": "1669:21:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 47,
+ "nodeType": "StructuredDocumentation",
+ "src": "1269:331:0",
+ "text": " @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner."
+ },
+ "functionSelector": "715018a6",
+ "id": 60,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "id": 50,
+ "kind": "modifierInvocation",
+ "modifierName": {
+ "id": 49,
+ "name": "onlyOwner",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 46,
+ "src": "1649:9:0"
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "1649:9:0"
+ }
+ ],
+ "name": "renounceOwnership",
+ "nameLocation": "1614:17:0",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 48,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1631:2:0"
+ },
+ "returnParameters": {
+ "id": 51,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1659:0:0"
+ },
+ "scope": 103,
+ "src": "1605:92:0",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 82,
+ "nodeType": "Block",
+ "src": "1916:119:0",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 74,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 69,
+ "name": "newOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 63,
+ "src": "1934:8:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "arguments": [
+ {
+ "hexValue": "30",
+ "id": 72,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1954:1:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ }
+ ],
+ "id": 71,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1946:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 70,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1946:7:0",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 73,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1946:10:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "1934:22:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373",
+ "id": 75,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1958:40:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe",
+ "typeString": "literal_string \"Ownable: new owner is the zero address\""
+ },
+ "value": "Ownable: new owner is the zero address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe",
+ "typeString": "literal_string \"Ownable: new owner is the zero address\""
+ }
+ ],
+ "id": 68,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "1926:7:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 76,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1926:73:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 77,
+ "nodeType": "ExpressionStatement",
+ "src": "1926:73:0"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 79,
+ "name": "newOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 63,
+ "src": "2019:8:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 78,
+ "name": "_setOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 102,
+ "src": "2009:9:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
+ "typeString": "function (address)"
+ }
+ },
+ "id": 80,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2009:19:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 81,
+ "nodeType": "ExpressionStatement",
+ "src": "2009:19:0"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 61,
+ "nodeType": "StructuredDocumentation",
+ "src": "1703:138:0",
+ "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."
+ },
+ "functionSelector": "f2fde38b",
+ "id": 83,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "id": 66,
+ "kind": "modifierInvocation",
+ "modifierName": {
+ "id": 65,
+ "name": "onlyOwner",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 46,
+ "src": "1906:9:0"
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "1906:9:0"
+ }
+ ],
+ "name": "transferOwnership",
+ "nameLocation": "1855:17:0",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 64,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 63,
+ "mutability": "mutable",
+ "name": "newOwner",
+ "nameLocation": "1881:8:0",
+ "nodeType": "VariableDeclaration",
+ "scope": 83,
+ "src": "1873:16:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 62,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1873:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1872:18:0"
+ },
+ "returnParameters": {
+ "id": 67,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "1916:0:0"
+ },
+ "scope": 103,
+ "src": "1846:189:0",
+ "stateMutability": "nonpayable",
+ "virtual": true,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 101,
+ "nodeType": "Block",
+ "src": "2086:124:0",
+ "statements": [
+ {
+ "assignments": [
+ 89
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 89,
+ "mutability": "mutable",
+ "name": "oldOwner",
+ "nameLocation": "2104:8:0",
+ "nodeType": "VariableDeclaration",
+ "scope": 101,
+ "src": "2096:16:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 88,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2096:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 91,
+ "initialValue": {
+ "id": 90,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7,
+ "src": "2115:6:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "2096:25:0"
+ },
+ {
+ "expression": {
+ "id": 94,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 92,
+ "name": "_owner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 7,
+ "src": "2131:6:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 93,
+ "name": "newOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 85,
+ "src": "2140:8:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "2131:17:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 95,
+ "nodeType": "ExpressionStatement",
+ "src": "2131:17:0"
+ },
+ {
+ "eventCall": {
+ "arguments": [
+ {
+ "id": 97,
+ "name": "oldOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 89,
+ "src": "2184:8:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 98,
+ "name": "newOwner",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 85,
+ "src": "2194:8:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 96,
+ "name": "OwnershipTransferred",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 13,
+ "src": "2163:20:0",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
+ "typeString": "function (address,address)"
+ }
+ },
+ "id": 99,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2163:40:0",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 100,
+ "nodeType": "EmitStatement",
+ "src": "2158:45:0"
+ }
+ ]
+ },
+ "id": 102,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_setOwner",
+ "nameLocation": "2050:9:0",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 86,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 85,
+ "mutability": "mutable",
+ "name": "newOwner",
+ "nameLocation": "2068:8:0",
+ "nodeType": "VariableDeclaration",
+ "scope": 102,
+ "src": "2060:16:0",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 84,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2060:7:0",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2059:18:0"
+ },
+ "returnParameters": {
+ "id": 87,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2086:0:0"
+ },
+ "scope": 103,
+ "src": "2041:169:0",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "private"
+ }
+ ],
+ "scope": 104,
+ "src": "585:1627:0",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:2180:0"
+ },
+ "compiler": {
+ "name": "solc",
+ "version": "0.8.6+commit.11564f7e.Emscripten.clang"
+ },
+ "networks": {},
+ "schemaVersion": "3.4.3",
+ "updatedAt": "2021-09-07T13:34:26.774Z",
+ "devdoc": {
+ "details": "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.",
+ "kind": "dev",
+ "methods": {
+ "constructor": {
+ "details": "Initializes the contract setting the deployer as the initial owner."
+ },
+ "owner()": {
+ "details": "Returns the address of the current owner."
+ },
+ "renounceOwnership()": {
+ "details": "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."
+ },
+ "transferOwnership(address)": {
+ "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
+ }
+ },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {},
+ "version": 1
+ }
+}
\ No newline at end of file
diff --git a/build/contracts/PanacloudApi.json b/build/contracts/PanacloudApi.json
new file mode 100644
index 0000000..a6aa23a
--- /dev/null
+++ b/build/contracts/PanacloudApi.json
@@ -0,0 +1,17935 @@
+{
+ "contractName": "PanacloudApi",
+ "abi": [
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "approved",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "previousOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "OwnershipTransferred",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "renounceOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenURI",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "player",
+ "type": "address"
+ },
+ {
+ "internalType": "string",
+ "name": "tokenURI",
+ "type": "string"
+ }
+ ],
+ "name": "createPanacloudApi",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"player\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"}],\"name\":\"createPanacloudApi\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"renounceOwnership()\":{\"details\":\"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.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/PanacloudApi.sol\":\"PanacloudApi\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x6bb804a310218875e89d12c053e94a13a4607cdf7cc2052f3e52bd32a0dc50a1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2ebbbe6d0011175bd9e7268b83de3f9c2f9d8d4cbfbaef12aff977d7d727163\",\"dweb:/ipfs/Qmd5c7Vxtis9wzkDNhxwc6A2QT5H9xn9kfjhx7qx44vpro\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x7d2b8ba4b256bfcac347991b75242f9bc37f499c5236af50cf09d0b35943dc0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8eeaf6afe00229af4c232ca058bb08b7a24cc3886f0b387159ac49ffd8b5312\",\"dweb:/ipfs/QmdnVKmDDWDvdRr6vtrxy3G6WafqA2TAhUZv1UFMsm4B4r\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xf101e8720213560fab41104d53b3cc7ba0456ef3a98455aa7f022391783144a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3e7820bcf567e6892d937c3cb10db263a4042e446799bca602535868d822384e\",\"dweb:/ipfs/QmPG2oeDjKncqsEeyYGjAN7CwAJmMgHterXGGnpzhha4z7\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xd9517254724276e2e8de3769183c1f738f445f0095c26fd9b86d3c6687e887b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0e604bcdcd5e5b2fb299ad09769cde6db19d5aa1929d1b5e939234a0f10d7eb8\",\"dweb:/ipfs/Qmd8hXE3GZfBHuWx3RNiYgFW2ci7KvHtib8DiwzJ2dgo9V\"]},\"@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol\":{\"keccak256\":\"0x188d038a65a945481cc13fe30db334472dfbed61f7959d4478d05feb6303b1ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7aec4efa22389811ffa393463569410bbca1ecaa551bc94d69020bc9567e9277\",\"dweb:/ipfs/QmPwk5uVSHPQkepebrZSQ9xqgXdPABKqHwJZ2HkzNByLRE\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0xd32fb7f530a914b1083d10a6bed3a586f2451952fec04fe542bcc670a82f7ba5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af63ab940a34687c45f0ad84960b048fc5f49330c92ccb422db7822a444733b9\",\"dweb:/ipfs/QmUShaQEu8HS1GjDnsMJQ8jkZEBrecn6NuDZ3pfjY1gVck\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://39a05eec7083dfa0cc7e0cbfe6cd1bd085a340af1ede93fdff3ad047c5fb3d8e\",\"dweb:/ipfs/QmVApz5fCUq2QC8gKTsNNdCmcedJ3ETHp68zR5N3WUKS4r\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x90565a39ae45c80f0468dc96c7b20d0afc3055f344c8203a0c9258239f350b9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26e8b38a7ac8e7b4463af00cf7fff1bf48ae9875765bf4f7751e100124d0bc8c\",\"dweb:/ipfs/QmWcsmkVr24xmmjfnBQZoemFniXjj3vwT78Cz6uqZW1Hux\"]},\"@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0x78450f4e3b722cce467b21e285f72ce5eaf361e9ba9dd2241a413926246773cd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f103065051300cd995fd4599ba91188d4071b92175b52f26110e02db091617c0\",\"dweb:/ipfs/QmSyDz67R2HCypDE8Pacn3voVwxw9x17NM66q47YgBnGqc\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x391d3ba97ab6856a16b225d6ee29617ad15ff00db70f3b4df1ab5ea33aa47c9d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d636ba90bbbeed04a1ea7fe9ec2466757e30fd38ba2ca173636dbf69a518735e\",\"dweb:/ipfs/QmQwCB2BHnEuYR22PYt9HkpbgeFDhq4rHmaYqAZbX3WRC7\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x5718c5df9bd67ac68a796961df938821bb5dc0cd4c6118d77e9145afb187409b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d10e1d9b26042424789246603906ad06143bf9a928f4e99de8b5e3bdc662f549\",\"dweb:/ipfs/Qmejonoaj5MLekPus229rJQHcC6E9dz2xorjHJR84fMfmn\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0xa28007762d9da9db878dd421960c8cb9a10471f47ab5c1b3309bfe48e9e79ff4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://796ab6e88af7bf0e78def0f059310c903af6a312b565344e0ff524a0f26e81c6\",\"dweb:/ipfs/QmcsVgLgzWdor3UnAztUkXKNGcysm1MPneWksF72AvnwBx\"]},\"project:/contracts/PanacloudApi.sol\":{\"keccak256\":\"0xb946d19ef5bd8e96a30194af4087892ef53692d3f54b69ce70b33575ef3e9b05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db81f90a4f1e9f1d195b3b9f071248f70606799b2e63fdf8f1a9404742c3c9cd\",\"dweb:/ipfs/QmVqScYUmb1rjhz6gcg6EzsJuUt7GRi94JhtNdVEwBi2a5\"]}},\"version\":1}",
+ "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600781526020017f50616e61417069000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f504e410000000000000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620001a6565b508060019080519060200190620000af929190620001a6565b505050620000d2620000c6620000d860201b60201c565b620000e060201b60201c565b620002bb565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b49062000256565b90600052602060002090601f016020900481019282620001d8576000855562000224565b82601f10620001f357805160ff191683800117855562000224565b8280016001018555821562000224579182015b828111156200022357825182559160200191906001019062000206565b5b50905062000233919062000237565b5090565b5b808211156200025257600081600090555060010162000238565b5090565b600060028204905060018216806200026f57607f821691505b602082108114156200028657620002856200028c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612ff280620002cb6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063715018a6116100a2578063b88d4fde11610071578063b88d4fde146102a4578063c7790981146102c0578063c87b56dd146102f0578063e985e9c514610320578063f2fde38b146103505761010b565b8063715018a6146102425780638da5cb5b1461024c57806395d89b411461026a578063a22cb465146102885761010b565b806323b872dd116100de57806323b872dd146101aa57806342842e0e146101c65780636352211e146101e257806370a08231146102125761010b565b806301ffc9a71461011057806306fdde0314610140578063081812fc1461015e578063095ea7b31461018e575b600080fd5b61012a60048036038101906101259190611f52565b61036c565b60405161013791906123aa565b60405180910390f35b61014861044e565b60405161015591906123c5565b60405180910390f35b61017860048036038101906101739190611fac565b6104e0565b6040516101859190612343565b60405180910390f35b6101a860048036038101906101a39190611f12565b610565565b005b6101c460048036038101906101bf9190611da0565b61067d565b005b6101e060048036038101906101db9190611da0565b6106dd565b005b6101fc60048036038101906101f79190611fac565b6106fd565b6040516102099190612343565b60405180910390f35b61022c60048036038101906102279190611d33565b6107af565b6040516102399190612627565b60405180910390f35b61024a610867565b005b6102546108ef565b6040516102619190612343565b60405180910390f35b610272610919565b60405161027f91906123c5565b60405180910390f35b6102a2600480360381019061029d9190611e76565b6109ab565b005b6102be60048036038101906102b99190611df3565b610b2c565b005b6102da60048036038101906102d59190611eb6565b610b8e565b6040516102e79190612627565b60405180910390f35b61030a60048036038101906103059190611fac565b610c42565b60405161031791906123c5565b60405180910390f35b61033a60048036038101906103359190611d60565b610d94565b60405161034791906123aa565b60405180910390f35b61036a60048036038101906103659190611d33565b610e28565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061043757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610447575061044682610f20565b5b9050919050565b60606000805461045d9061287d565b80601f01602080910402602001604051908101604052809291908181526020018280546104899061287d565b80156104d65780601f106104ab576101008083540402835291602001916104d6565b820191906000526020600020905b8154815290600101906020018083116104b957829003601f168201915b5050505050905090565b60006104eb82610f8a565b61052a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052190612567565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610570826106fd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d8906125e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610600610ff6565b73ffffffffffffffffffffffffffffffffffffffff16148061062f575061062e81610629610ff6565b610d94565b5b61066e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610665906124a7565b60405180910390fd5b6106788383610ffe565b505050565b61068e610688610ff6565b826110b7565b6106cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c490612607565b60405180910390fd5b6106d8838383611195565b505050565b6106f883838360405180602001604052806000815250610b2c565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079d906124e7565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610817906124c7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61086f610ff6565b73ffffffffffffffffffffffffffffffffffffffff1661088d6108ef565b73ffffffffffffffffffffffffffffffffffffffff16146108e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108da90612587565b60405180910390fd5b6108ed60006113f1565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546109289061287d565b80601f01602080910402602001604051908101604052809291908181526020018280546109549061287d565b80156109a15780601f10610976576101008083540402835291602001916109a1565b820191906000526020600020905b81548152906001019060200180831161098457829003601f168201915b5050505050905090565b6109b3610ff6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1890612467565b60405180910390fd5b8060056000610a2e610ff6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610adb610ff6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610b2091906123aa565b60405180910390a35050565b610b3d610b37610ff6565b836110b7565b610b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7390612607565b60405180910390fd5b610b88848484846114b7565b50505050565b6000610b98610ff6565b73ffffffffffffffffffffffffffffffffffffffff16610bb66108ef565b73ffffffffffffffffffffffffffffffffffffffff1614610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0390612587565b60405180910390fd5b610c166008611513565b6000610c226008611529565b9050610c2e8482611537565b610c388184611705565b8091505092915050565b6060610c4d82610f8a565b610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8390612547565b60405180910390fd5b6000600660008481526020019081526020016000208054610cac9061287d565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd89061287d565b8015610d255780601f10610cfa57610100808354040283529160200191610d25565b820191906000526020600020905b815481529060010190602001808311610d0857829003601f168201915b505050505090506000610d36611779565b9050600081511415610d4c578192505050610d8f565b600082511115610d81578082604051602001610d6992919061231f565b60405160208183030381529060405292505050610d8f565b610d8a84611790565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e30610ff6565b73ffffffffffffffffffffffffffffffffffffffff16610e4e6108ef565b73ffffffffffffffffffffffffffffffffffffffff1614610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b90612587565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b90612407565b60405180910390fd5b610f1d816113f1565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611071836106fd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006110c282610f8a565b611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f890612487565b60405180910390fd5b600061110c836106fd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061117b57508373ffffffffffffffffffffffffffffffffffffffff16611163846104e0565b73ffffffffffffffffffffffffffffffffffffffff16145b8061118c575061118b8185610d94565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166111b5826106fd565b73ffffffffffffffffffffffffffffffffffffffff161461120b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611202906125a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127290612447565b60405180910390fd5b611286838383611837565b611291600082610ffe565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112e19190612793565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611338919061270c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6114c2848484611195565b6114ce8484848461183c565b61150d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611504906123e7565b60405180910390fd5b50505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90612527565b60405180910390fd5b6115b081610f8a565b156115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e790612427565b60405180910390fd5b6115fc60008383611837565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461164c919061270c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61170e82610f8a565b61174d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174490612507565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190611774929190611b47565b505050565b606060405180602001604052806000815250905090565b606061179b82610f8a565b6117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d1906125c7565b60405180910390fd5b60006117e4611779565b90506000815111611804576040518060200160405280600081525061182f565b8061180e846119d3565b60405160200161181f92919061231f565b6040516020818303038152906040525b915050919050565b505050565b600061185d8473ffffffffffffffffffffffffffffffffffffffff16611b34565b156119c6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611886610ff6565b8786866040518563ffffffff1660e01b81526004016118a8949392919061235e565b602060405180830381600087803b1580156118c257600080fd5b505af19250505080156118f357506040513d601f19601f820116820180604052508101906118f09190611f7f565b60015b611976573d8060008114611923576040519150601f19603f3d011682016040523d82523d6000602084013e611928565b606091505b5060008151141561196e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611965906123e7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506119cb565b600190505b949350505050565b60606000821415611a1b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611b2f565b600082905060005b60008214611a4d578080611a36906128e0565b915050600a82611a469190612762565b9150611a23565b60008167ffffffffffffffff811115611a6957611a68612a16565b5b6040519080825280601f01601f191660200182016040528015611a9b5781602001600182028036833780820191505090505b5090505b60008514611b2857600182611ab49190612793565b9150600a85611ac39190612929565b6030611acf919061270c565b60f81b818381518110611ae557611ae46129e7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611b219190612762565b9450611a9f565b8093505050505b919050565b600080823b905060008111915050919050565b828054611b539061287d565b90600052602060002090601f016020900481019282611b755760008555611bbc565b82601f10611b8e57805160ff1916838001178555611bbc565b82800160010185558215611bbc579182015b82811115611bbb578251825591602001919060010190611ba0565b5b509050611bc99190611bcd565b5090565b5b80821115611be6576000816000905550600101611bce565b5090565b6000611bfd611bf884612667565b612642565b905082815260208101848484011115611c1957611c18612a4a565b5b611c2484828561283b565b509392505050565b6000611c3f611c3a84612698565b612642565b905082815260208101848484011115611c5b57611c5a612a4a565b5b611c6684828561283b565b509392505050565b600081359050611c7d81612f60565b92915050565b600081359050611c9281612f77565b92915050565b600081359050611ca781612f8e565b92915050565b600081519050611cbc81612f8e565b92915050565b600082601f830112611cd757611cd6612a45565b5b8135611ce7848260208601611bea565b91505092915050565b600082601f830112611d0557611d04612a45565b5b8135611d15848260208601611c2c565b91505092915050565b600081359050611d2d81612fa5565b92915050565b600060208284031215611d4957611d48612a54565b5b6000611d5784828501611c6e565b91505092915050565b60008060408385031215611d7757611d76612a54565b5b6000611d8585828601611c6e565b9250506020611d9685828601611c6e565b9150509250929050565b600080600060608486031215611db957611db8612a54565b5b6000611dc786828701611c6e565b9350506020611dd886828701611c6e565b9250506040611de986828701611d1e565b9150509250925092565b60008060008060808587031215611e0d57611e0c612a54565b5b6000611e1b87828801611c6e565b9450506020611e2c87828801611c6e565b9350506040611e3d87828801611d1e565b925050606085013567ffffffffffffffff811115611e5e57611e5d612a4f565b5b611e6a87828801611cc2565b91505092959194509250565b60008060408385031215611e8d57611e8c612a54565b5b6000611e9b85828601611c6e565b9250506020611eac85828601611c83565b9150509250929050565b60008060408385031215611ecd57611ecc612a54565b5b6000611edb85828601611c6e565b925050602083013567ffffffffffffffff811115611efc57611efb612a4f565b5b611f0885828601611cf0565b9150509250929050565b60008060408385031215611f2957611f28612a54565b5b6000611f3785828601611c6e565b9250506020611f4885828601611d1e565b9150509250929050565b600060208284031215611f6857611f67612a54565b5b6000611f7684828501611c98565b91505092915050565b600060208284031215611f9557611f94612a54565b5b6000611fa384828501611cad565b91505092915050565b600060208284031215611fc257611fc1612a54565b5b6000611fd084828501611d1e565b91505092915050565b611fe2816127c7565b82525050565b611ff1816127d9565b82525050565b6000612002826126c9565b61200c81856126df565b935061201c81856020860161284a565b61202581612a59565b840191505092915050565b600061203b826126d4565b61204581856126f0565b935061205581856020860161284a565b61205e81612a59565b840191505092915050565b6000612074826126d4565b61207e8185612701565b935061208e81856020860161284a565b80840191505092915050565b60006120a76032836126f0565b91506120b282612a6a565b604082019050919050565b60006120ca6026836126f0565b91506120d582612ab9565b604082019050919050565b60006120ed601c836126f0565b91506120f882612b08565b602082019050919050565b60006121106024836126f0565b915061211b82612b31565b604082019050919050565b60006121336019836126f0565b915061213e82612b80565b602082019050919050565b6000612156602c836126f0565b915061216182612ba9565b604082019050919050565b60006121796038836126f0565b915061218482612bf8565b604082019050919050565b600061219c602a836126f0565b91506121a782612c47565b604082019050919050565b60006121bf6029836126f0565b91506121ca82612c96565b604082019050919050565b60006121e2602e836126f0565b91506121ed82612ce5565b604082019050919050565b60006122056020836126f0565b915061221082612d34565b602082019050919050565b60006122286031836126f0565b915061223382612d5d565b604082019050919050565b600061224b602c836126f0565b915061225682612dac565b604082019050919050565b600061226e6020836126f0565b915061227982612dfb565b602082019050919050565b60006122916029836126f0565b915061229c82612e24565b604082019050919050565b60006122b4602f836126f0565b91506122bf82612e73565b604082019050919050565b60006122d76021836126f0565b91506122e282612ec2565b604082019050919050565b60006122fa6031836126f0565b915061230582612f11565b604082019050919050565b61231981612831565b82525050565b600061232b8285612069565b91506123378284612069565b91508190509392505050565b60006020820190506123586000830184611fd9565b92915050565b60006080820190506123736000830187611fd9565b6123806020830186611fd9565b61238d6040830185612310565b818103606083015261239f8184611ff7565b905095945050505050565b60006020820190506123bf6000830184611fe8565b92915050565b600060208201905081810360008301526123df8184612030565b905092915050565b600060208201905081810360008301526124008161209a565b9050919050565b60006020820190508181036000830152612420816120bd565b9050919050565b60006020820190508181036000830152612440816120e0565b9050919050565b6000602082019050818103600083015261246081612103565b9050919050565b6000602082019050818103600083015261248081612126565b9050919050565b600060208201905081810360008301526124a081612149565b9050919050565b600060208201905081810360008301526124c08161216c565b9050919050565b600060208201905081810360008301526124e08161218f565b9050919050565b60006020820190508181036000830152612500816121b2565b9050919050565b60006020820190508181036000830152612520816121d5565b9050919050565b60006020820190508181036000830152612540816121f8565b9050919050565b600060208201905081810360008301526125608161221b565b9050919050565b600060208201905081810360008301526125808161223e565b9050919050565b600060208201905081810360008301526125a081612261565b9050919050565b600060208201905081810360008301526125c081612284565b9050919050565b600060208201905081810360008301526125e0816122a7565b9050919050565b60006020820190508181036000830152612600816122ca565b9050919050565b60006020820190508181036000830152612620816122ed565b9050919050565b600060208201905061263c6000830184612310565b92915050565b600061264c61265d565b905061265882826128af565b919050565b6000604051905090565b600067ffffffffffffffff82111561268257612681612a16565b5b61268b82612a59565b9050602081019050919050565b600067ffffffffffffffff8211156126b3576126b2612a16565b5b6126bc82612a59565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061271782612831565b915061272283612831565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127575761275661295a565b5b828201905092915050565b600061276d82612831565b915061277883612831565b92508261278857612787612989565b5b828204905092915050565b600061279e82612831565b91506127a983612831565b9250828210156127bc576127bb61295a565b5b828203905092915050565b60006127d282612811565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561286857808201518184015260208101905061284d565b83811115612877576000848401525b50505050565b6000600282049050600182168061289557607f821691505b602082108114156128a9576128a86129b8565b5b50919050565b6128b882612a59565b810181811067ffffffffffffffff821117156128d7576128d6612a16565b5b80604052505050565b60006128eb82612831565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561291e5761291d61295a565b5b600182019050919050565b600061293482612831565b915061293f83612831565b92508261294f5761294e612989565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b612f69816127c7565b8114612f7457600080fd5b50565b612f80816127d9565b8114612f8b57600080fd5b50565b612f97816127e5565b8114612fa257600080fd5b50565b612fae81612831565b8114612fb957600080fd5b5056fea2646970667358221220fa942eebc6f7c3d0a82a26b1e9a6154ed8d1c4b54b5e960b8629000985e2d6fa64736f6c63430008060033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c8063715018a6116100a2578063b88d4fde11610071578063b88d4fde146102a4578063c7790981146102c0578063c87b56dd146102f0578063e985e9c514610320578063f2fde38b146103505761010b565b8063715018a6146102425780638da5cb5b1461024c57806395d89b411461026a578063a22cb465146102885761010b565b806323b872dd116100de57806323b872dd146101aa57806342842e0e146101c65780636352211e146101e257806370a08231146102125761010b565b806301ffc9a71461011057806306fdde0314610140578063081812fc1461015e578063095ea7b31461018e575b600080fd5b61012a60048036038101906101259190611f52565b61036c565b60405161013791906123aa565b60405180910390f35b61014861044e565b60405161015591906123c5565b60405180910390f35b61017860048036038101906101739190611fac565b6104e0565b6040516101859190612343565b60405180910390f35b6101a860048036038101906101a39190611f12565b610565565b005b6101c460048036038101906101bf9190611da0565b61067d565b005b6101e060048036038101906101db9190611da0565b6106dd565b005b6101fc60048036038101906101f79190611fac565b6106fd565b6040516102099190612343565b60405180910390f35b61022c60048036038101906102279190611d33565b6107af565b6040516102399190612627565b60405180910390f35b61024a610867565b005b6102546108ef565b6040516102619190612343565b60405180910390f35b610272610919565b60405161027f91906123c5565b60405180910390f35b6102a2600480360381019061029d9190611e76565b6109ab565b005b6102be60048036038101906102b99190611df3565b610b2c565b005b6102da60048036038101906102d59190611eb6565b610b8e565b6040516102e79190612627565b60405180910390f35b61030a60048036038101906103059190611fac565b610c42565b60405161031791906123c5565b60405180910390f35b61033a60048036038101906103359190611d60565b610d94565b60405161034791906123aa565b60405180910390f35b61036a60048036038101906103659190611d33565b610e28565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061043757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610447575061044682610f20565b5b9050919050565b60606000805461045d9061287d565b80601f01602080910402602001604051908101604052809291908181526020018280546104899061287d565b80156104d65780601f106104ab576101008083540402835291602001916104d6565b820191906000526020600020905b8154815290600101906020018083116104b957829003601f168201915b5050505050905090565b60006104eb82610f8a565b61052a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052190612567565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610570826106fd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d8906125e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610600610ff6565b73ffffffffffffffffffffffffffffffffffffffff16148061062f575061062e81610629610ff6565b610d94565b5b61066e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610665906124a7565b60405180910390fd5b6106788383610ffe565b505050565b61068e610688610ff6565b826110b7565b6106cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c490612607565b60405180910390fd5b6106d8838383611195565b505050565b6106f883838360405180602001604052806000815250610b2c565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079d906124e7565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610817906124c7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61086f610ff6565b73ffffffffffffffffffffffffffffffffffffffff1661088d6108ef565b73ffffffffffffffffffffffffffffffffffffffff16146108e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108da90612587565b60405180910390fd5b6108ed60006113f1565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546109289061287d565b80601f01602080910402602001604051908101604052809291908181526020018280546109549061287d565b80156109a15780601f10610976576101008083540402835291602001916109a1565b820191906000526020600020905b81548152906001019060200180831161098457829003601f168201915b5050505050905090565b6109b3610ff6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1890612467565b60405180910390fd5b8060056000610a2e610ff6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610adb610ff6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610b2091906123aa565b60405180910390a35050565b610b3d610b37610ff6565b836110b7565b610b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7390612607565b60405180910390fd5b610b88848484846114b7565b50505050565b6000610b98610ff6565b73ffffffffffffffffffffffffffffffffffffffff16610bb66108ef565b73ffffffffffffffffffffffffffffffffffffffff1614610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0390612587565b60405180910390fd5b610c166008611513565b6000610c226008611529565b9050610c2e8482611537565b610c388184611705565b8091505092915050565b6060610c4d82610f8a565b610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8390612547565b60405180910390fd5b6000600660008481526020019081526020016000208054610cac9061287d565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd89061287d565b8015610d255780601f10610cfa57610100808354040283529160200191610d25565b820191906000526020600020905b815481529060010190602001808311610d0857829003601f168201915b505050505090506000610d36611779565b9050600081511415610d4c578192505050610d8f565b600082511115610d81578082604051602001610d6992919061231f565b60405160208183030381529060405292505050610d8f565b610d8a84611790565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e30610ff6565b73ffffffffffffffffffffffffffffffffffffffff16610e4e6108ef565b73ffffffffffffffffffffffffffffffffffffffff1614610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b90612587565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b90612407565b60405180910390fd5b610f1d816113f1565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611071836106fd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006110c282610f8a565b611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f890612487565b60405180910390fd5b600061110c836106fd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061117b57508373ffffffffffffffffffffffffffffffffffffffff16611163846104e0565b73ffffffffffffffffffffffffffffffffffffffff16145b8061118c575061118b8185610d94565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166111b5826106fd565b73ffffffffffffffffffffffffffffffffffffffff161461120b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611202906125a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127290612447565b60405180910390fd5b611286838383611837565b611291600082610ffe565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112e19190612793565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611338919061270c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6114c2848484611195565b6114ce8484848461183c565b61150d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611504906123e7565b60405180910390fd5b50505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90612527565b60405180910390fd5b6115b081610f8a565b156115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e790612427565b60405180910390fd5b6115fc60008383611837565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461164c919061270c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61170e82610f8a565b61174d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174490612507565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190611774929190611b47565b505050565b606060405180602001604052806000815250905090565b606061179b82610f8a565b6117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d1906125c7565b60405180910390fd5b60006117e4611779565b90506000815111611804576040518060200160405280600081525061182f565b8061180e846119d3565b60405160200161181f92919061231f565b6040516020818303038152906040525b915050919050565b505050565b600061185d8473ffffffffffffffffffffffffffffffffffffffff16611b34565b156119c6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611886610ff6565b8786866040518563ffffffff1660e01b81526004016118a8949392919061235e565b602060405180830381600087803b1580156118c257600080fd5b505af19250505080156118f357506040513d601f19601f820116820180604052508101906118f09190611f7f565b60015b611976573d8060008114611923576040519150601f19603f3d011682016040523d82523d6000602084013e611928565b606091505b5060008151141561196e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611965906123e7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506119cb565b600190505b949350505050565b60606000821415611a1b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611b2f565b600082905060005b60008214611a4d578080611a36906128e0565b915050600a82611a469190612762565b9150611a23565b60008167ffffffffffffffff811115611a6957611a68612a16565b5b6040519080825280601f01601f191660200182016040528015611a9b5781602001600182028036833780820191505090505b5090505b60008514611b2857600182611ab49190612793565b9150600a85611ac39190612929565b6030611acf919061270c565b60f81b818381518110611ae557611ae46129e7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611b219190612762565b9450611a9f565b8093505050505b919050565b600080823b905060008111915050919050565b828054611b539061287d565b90600052602060002090601f016020900481019282611b755760008555611bbc565b82601f10611b8e57805160ff1916838001178555611bbc565b82800160010185558215611bbc579182015b82811115611bbb578251825591602001919060010190611ba0565b5b509050611bc99190611bcd565b5090565b5b80821115611be6576000816000905550600101611bce565b5090565b6000611bfd611bf884612667565b612642565b905082815260208101848484011115611c1957611c18612a4a565b5b611c2484828561283b565b509392505050565b6000611c3f611c3a84612698565b612642565b905082815260208101848484011115611c5b57611c5a612a4a565b5b611c6684828561283b565b509392505050565b600081359050611c7d81612f60565b92915050565b600081359050611c9281612f77565b92915050565b600081359050611ca781612f8e565b92915050565b600081519050611cbc81612f8e565b92915050565b600082601f830112611cd757611cd6612a45565b5b8135611ce7848260208601611bea565b91505092915050565b600082601f830112611d0557611d04612a45565b5b8135611d15848260208601611c2c565b91505092915050565b600081359050611d2d81612fa5565b92915050565b600060208284031215611d4957611d48612a54565b5b6000611d5784828501611c6e565b91505092915050565b60008060408385031215611d7757611d76612a54565b5b6000611d8585828601611c6e565b9250506020611d9685828601611c6e565b9150509250929050565b600080600060608486031215611db957611db8612a54565b5b6000611dc786828701611c6e565b9350506020611dd886828701611c6e565b9250506040611de986828701611d1e565b9150509250925092565b60008060008060808587031215611e0d57611e0c612a54565b5b6000611e1b87828801611c6e565b9450506020611e2c87828801611c6e565b9350506040611e3d87828801611d1e565b925050606085013567ffffffffffffffff811115611e5e57611e5d612a4f565b5b611e6a87828801611cc2565b91505092959194509250565b60008060408385031215611e8d57611e8c612a54565b5b6000611e9b85828601611c6e565b9250506020611eac85828601611c83565b9150509250929050565b60008060408385031215611ecd57611ecc612a54565b5b6000611edb85828601611c6e565b925050602083013567ffffffffffffffff811115611efc57611efb612a4f565b5b611f0885828601611cf0565b9150509250929050565b60008060408385031215611f2957611f28612a54565b5b6000611f3785828601611c6e565b9250506020611f4885828601611d1e565b9150509250929050565b600060208284031215611f6857611f67612a54565b5b6000611f7684828501611c98565b91505092915050565b600060208284031215611f9557611f94612a54565b5b6000611fa384828501611cad565b91505092915050565b600060208284031215611fc257611fc1612a54565b5b6000611fd084828501611d1e565b91505092915050565b611fe2816127c7565b82525050565b611ff1816127d9565b82525050565b6000612002826126c9565b61200c81856126df565b935061201c81856020860161284a565b61202581612a59565b840191505092915050565b600061203b826126d4565b61204581856126f0565b935061205581856020860161284a565b61205e81612a59565b840191505092915050565b6000612074826126d4565b61207e8185612701565b935061208e81856020860161284a565b80840191505092915050565b60006120a76032836126f0565b91506120b282612a6a565b604082019050919050565b60006120ca6026836126f0565b91506120d582612ab9565b604082019050919050565b60006120ed601c836126f0565b91506120f882612b08565b602082019050919050565b60006121106024836126f0565b915061211b82612b31565b604082019050919050565b60006121336019836126f0565b915061213e82612b80565b602082019050919050565b6000612156602c836126f0565b915061216182612ba9565b604082019050919050565b60006121796038836126f0565b915061218482612bf8565b604082019050919050565b600061219c602a836126f0565b91506121a782612c47565b604082019050919050565b60006121bf6029836126f0565b91506121ca82612c96565b604082019050919050565b60006121e2602e836126f0565b91506121ed82612ce5565b604082019050919050565b60006122056020836126f0565b915061221082612d34565b602082019050919050565b60006122286031836126f0565b915061223382612d5d565b604082019050919050565b600061224b602c836126f0565b915061225682612dac565b604082019050919050565b600061226e6020836126f0565b915061227982612dfb565b602082019050919050565b60006122916029836126f0565b915061229c82612e24565b604082019050919050565b60006122b4602f836126f0565b91506122bf82612e73565b604082019050919050565b60006122d76021836126f0565b91506122e282612ec2565b604082019050919050565b60006122fa6031836126f0565b915061230582612f11565b604082019050919050565b61231981612831565b82525050565b600061232b8285612069565b91506123378284612069565b91508190509392505050565b60006020820190506123586000830184611fd9565b92915050565b60006080820190506123736000830187611fd9565b6123806020830186611fd9565b61238d6040830185612310565b818103606083015261239f8184611ff7565b905095945050505050565b60006020820190506123bf6000830184611fe8565b92915050565b600060208201905081810360008301526123df8184612030565b905092915050565b600060208201905081810360008301526124008161209a565b9050919050565b60006020820190508181036000830152612420816120bd565b9050919050565b60006020820190508181036000830152612440816120e0565b9050919050565b6000602082019050818103600083015261246081612103565b9050919050565b6000602082019050818103600083015261248081612126565b9050919050565b600060208201905081810360008301526124a081612149565b9050919050565b600060208201905081810360008301526124c08161216c565b9050919050565b600060208201905081810360008301526124e08161218f565b9050919050565b60006020820190508181036000830152612500816121b2565b9050919050565b60006020820190508181036000830152612520816121d5565b9050919050565b60006020820190508181036000830152612540816121f8565b9050919050565b600060208201905081810360008301526125608161221b565b9050919050565b600060208201905081810360008301526125808161223e565b9050919050565b600060208201905081810360008301526125a081612261565b9050919050565b600060208201905081810360008301526125c081612284565b9050919050565b600060208201905081810360008301526125e0816122a7565b9050919050565b60006020820190508181036000830152612600816122ca565b9050919050565b60006020820190508181036000830152612620816122ed565b9050919050565b600060208201905061263c6000830184612310565b92915050565b600061264c61265d565b905061265882826128af565b919050565b6000604051905090565b600067ffffffffffffffff82111561268257612681612a16565b5b61268b82612a59565b9050602081019050919050565b600067ffffffffffffffff8211156126b3576126b2612a16565b5b6126bc82612a59565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061271782612831565b915061272283612831565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127575761275661295a565b5b828201905092915050565b600061276d82612831565b915061277883612831565b92508261278857612787612989565b5b828204905092915050565b600061279e82612831565b91506127a983612831565b9250828210156127bc576127bb61295a565b5b828203905092915050565b60006127d282612811565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561286857808201518184015260208101905061284d565b83811115612877576000848401525b50505050565b6000600282049050600182168061289557607f821691505b602082108114156128a9576128a86129b8565b5b50919050565b6128b882612a59565b810181811067ffffffffffffffff821117156128d7576128d6612a16565b5b80604052505050565b60006128eb82612831565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561291e5761291d61295a565b5b600182019050919050565b600061293482612831565b915061293f83612831565b92508261294f5761294e612989565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b612f69816127c7565b8114612f7457600080fd5b50565b612f80816127d9565b8114612f8b57600080fd5b50565b612f97816127e5565b8114612fa257600080fd5b50565b612fae81612831565b8114612fb957600080fd5b5056fea2646970667358221220fa942eebc6f7c3d0a82a26b1e9a6154ed8d1c4b54b5e960b8629000985e2d6fa64736f6c63430008060033",
+ "immutableReferences": {},
+ "generatedSources": [
+ {
+ "ast": {
+ "nodeType": "YulBlock",
+ "src": "0:516:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "58:269:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "68:22:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "data",
+ "nodeType": "YulIdentifier",
+ "src": "82:4:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "88:1:14",
+ "type": "",
+ "value": "2"
+ }
+ ],
+ "functionName": {
+ "name": "div",
+ "nodeType": "YulIdentifier",
+ "src": "78:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "78:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "68:6:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "99:38:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "data",
+ "nodeType": "YulIdentifier",
+ "src": "129:4:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "135:1:14",
+ "type": "",
+ "value": "1"
+ }
+ ],
+ "functionName": {
+ "name": "and",
+ "nodeType": "YulIdentifier",
+ "src": "125:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "125:12:14"
+ },
+ "variables": [
+ {
+ "name": "outOfPlaceEncoding",
+ "nodeType": "YulTypedName",
+ "src": "103:18:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "176:51:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "190:27:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "204:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "212:4:14",
+ "type": "",
+ "value": "0x7f"
+ }
+ ],
+ "functionName": {
+ "name": "and",
+ "nodeType": "YulIdentifier",
+ "src": "200:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "200:17:14"
+ },
+ "variableNames": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "190:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "outOfPlaceEncoding",
+ "nodeType": "YulIdentifier",
+ "src": "156:18:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "149:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "149:26:14"
+ },
+ "nodeType": "YulIf",
+ "src": "146:2:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "279:42:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x22",
+ "nodeType": "YulIdentifier",
+ "src": "293:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "293:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "293:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "outOfPlaceEncoding",
+ "nodeType": "YulIdentifier",
+ "src": "243:18:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "266:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "274:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "lt",
+ "nodeType": "YulIdentifier",
+ "src": "263:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "263:14:14"
+ }
+ ],
+ "functionName": {
+ "name": "eq",
+ "nodeType": "YulIdentifier",
+ "src": "240:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "240:38:14"
+ },
+ "nodeType": "YulIf",
+ "src": "237:2:14"
+ }
+ ]
+ },
+ "name": "extract_byte_array_length",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "data",
+ "nodeType": "YulTypedName",
+ "src": "42:4:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "51:6:14",
+ "type": ""
+ }
+ ],
+ "src": "7:320:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "361:152:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "378:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "381:77:14",
+ "type": "",
+ "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "371:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "371:88:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "371:88:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "475:1:14",
+ "type": "",
+ "value": "4"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "478:4:14",
+ "type": "",
+ "value": "0x22"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "468:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "468:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "468:15:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "499:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "502:4:14",
+ "type": "",
+ "value": "0x24"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "492:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "492:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "492:15:14"
+ }
+ ]
+ },
+ "name": "panic_error_0x22",
+ "nodeType": "YulFunctionDefinition",
+ "src": "333:180:14"
+ }
+ ]
+ },
+ "contents": "{\n\n function extract_byte_array_length(data) -> length {\n length := div(data, 2)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) {\n length := and(length, 0x7f)\n }\n\n if eq(outOfPlaceEncoding, lt(length, 32)) {\n panic_error_0x22()\n }\n }\n\n function panic_error_0x22() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n\n}\n",
+ "id": 14,
+ "language": "Yul",
+ "name": "#utility.yul"
+ }
+ ],
+ "deployedGeneratedSources": [
+ {
+ "ast": {
+ "nodeType": "YulBlock",
+ "src": "0:35628:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "90:327:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "100:74:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "166:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "array_allocation_size_t_bytes_memory_ptr",
+ "nodeType": "YulIdentifier",
+ "src": "125:40:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "125:48:14"
+ }
+ ],
+ "functionName": {
+ "name": "allocate_memory",
+ "nodeType": "YulIdentifier",
+ "src": "109:15:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "109:65:14"
+ },
+ "variableNames": [
+ {
+ "name": "array",
+ "nodeType": "YulIdentifier",
+ "src": "100:5:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "array",
+ "nodeType": "YulIdentifier",
+ "src": "190:5:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "197:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "183:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "183:21:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "183:21:14"
+ },
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "213:27:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "array",
+ "nodeType": "YulIdentifier",
+ "src": "228:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "235:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "224:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "224:16:14"
+ },
+ "variables": [
+ {
+ "name": "dst",
+ "nodeType": "YulTypedName",
+ "src": "217:3:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "278:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae",
+ "nodeType": "YulIdentifier",
+ "src": "280:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "280:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "280:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "src",
+ "nodeType": "YulIdentifier",
+ "src": "259:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "264:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "255:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "255:16:14"
+ },
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "273:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "252:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "252:25:14"
+ },
+ "nodeType": "YulIf",
+ "src": "249:2:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "src",
+ "nodeType": "YulIdentifier",
+ "src": "394:3:14"
+ },
+ {
+ "name": "dst",
+ "nodeType": "YulIdentifier",
+ "src": "399:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "404:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "copy_calldata_to_memory",
+ "nodeType": "YulIdentifier",
+ "src": "370:23:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "370:41:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "370:41:14"
+ }
+ ]
+ },
+ "name": "abi_decode_available_length_t_bytes_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "src",
+ "nodeType": "YulTypedName",
+ "src": "63:3:14",
+ "type": ""
+ },
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "68:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "76:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "array",
+ "nodeType": "YulTypedName",
+ "src": "84:5:14",
+ "type": ""
+ }
+ ],
+ "src": "7:410:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "507:328:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "517:75:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "584:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "array_allocation_size_t_string_memory_ptr",
+ "nodeType": "YulIdentifier",
+ "src": "542:41:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "542:49:14"
+ }
+ ],
+ "functionName": {
+ "name": "allocate_memory",
+ "nodeType": "YulIdentifier",
+ "src": "526:15:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "526:66:14"
+ },
+ "variableNames": [
+ {
+ "name": "array",
+ "nodeType": "YulIdentifier",
+ "src": "517:5:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "array",
+ "nodeType": "YulIdentifier",
+ "src": "608:5:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "615:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "601:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "601:21:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "601:21:14"
+ },
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "631:27:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "array",
+ "nodeType": "YulIdentifier",
+ "src": "646:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "653:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "642:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "642:16:14"
+ },
+ "variables": [
+ {
+ "name": "dst",
+ "nodeType": "YulTypedName",
+ "src": "635:3:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "696:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae",
+ "nodeType": "YulIdentifier",
+ "src": "698:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "698:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "698:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "src",
+ "nodeType": "YulIdentifier",
+ "src": "677:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "682:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "673:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "673:16:14"
+ },
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "691:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "670:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "670:25:14"
+ },
+ "nodeType": "YulIf",
+ "src": "667:2:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "src",
+ "nodeType": "YulIdentifier",
+ "src": "812:3:14"
+ },
+ {
+ "name": "dst",
+ "nodeType": "YulIdentifier",
+ "src": "817:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "822:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "copy_calldata_to_memory",
+ "nodeType": "YulIdentifier",
+ "src": "788:23:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "788:41:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "788:41:14"
+ }
+ ]
+ },
+ "name": "abi_decode_available_length_t_string_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "src",
+ "nodeType": "YulTypedName",
+ "src": "480:3:14",
+ "type": ""
+ },
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "485:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "493:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "array",
+ "nodeType": "YulTypedName",
+ "src": "501:5:14",
+ "type": ""
+ }
+ ],
+ "src": "423:412:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "893:87:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "903:29:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "925:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldataload",
+ "nodeType": "YulIdentifier",
+ "src": "912:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "912:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "903:5:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "968:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "validator_revert_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "941:26:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "941:33:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "941:33:14"
+ }
+ ]
+ },
+ "name": "abi_decode_t_address",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "871:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "879:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "887:5:14",
+ "type": ""
+ }
+ ],
+ "src": "841:139:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1035:84:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "1045:29:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "1067:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldataload",
+ "nodeType": "YulIdentifier",
+ "src": "1054:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1054:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "1045:5:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "1107:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "validator_revert_t_bool",
+ "nodeType": "YulIdentifier",
+ "src": "1083:23:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1083:30:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "1083:30:14"
+ }
+ ]
+ },
+ "name": "abi_decode_t_bool",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "1013:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "1021:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "1029:5:14",
+ "type": ""
+ }
+ ],
+ "src": "986:133:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1176:86:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "1186:29:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "1208:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldataload",
+ "nodeType": "YulIdentifier",
+ "src": "1195:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1195:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "1186:5:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "1250:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "validator_revert_t_bytes4",
+ "nodeType": "YulIdentifier",
+ "src": "1224:25:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1224:32:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "1224:32:14"
+ }
+ ]
+ },
+ "name": "abi_decode_t_bytes4",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "1154:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "1162:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "1170:5:14",
+ "type": ""
+ }
+ ],
+ "src": "1125:137:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1330:79:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "1340:22:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "1355:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "1349:5:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1349:13:14"
+ },
+ "variableNames": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "1340:5:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "1397:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "validator_revert_t_bytes4",
+ "nodeType": "YulIdentifier",
+ "src": "1371:25:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1371:32:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "1371:32:14"
+ }
+ ]
+ },
+ "name": "abi_decode_t_bytes4_fromMemory",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "1308:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "1316:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "1324:5:14",
+ "type": ""
+ }
+ ],
+ "src": "1268:141:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1489:277:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1538:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
+ "nodeType": "YulIdentifier",
+ "src": "1540:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1540:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "1540:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "1517:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1525:4:14",
+ "type": "",
+ "value": "0x1f"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "1513:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1513:17:14"
+ },
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "1532:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "1509:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1509:27:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "1502:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1502:35:14"
+ },
+ "nodeType": "YulIf",
+ "src": "1499:2:14"
+ },
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "1630:34:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "1657:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldataload",
+ "nodeType": "YulIdentifier",
+ "src": "1644:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1644:20:14"
+ },
+ "variables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "1634:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "1673:87:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "1733:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1741:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "1729:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1729:17:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "1748:6:14"
+ },
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "1756:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_available_length_t_bytes_memory_ptr",
+ "nodeType": "YulIdentifier",
+ "src": "1682:46:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1682:78:14"
+ },
+ "variableNames": [
+ {
+ "name": "array",
+ "nodeType": "YulIdentifier",
+ "src": "1673:5:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_t_bytes_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "1467:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "1475:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "array",
+ "nodeType": "YulTypedName",
+ "src": "1483:5:14",
+ "type": ""
+ }
+ ],
+ "src": "1428:338:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1848:278:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "1897:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
+ "nodeType": "YulIdentifier",
+ "src": "1899:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1899:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "1899:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "1876:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "1884:4:14",
+ "type": "",
+ "value": "0x1f"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "1872:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1872:17:14"
+ },
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "1891:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "1868:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1868:27:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "1861:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "1861:35:14"
+ },
+ "nodeType": "YulIf",
+ "src": "1858:2:14"
+ },
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "1989:34:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "2016:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldataload",
+ "nodeType": "YulIdentifier",
+ "src": "2003:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2003:20:14"
+ },
+ "variables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "1993:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "2032:88:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "2093:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2101:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2089:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2089:17:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "2108:6:14"
+ },
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "2116:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_available_length_t_string_memory_ptr",
+ "nodeType": "YulIdentifier",
+ "src": "2041:47:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2041:79:14"
+ },
+ "variableNames": [
+ {
+ "name": "array",
+ "nodeType": "YulIdentifier",
+ "src": "2032:5:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_t_string_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "1826:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "1834:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "array",
+ "nodeType": "YulTypedName",
+ "src": "1842:5:14",
+ "type": ""
+ }
+ ],
+ "src": "1786:340:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2184:87:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "2194:29:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "2216:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldataload",
+ "nodeType": "YulIdentifier",
+ "src": "2203:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2203:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "2194:5:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "2259:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "validator_revert_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "2232:26:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2232:33:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "2232:33:14"
+ }
+ ]
+ },
+ "name": "abi_decode_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "2162:6:14",
+ "type": ""
+ },
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "2170:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "2178:5:14",
+ "type": ""
+ }
+ ],
+ "src": "2132:139:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2343:263:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2389:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "2391:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2391:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "2391:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "2364:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "2373:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "2360:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2360:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2385:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "2356:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2356:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "2353:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "2482:117:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "2497:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2511:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "2501:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "2526:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "2561:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "2572:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2557:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2557:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "2581:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "2536:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2536:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "2526:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_address",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "2313:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "2324:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "2336:6:14",
+ "type": ""
+ }
+ ],
+ "src": "2277:329:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2695:391:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "2741:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "2743:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2743:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "2743:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "2716:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "2725:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "2712:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2712:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2737:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "2708:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2708:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "2705:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "2834:117:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "2849:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2863:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "2853:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "2878:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "2913:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "2924:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "2909:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2909:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "2933:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "2888:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "2888:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "2878:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "2961:118:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "2976:16:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "2990:2:14",
+ "type": "",
+ "value": "32"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "2980:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "3006:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "3041:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "3052:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "3037:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3037:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "3061:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "3016:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3016:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value1",
+ "nodeType": "YulIdentifier",
+ "src": "3006:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_addresst_address",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "2657:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "2668:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "2680:6:14",
+ "type": ""
+ },
+ {
+ "name": "value1",
+ "nodeType": "YulTypedName",
+ "src": "2688:6:14",
+ "type": ""
+ }
+ ],
+ "src": "2612:474:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3192:519:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3238:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "3240:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3240:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3240:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "3213:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "3222:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "3209:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3209:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3234:2:14",
+ "type": "",
+ "value": "96"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "3205:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3205:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "3202:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "3331:117:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "3346:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3360:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "3350:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "3375:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "3410:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "3421:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "3406:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3406:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "3430:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "3385:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3385:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "3375:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "3458:118:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "3473:16:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3487:2:14",
+ "type": "",
+ "value": "32"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "3477:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "3503:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "3538:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "3549:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "3534:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3534:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "3558:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "3513:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3513:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value1",
+ "nodeType": "YulIdentifier",
+ "src": "3503:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "3586:118:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "3601:16:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3615:2:14",
+ "type": "",
+ "value": "64"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "3605:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "3631:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "3666:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "3677:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "3662:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3662:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "3686:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "3641:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3641:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value2",
+ "nodeType": "YulIdentifier",
+ "src": "3631:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_addresst_addresst_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "3146:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "3157:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "3169:6:14",
+ "type": ""
+ },
+ {
+ "name": "value1",
+ "nodeType": "YulTypedName",
+ "src": "3177:6:14",
+ "type": ""
+ },
+ {
+ "name": "value2",
+ "nodeType": "YulTypedName",
+ "src": "3185:6:14",
+ "type": ""
+ }
+ ],
+ "src": "3092:619:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3843:817:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "3890:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "3892:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3892:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "3892:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "3864:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "3873:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "3860:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3860:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "3885:3:14",
+ "type": "",
+ "value": "128"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "3856:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "3856:33:14"
+ },
+ "nodeType": "YulIf",
+ "src": "3853:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "3983:117:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "3998:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "4012:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "4002:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "4027:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "4062:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "4073:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "4058:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4058:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "4082:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "4037:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4037:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "4027:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "4110:118:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "4125:16:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "4139:2:14",
+ "type": "",
+ "value": "32"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "4129:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "4155:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "4190:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "4201:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "4186:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4186:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "4210:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "4165:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4165:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value1",
+ "nodeType": "YulIdentifier",
+ "src": "4155:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "4238:118:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "4253:16:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "4267:2:14",
+ "type": "",
+ "value": "64"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "4257:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "4283:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "4318:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "4329:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "4314:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4314:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "4338:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "4293:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4293:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value2",
+ "nodeType": "YulIdentifier",
+ "src": "4283:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "4366:287:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "4381:46:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "4412:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "4423:2:14",
+ "type": "",
+ "value": "96"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "4408:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4408:18:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldataload",
+ "nodeType": "YulIdentifier",
+ "src": "4395:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4395:32:14"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "4385:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "4474:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
+ "nodeType": "YulIdentifier",
+ "src": "4476:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4476:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "4476:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "4446:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "4454:18:14",
+ "type": "",
+ "value": "0xffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "4443:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4443:30:14"
+ },
+ "nodeType": "YulIf",
+ "src": "4440:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "4571:72:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "4615:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "4626:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "4611:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4611:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "4635:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_bytes_memory_ptr",
+ "nodeType": "YulIdentifier",
+ "src": "4581:29:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4581:62:14"
+ },
+ "variableNames": [
+ {
+ "name": "value3",
+ "nodeType": "YulIdentifier",
+ "src": "4571:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "3789:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "3800:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "3812:6:14",
+ "type": ""
+ },
+ {
+ "name": "value1",
+ "nodeType": "YulTypedName",
+ "src": "3820:6:14",
+ "type": ""
+ },
+ {
+ "name": "value2",
+ "nodeType": "YulTypedName",
+ "src": "3828:6:14",
+ "type": ""
+ },
+ {
+ "name": "value3",
+ "nodeType": "YulTypedName",
+ "src": "3836:6:14",
+ "type": ""
+ }
+ ],
+ "src": "3717:943:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "4746:388:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "4792:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "4794:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4794:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "4794:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "4767:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "4776:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "4763:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4763:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "4788:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "4759:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4759:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "4756:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "4885:117:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "4900:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "4914:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "4904:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "4929:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "4964:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "4975:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "4960:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4960:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "4984:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "4939:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "4939:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "4929:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "5012:115:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "5027:16:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "5041:2:14",
+ "type": "",
+ "value": "32"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "5031:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "5057:60:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "5089:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "5100:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "5085:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5085:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "5109:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_bool",
+ "nodeType": "YulIdentifier",
+ "src": "5067:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5067:50:14"
+ },
+ "variableNames": [
+ {
+ "name": "value1",
+ "nodeType": "YulIdentifier",
+ "src": "5057:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_addresst_bool",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "4708:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "4719:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "4731:6:14",
+ "type": ""
+ },
+ {
+ "name": "value1",
+ "nodeType": "YulTypedName",
+ "src": "4739:6:14",
+ "type": ""
+ }
+ ],
+ "src": "4666:468:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "5233:561:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "5279:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "5281:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5281:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "5281:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "5254:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "5263:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "5250:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5250:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "5275:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "5246:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5246:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "5243:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "5372:117:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "5387:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "5401:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "5391:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "5416:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "5451:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "5462:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "5447:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5447:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "5471:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "5426:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5426:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "5416:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "5499:288:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "5514:46:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "5545:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "5556:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "5541:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5541:18:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldataload",
+ "nodeType": "YulIdentifier",
+ "src": "5528:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5528:32:14"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "5518:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "5607:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
+ "nodeType": "YulIdentifier",
+ "src": "5609:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5609:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "5609:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "5579:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "5587:18:14",
+ "type": "",
+ "value": "0xffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "5576:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5576:30:14"
+ },
+ "nodeType": "YulIf",
+ "src": "5573:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "5704:73:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "5749:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "5760:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "5745:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5745:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "5769:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_string_memory_ptr",
+ "nodeType": "YulIdentifier",
+ "src": "5714:30:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5714:63:14"
+ },
+ "variableNames": [
+ {
+ "name": "value1",
+ "nodeType": "YulIdentifier",
+ "src": "5704:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_addresst_string_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "5195:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "5206:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "5218:6:14",
+ "type": ""
+ },
+ {
+ "name": "value1",
+ "nodeType": "YulTypedName",
+ "src": "5226:6:14",
+ "type": ""
+ }
+ ],
+ "src": "5140:654:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "5883:391:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "5929:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "5931:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5931:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "5931:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "5904:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "5913:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "5900:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5900:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "5925:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "5896:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "5896:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "5893:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "6022:117:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "6037:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "6051:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "6041:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "6066:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "6101:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "6112:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "6097:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6097:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "6121:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "6076:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6076:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "6066:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "6149:118:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "6164:16:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "6178:2:14",
+ "type": "",
+ "value": "32"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "6168:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "6194:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "6229:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "6240:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "6225:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6225:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "6249:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "6204:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6204:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value1",
+ "nodeType": "YulIdentifier",
+ "src": "6194:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_addresst_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "5845:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "5856:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "5868:6:14",
+ "type": ""
+ },
+ {
+ "name": "value1",
+ "nodeType": "YulTypedName",
+ "src": "5876:6:14",
+ "type": ""
+ }
+ ],
+ "src": "5800:474:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "6345:262:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "6391:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "6393:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6393:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "6393:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "6366:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "6375:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "6362:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6362:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "6387:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "6358:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6358:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "6355:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "6484:116:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "6499:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "6513:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "6503:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "6528:62:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "6562:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "6573:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "6558:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6558:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "6582:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_bytes4",
+ "nodeType": "YulIdentifier",
+ "src": "6538:19:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6538:52:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "6528:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_bytes4",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "6315:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "6326:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "6338:6:14",
+ "type": ""
+ }
+ ],
+ "src": "6280:327:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "6689:273:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "6735:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "6737:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6737:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "6737:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "6710:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "6719:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "6706:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6706:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "6731:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "6702:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6702:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "6699:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "6828:127:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "6843:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "6857:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "6847:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "6872:73:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "6917:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "6928:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "6913:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6913:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "6937:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_bytes4_fromMemory",
+ "nodeType": "YulIdentifier",
+ "src": "6882:30:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "6882:63:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "6872:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_bytes4_fromMemory",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "6659:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "6670:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "6682:6:14",
+ "type": ""
+ }
+ ],
+ "src": "6613:349:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "7034:263:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "7080:83:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulIdentifier",
+ "src": "7082:77:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7082:79:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "7082:79:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "7055:7:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "7064:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "7051:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7051:23:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "7076:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "slt",
+ "nodeType": "YulIdentifier",
+ "src": "7047:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7047:32:14"
+ },
+ "nodeType": "YulIf",
+ "src": "7044:2:14"
+ },
+ {
+ "nodeType": "YulBlock",
+ "src": "7173:117:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "7188:15:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "7202:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "offset",
+ "nodeType": "YulTypedName",
+ "src": "7192:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "7217:63:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "7252:9:14"
+ },
+ {
+ "name": "offset",
+ "nodeType": "YulIdentifier",
+ "src": "7263:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "7248:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7248:22:14"
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulIdentifier",
+ "src": "7272:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_decode_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "7227:20:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7227:53:14"
+ },
+ "variableNames": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "7217:6:14"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_decode_tuple_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "7004:9:14",
+ "type": ""
+ },
+ {
+ "name": "dataEnd",
+ "nodeType": "YulTypedName",
+ "src": "7015:7:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "7027:6:14",
+ "type": ""
+ }
+ ],
+ "src": "6968:329:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "7368:53:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7385:3:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "7408:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "7390:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7390:24:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "7378:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7378:37:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "7378:37:14"
+ }
+ ]
+ },
+ "name": "abi_encode_t_address_to_t_address_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "7356:5:14",
+ "type": ""
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "7363:3:14",
+ "type": ""
+ }
+ ],
+ "src": "7303:118:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "7486:50:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7503:3:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "7523:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_bool",
+ "nodeType": "YulIdentifier",
+ "src": "7508:14:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7508:21:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "7496:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7496:34:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "7496:34:14"
+ }
+ ]
+ },
+ "name": "abi_encode_t_bool_to_t_bool_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "7474:5:14",
+ "type": ""
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "7481:3:14",
+ "type": ""
+ }
+ ],
+ "src": "7427:109:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "7632:270:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "7642:52:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "7688:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "array_length_t_bytes_memory_ptr",
+ "nodeType": "YulIdentifier",
+ "src": "7656:31:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7656:38:14"
+ },
+ "variables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "7646:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "7703:77:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7768:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "7773:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "7710:57:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7710:70:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7703:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "7815:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "7822:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "7811:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7811:16:14"
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7829:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "7834:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "copy_memory_to_memory",
+ "nodeType": "YulIdentifier",
+ "src": "7789:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7789:52:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "7789:52:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "7850:46:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "7861:3:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "7888:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "round_up_to_mul_of_32",
+ "nodeType": "YulIdentifier",
+ "src": "7866:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7866:29:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "7857:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "7857:39:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "7850:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "7613:5:14",
+ "type": ""
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "7620:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "7628:3:14",
+ "type": ""
+ }
+ ],
+ "src": "7542:360:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "8000:272:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "8010:53:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "8057:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "array_length_t_string_memory_ptr",
+ "nodeType": "YulIdentifier",
+ "src": "8024:32:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8024:39:14"
+ },
+ "variables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "8014:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "8072:78:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8138:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "8143:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "8079:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8079:71:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8072:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "8185:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "8192:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "8181:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8181:16:14"
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8199:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "8204:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "copy_memory_to_memory",
+ "nodeType": "YulIdentifier",
+ "src": "8159:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8159:52:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "8159:52:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "8220:46:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8231:3:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "8258:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "round_up_to_mul_of_32",
+ "nodeType": "YulIdentifier",
+ "src": "8236:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8236:29:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "8227:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8227:39:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "8220:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "7981:5:14",
+ "type": ""
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "7988:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "7996:3:14",
+ "type": ""
+ }
+ ],
+ "src": "7908:364:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "8388:267:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "8398:53:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "8445:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "array_length_t_string_memory_ptr",
+ "nodeType": "YulIdentifier",
+ "src": "8412:32:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8412:39:14"
+ },
+ "variables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "8402:6:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "8460:96:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8544:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "8549:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "8467:76:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8467:89:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8460:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "8591:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "8598:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "8587:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8587:16:14"
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8605:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "8610:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "copy_memory_to_memory",
+ "nodeType": "YulIdentifier",
+ "src": "8565:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8565:52:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "8565:52:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "8626:23:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8637:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "8642:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "8633:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8633:16:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "8626:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "8369:5:14",
+ "type": ""
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "8376:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "8384:3:14",
+ "type": ""
+ }
+ ],
+ "src": "8278:377:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "8807:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "8817:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8883:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "8888:2:14",
+ "type": "",
+ "value": "50"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "8824:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8824:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8817:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "8989:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
+ "nodeType": "YulIdentifier",
+ "src": "8900:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "8900:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "8900:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "9002:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9013:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "9018:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "9009:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "9009:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "9002:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "8795:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "8803:3:14",
+ "type": ""
+ }
+ ],
+ "src": "8661:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "9179:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "9189:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9255:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "9260:2:14",
+ "type": "",
+ "value": "38"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "9196:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "9196:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9189:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9361:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe",
+ "nodeType": "YulIdentifier",
+ "src": "9272:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "9272:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "9272:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "9374:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9385:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "9390:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "9381:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "9381:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "9374:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "9167:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "9175:3:14",
+ "type": ""
+ }
+ ],
+ "src": "9033:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "9551:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "9561:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9627:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "9632:2:14",
+ "type": "",
+ "value": "28"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "9568:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "9568:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9561:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9733:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
+ "nodeType": "YulIdentifier",
+ "src": "9644:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "9644:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "9644:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "9746:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9757:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "9762:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "9753:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "9753:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "9746:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "9539:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "9547:3:14",
+ "type": ""
+ }
+ ],
+ "src": "9405:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "9923:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "9933:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9999:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "10004:2:14",
+ "type": "",
+ "value": "36"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "9940:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "9940:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "9933:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10105:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4",
+ "nodeType": "YulIdentifier",
+ "src": "10016:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "10016:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "10016:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "10118:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10129:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "10134:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "10125:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "10125:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "10118:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "9911:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "9919:3:14",
+ "type": ""
+ }
+ ],
+ "src": "9777:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "10295:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "10305:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10371:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "10376:2:14",
+ "type": "",
+ "value": "25"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "10312:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "10312:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10305:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10477:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05",
+ "nodeType": "YulIdentifier",
+ "src": "10388:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "10388:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "10388:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "10490:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10501:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "10506:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "10497:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "10497:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "10490:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "10283:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "10291:3:14",
+ "type": ""
+ }
+ ],
+ "src": "10149:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "10667:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "10677:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10743:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "10748:2:14",
+ "type": "",
+ "value": "44"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "10684:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "10684:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10677:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10849:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c",
+ "nodeType": "YulIdentifier",
+ "src": "10760:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "10760:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "10760:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "10862:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "10873:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "10878:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "10869:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "10869:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "10862:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "10655:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "10663:3:14",
+ "type": ""
+ }
+ ],
+ "src": "10521:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "11039:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "11049:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11115:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "11120:2:14",
+ "type": "",
+ "value": "56"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "11056:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11056:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11049:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11221:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d",
+ "nodeType": "YulIdentifier",
+ "src": "11132:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11132:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "11132:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "11234:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11245:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "11250:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "11241:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11241:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "11234:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "11027:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "11035:3:14",
+ "type": ""
+ }
+ ],
+ "src": "10893:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "11411:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "11421:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11487:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "11492:2:14",
+ "type": "",
+ "value": "42"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "11428:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11428:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11421:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11593:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba",
+ "nodeType": "YulIdentifier",
+ "src": "11504:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11504:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "11504:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "11606:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11617:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "11622:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "11613:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11613:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "11606:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "11399:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "11407:3:14",
+ "type": ""
+ }
+ ],
+ "src": "11265:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "11783:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "11793:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11859:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "11864:2:14",
+ "type": "",
+ "value": "41"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "11800:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11800:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11793:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11965:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397",
+ "nodeType": "YulIdentifier",
+ "src": "11876:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11876:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "11876:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "11978:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "11989:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "11994:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "11985:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "11985:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "11978:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "11771:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "11779:3:14",
+ "type": ""
+ }
+ ],
+ "src": "11637:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "12155:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "12165:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "12231:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "12236:2:14",
+ "type": "",
+ "value": "46"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "12172:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12172:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "12165:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "12337:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4",
+ "nodeType": "YulIdentifier",
+ "src": "12248:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12248:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "12248:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "12350:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "12361:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "12366:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "12357:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12357:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "12350:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "12143:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "12151:3:14",
+ "type": ""
+ }
+ ],
+ "src": "12009:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "12527:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "12537:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "12603:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "12608:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "12544:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12544:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "12537:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "12709:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6",
+ "nodeType": "YulIdentifier",
+ "src": "12620:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12620:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "12620:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "12722:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "12733:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "12738:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "12729:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12729:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "12722:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "12515:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "12523:3:14",
+ "type": ""
+ }
+ ],
+ "src": "12381:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "12899:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "12909:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "12975:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "12980:2:14",
+ "type": "",
+ "value": "49"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "12916:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12916:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "12909:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "13081:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_8e9ed1638ba7e2d59e03d0957c9339381732ac84d73f65c86c45db1467eafa2a",
+ "nodeType": "YulIdentifier",
+ "src": "12992:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "12992:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "12992:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "13094:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "13105:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "13110:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "13101:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13101:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "13094:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_8e9ed1638ba7e2d59e03d0957c9339381732ac84d73f65c86c45db1467eafa2a_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "12887:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "12895:3:14",
+ "type": ""
+ }
+ ],
+ "src": "12753:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "13271:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "13281:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "13347:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "13352:2:14",
+ "type": "",
+ "value": "44"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "13288:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13288:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "13281:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "13453:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
+ "nodeType": "YulIdentifier",
+ "src": "13364:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13364:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "13364:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "13466:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "13477:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "13482:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "13473:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13473:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "13466:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "13259:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "13267:3:14",
+ "type": ""
+ }
+ ],
+ "src": "13125:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "13643:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "13653:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "13719:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "13724:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "13660:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13660:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "13653:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "13825:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
+ "nodeType": "YulIdentifier",
+ "src": "13736:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13736:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "13736:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "13838:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "13849:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "13854:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "13845:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "13845:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "13838:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "13631:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "13639:3:14",
+ "type": ""
+ }
+ ],
+ "src": "13497:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "14015:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "14025:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "14091:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "14096:2:14",
+ "type": "",
+ "value": "41"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "14032:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14032:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "14025:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "14197:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950",
+ "nodeType": "YulIdentifier",
+ "src": "14108:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14108:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "14108:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "14210:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "14221:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "14226:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "14217:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14217:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "14210:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "14003:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "14011:3:14",
+ "type": ""
+ }
+ ],
+ "src": "13869:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "14387:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "14397:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "14463:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "14468:2:14",
+ "type": "",
+ "value": "47"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "14404:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14404:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "14397:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "14569:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb",
+ "nodeType": "YulIdentifier",
+ "src": "14480:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14480:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "14480:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "14582:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "14593:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "14598:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "14589:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14589:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "14582:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "14375:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "14383:3:14",
+ "type": ""
+ }
+ ],
+ "src": "14241:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "14759:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "14769:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "14835:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "14840:2:14",
+ "type": "",
+ "value": "33"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "14776:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14776:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "14769:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "14941:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942",
+ "nodeType": "YulIdentifier",
+ "src": "14852:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14852:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "14852:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "14954:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "14965:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "14970:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "14961:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "14961:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "14954:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "14747:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "14755:3:14",
+ "type": ""
+ }
+ ],
+ "src": "14613:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "15131:220:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "15141:74:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "15207:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "15212:2:14",
+ "type": "",
+ "value": "49"
+ }
+ ],
+ "functionName": {
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "15148:58:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15148:67:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "15141:3:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "15313:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "store_literal_in_memory_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
+ "nodeType": "YulIdentifier",
+ "src": "15224:88:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15224:93:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "15224:93:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "15326:19:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "15337:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "15342:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "15333:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15333:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "15326:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "15119:3:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "15127:3:14",
+ "type": ""
+ }
+ ],
+ "src": "14985:366:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "15422:53:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "15439:3:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "15462:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "15444:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15444:24:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "15432:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15432:37:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "15432:37:14"
+ }
+ ]
+ },
+ "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "15410:5:14",
+ "type": ""
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "15417:3:14",
+ "type": ""
+ }
+ ],
+ "src": "15357:118:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "15665:251:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "15676:102:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "15765:6:14"
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "15774:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "15683:81:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15683:95:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "15676:3:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "15788:102:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value1",
+ "nodeType": "YulIdentifier",
+ "src": "15877:6:14"
+ },
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "15886:3:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "15795:81:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "15795:95:14"
+ },
+ "variableNames": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "15788:3:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "15900:10:14",
+ "value": {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "15907:3:14"
+ },
+ "variableNames": [
+ {
+ "name": "end",
+ "nodeType": "YulIdentifier",
+ "src": "15900:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "15636:3:14",
+ "type": ""
+ },
+ {
+ "name": "value1",
+ "nodeType": "YulTypedName",
+ "src": "15642:6:14",
+ "type": ""
+ },
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "15650:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "end",
+ "nodeType": "YulTypedName",
+ "src": "15661:3:14",
+ "type": ""
+ }
+ ],
+ "src": "15481:435:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "16020:124:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "16030:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16042:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "16053:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "16038:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16038:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "16030:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "16110:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16123:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "16134:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "16119:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16119:17:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_address_to_t_address_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "16066:43:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16066:71:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "16066:71:14"
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "15992:9:14",
+ "type": ""
+ },
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "16004:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "16015:4:14",
+ "type": ""
+ }
+ ],
+ "src": "15922:222:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "16350:440:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "16360:27:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16372:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "16383:3:14",
+ "type": "",
+ "value": "128"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "16368:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16368:19:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "16360:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "16441:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16454:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "16465:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "16450:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16450:17:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_address_to_t_address_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "16397:43:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16397:71:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "16397:71:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value1",
+ "nodeType": "YulIdentifier",
+ "src": "16522:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16535:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "16546:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "16531:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16531:18:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_address_to_t_address_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "16478:43:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16478:72:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "16478:72:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value2",
+ "nodeType": "YulIdentifier",
+ "src": "16604:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16617:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "16628:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "16613:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16613:18:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "16560:43:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16560:72:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "16560:72:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16653:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "16664:2:14",
+ "type": "",
+ "value": "96"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "16649:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16649:18:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "16673:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16679:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "16669:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16669:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "16642:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16642:48:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "16642:48:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "16699:84:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value3",
+ "nodeType": "YulIdentifier",
+ "src": "16769:6:14"
+ },
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "16778:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "16707:61:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16707:76:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "16699:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "16298:9:14",
+ "type": ""
+ },
+ {
+ "name": "value3",
+ "nodeType": "YulTypedName",
+ "src": "16310:6:14",
+ "type": ""
+ },
+ {
+ "name": "value2",
+ "nodeType": "YulTypedName",
+ "src": "16318:6:14",
+ "type": ""
+ },
+ {
+ "name": "value1",
+ "nodeType": "YulTypedName",
+ "src": "16326:6:14",
+ "type": ""
+ },
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "16334:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "16345:4:14",
+ "type": ""
+ }
+ ],
+ "src": "16150:640:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "16888:118:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "16898:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16910:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "16921:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "16906:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16906:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "16898:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "16972:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "16985:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "16996:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "16981:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16981:17:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_bool_to_t_bool_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "16934:37:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "16934:65:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "16934:65:14"
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "16860:9:14",
+ "type": ""
+ },
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "16872:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "16883:4:14",
+ "type": ""
+ }
+ ],
+ "src": "16796:210:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "17130:195:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "17140:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "17152:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "17163:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "17148:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17148:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17140:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "17187:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "17198:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "17183:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17183:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17206:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "17212:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "17202:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17202:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "17176:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17176:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "17176:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "17232:86:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "17304:6:14"
+ },
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17313:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "17240:63:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17240:78:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17232:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "17102:9:14",
+ "type": ""
+ },
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "17114:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "17125:4:14",
+ "type": ""
+ }
+ ],
+ "src": "17012:313:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "17502:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "17512:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "17524:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "17535:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "17520:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17520:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17512:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "17559:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "17570:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "17555:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17555:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17578:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "17584:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "17574:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17574:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "17548:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17548:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "17548:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "17604:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17738:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "17612:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17612:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17604:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "17482:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "17497:4:14",
+ "type": ""
+ }
+ ],
+ "src": "17331:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "17927:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "17937:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "17949:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "17960:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "17945:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17945:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "17937:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "17984:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "17995:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "17980:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17980:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18003:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "18009:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "17999:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17999:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "17973:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "17973:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "17973:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "18029:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18163:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "18037:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18037:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18029:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "17907:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "17922:4:14",
+ "type": ""
+ }
+ ],
+ "src": "17756:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "18352:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "18362:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "18374:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "18385:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "18370:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18370:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18362:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "18409:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "18420:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "18405:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18405:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18428:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "18434:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "18424:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18424:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "18398:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18398:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "18398:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "18454:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18588:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "18462:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18462:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18454:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "18332:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "18347:4:14",
+ "type": ""
+ }
+ ],
+ "src": "18181:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "18777:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "18787:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "18799:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "18810:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "18795:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18795:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18787:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "18834:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "18845:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "18830:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18830:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18853:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "18859:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "18849:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18849:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "18823:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18823:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "18823:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "18879:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "19013:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "18887:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "18887:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "18879:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "18757:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "18772:4:14",
+ "type": ""
+ }
+ ],
+ "src": "18606:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "19202:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "19212:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "19224:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "19235:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "19220:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19220:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "19212:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "19259:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "19270:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "19255:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19255:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "19278:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "19284:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "19274:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19274:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "19248:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19248:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "19248:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "19304:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "19438:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "19312:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19312:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "19304:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "19182:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "19197:4:14",
+ "type": ""
+ }
+ ],
+ "src": "19031:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "19627:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "19637:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "19649:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "19660:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "19645:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19645:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "19637:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "19684:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "19695:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "19680:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19680:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "19703:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "19709:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "19699:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19699:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "19673:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19673:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "19673:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "19729:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "19863:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "19737:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "19737:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "19729:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "19607:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "19622:4:14",
+ "type": ""
+ }
+ ],
+ "src": "19456:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "20052:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "20062:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "20074:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "20085:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "20070:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20070:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "20062:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "20109:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "20120:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "20105:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20105:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "20128:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "20134:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "20124:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20124:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "20098:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20098:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "20098:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "20154:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "20288:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "20162:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20162:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "20154:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "20032:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "20047:4:14",
+ "type": ""
+ }
+ ],
+ "src": "19881:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "20477:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "20487:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "20499:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "20510:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "20495:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20495:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "20487:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "20534:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "20545:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "20530:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20530:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "20553:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "20559:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "20549:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20549:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "20523:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20523:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "20523:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "20579:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "20713:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "20587:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20587:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "20579:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "20457:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "20472:4:14",
+ "type": ""
+ }
+ ],
+ "src": "20306:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "20902:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "20912:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "20924:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "20935:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "20920:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20920:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "20912:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "20959:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "20970:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "20955:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20955:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "20978:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "20984:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "20974:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20974:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "20948:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "20948:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "20948:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "21004:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "21138:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "21012:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21012:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "21004:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "20882:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "20897:4:14",
+ "type": ""
+ }
+ ],
+ "src": "20731:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "21327:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "21337:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "21349:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "21360:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "21345:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21345:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "21337:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "21384:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "21395:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "21380:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21380:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "21403:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "21409:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "21399:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21399:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "21373:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21373:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "21373:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "21429:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "21563:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "21437:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21437:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "21429:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "21307:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "21322:4:14",
+ "type": ""
+ }
+ ],
+ "src": "21156:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "21752:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "21762:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "21774:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "21785:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "21770:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21770:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "21762:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "21809:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "21820:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "21805:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21805:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "21828:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "21834:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "21824:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21824:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "21798:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21798:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "21798:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "21854:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "21988:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "21862:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "21862:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "21854:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "21732:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "21747:4:14",
+ "type": ""
+ }
+ ],
+ "src": "21581:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "22177:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "22187:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "22199:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "22210:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "22195:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22195:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "22187:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "22234:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "22245:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "22230:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22230:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "22253:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "22259:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "22249:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22249:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "22223:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22223:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "22223:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "22279:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "22413:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_8e9ed1638ba7e2d59e03d0957c9339381732ac84d73f65c86c45db1467eafa2a_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "22287:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22287:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "22279:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_8e9ed1638ba7e2d59e03d0957c9339381732ac84d73f65c86c45db1467eafa2a__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "22157:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "22172:4:14",
+ "type": ""
+ }
+ ],
+ "src": "22006:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "22602:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "22612:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "22624:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "22635:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "22620:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22620:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "22612:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "22659:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "22670:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "22655:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22655:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "22678:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "22684:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "22674:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22674:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "22648:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22648:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "22648:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "22704:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "22838:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "22712:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "22712:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "22704:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "22582:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "22597:4:14",
+ "type": ""
+ }
+ ],
+ "src": "22431:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "23027:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "23037:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "23049:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23060:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "23045:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23045:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "23037:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "23084:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23095:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "23080:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23080:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "23103:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "23109:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "23099:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23099:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "23073:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23073:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23073:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "23129:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "23263:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "23137:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23137:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "23129:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "23007:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "23022:4:14",
+ "type": ""
+ }
+ ],
+ "src": "22856:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "23452:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "23462:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "23474:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23485:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "23470:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23470:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "23462:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "23509:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23520:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "23505:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23505:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "23528:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "23534:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "23524:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23524:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "23498:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23498:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23498:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "23554:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "23688:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "23562:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23562:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "23554:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "23432:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "23447:4:14",
+ "type": ""
+ }
+ ],
+ "src": "23281:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "23877:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "23887:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "23899:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23910:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "23895:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23895:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "23887:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "23934:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "23945:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "23930:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23930:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "23953:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "23959:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "23949:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23949:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "23923:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23923:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "23923:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "23979:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "24113:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "23987:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "23987:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "23979:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "23857:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "23872:4:14",
+ "type": ""
+ }
+ ],
+ "src": "23706:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "24302:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "24312:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "24324:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24335:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "24320:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24320:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "24312:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "24359:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24370:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "24355:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24355:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "24378:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "24384:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "24374:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24374:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "24348:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24348:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "24348:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "24404:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "24538:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "24412:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24412:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "24404:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "24282:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "24297:4:14",
+ "type": ""
+ }
+ ],
+ "src": "24131:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "24727:248:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "24737:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "24749:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24760:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "24745:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24745:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "24737:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "24784:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "24795:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "24780:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24780:17:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "24803:4:14"
+ },
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "24809:9:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "24799:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24799:20:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "24773:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24773:47:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "24773:47:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "24829:139:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "24963:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2_to_t_string_memory_ptr_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "24837:124:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "24837:131:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "24829:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2__to_t_string_memory_ptr__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "24707:9:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "24722:4:14",
+ "type": ""
+ }
+ ],
+ "src": "24556:419:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "25079:124:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "25089:26:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "25101:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "25112:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "25097:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25097:18:14"
+ },
+ "variableNames": [
+ {
+ "name": "tail",
+ "nodeType": "YulIdentifier",
+ "src": "25089:4:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "value0",
+ "nodeType": "YulIdentifier",
+ "src": "25169:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "headStart",
+ "nodeType": "YulIdentifier",
+ "src": "25182:9:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "25193:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "25178:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25178:17:14"
+ }
+ ],
+ "functionName": {
+ "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
+ "nodeType": "YulIdentifier",
+ "src": "25125:43:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25125:71:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "25125:71:14"
+ }
+ ]
+ },
+ "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "headStart",
+ "nodeType": "YulTypedName",
+ "src": "25051:9:14",
+ "type": ""
+ },
+ {
+ "name": "value0",
+ "nodeType": "YulTypedName",
+ "src": "25063:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "tail",
+ "nodeType": "YulTypedName",
+ "src": "25074:4:14",
+ "type": ""
+ }
+ ],
+ "src": "24981:222:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "25250:88:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "25260:30:14",
+ "value": {
+ "arguments": [],
+ "functionName": {
+ "name": "allocate_unbounded",
+ "nodeType": "YulIdentifier",
+ "src": "25270:18:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25270:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "25260:6:14"
+ }
+ ]
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "25319:6:14"
+ },
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "25327:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "finalize_allocation",
+ "nodeType": "YulIdentifier",
+ "src": "25299:19:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25299:33:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "25299:33:14"
+ }
+ ]
+ },
+ "name": "allocate_memory",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "size",
+ "nodeType": "YulTypedName",
+ "src": "25234:4:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "25243:6:14",
+ "type": ""
+ }
+ ],
+ "src": "25209:129:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "25384:35:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "25394:19:14",
+ "value": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "25410:2:14",
+ "type": "",
+ "value": "64"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "25404:5:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25404:9:14"
+ },
+ "variableNames": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "25394:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "allocate_unbounded",
+ "nodeType": "YulFunctionDefinition",
+ "returnVariables": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "25377:6:14",
+ "type": ""
+ }
+ ],
+ "src": "25344:75:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "25491:241:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "25596:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x41",
+ "nodeType": "YulIdentifier",
+ "src": "25598:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25598:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "25598:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "25568:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "25576:18:14",
+ "type": "",
+ "value": "0xffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "25565:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25565:30:14"
+ },
+ "nodeType": "YulIf",
+ "src": "25562:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "25628:37:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "25658:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "round_up_to_mul_of_32",
+ "nodeType": "YulIdentifier",
+ "src": "25636:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25636:29:14"
+ },
+ "variableNames": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "25628:4:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "25702:23:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "25714:4:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "25720:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "25710:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25710:15:14"
+ },
+ "variableNames": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "25702:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "array_allocation_size_t_bytes_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "25475:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "size",
+ "nodeType": "YulTypedName",
+ "src": "25486:4:14",
+ "type": ""
+ }
+ ],
+ "src": "25425:307:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "25805:241:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "25910:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x41",
+ "nodeType": "YulIdentifier",
+ "src": "25912:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25912:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "25912:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "25882:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "25890:18:14",
+ "type": "",
+ "value": "0xffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "25879:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25879:30:14"
+ },
+ "nodeType": "YulIf",
+ "src": "25876:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "25942:37:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "25972:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "round_up_to_mul_of_32",
+ "nodeType": "YulIdentifier",
+ "src": "25950:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "25950:29:14"
+ },
+ "variableNames": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "25942:4:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "26016:23:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "26028:4:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "26034:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "26024:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26024:15:14"
+ },
+ "variableNames": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "26016:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "array_allocation_size_t_string_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "25789:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "size",
+ "nodeType": "YulTypedName",
+ "src": "25800:4:14",
+ "type": ""
+ }
+ ],
+ "src": "25738:308:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "26110:40:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "26121:22:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "26137:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "26131:5:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26131:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "26121:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "array_length_t_bytes_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "26093:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "26103:6:14",
+ "type": ""
+ }
+ ],
+ "src": "26052:98:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "26215:40:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "26226:22:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "26242:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "26236:5:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26236:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "26226:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "array_length_t_string_memory_ptr",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "26198:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "26208:6:14",
+ "type": ""
+ }
+ ],
+ "src": "26156:99:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "26356:73:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "26373:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "26378:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "26366:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26366:19:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "26366:19:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "26394:29:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "26413:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "26418:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "26409:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26409:14:14"
+ },
+ "variableNames": [
+ {
+ "name": "updated_pos",
+ "nodeType": "YulIdentifier",
+ "src": "26394:11:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "26328:3:14",
+ "type": ""
+ },
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "26333:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "updated_pos",
+ "nodeType": "YulTypedName",
+ "src": "26344:11:14",
+ "type": ""
+ }
+ ],
+ "src": "26261:168:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "26531:73:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "26548:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "26553:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "26541:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26541:19:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "26541:19:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "26569:29:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "26588:3:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "26593:4:14",
+ "type": "",
+ "value": "0x20"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "26584:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26584:14:14"
+ },
+ "variableNames": [
+ {
+ "name": "updated_pos",
+ "nodeType": "YulIdentifier",
+ "src": "26569:11:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "26503:3:14",
+ "type": ""
+ },
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "26508:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "updated_pos",
+ "nodeType": "YulTypedName",
+ "src": "26519:11:14",
+ "type": ""
+ }
+ ],
+ "src": "26435:169:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "26724:34:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "26734:18:14",
+ "value": {
+ "name": "pos",
+ "nodeType": "YulIdentifier",
+ "src": "26749:3:14"
+ },
+ "variableNames": [
+ {
+ "name": "updated_pos",
+ "nodeType": "YulIdentifier",
+ "src": "26734:11:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "pos",
+ "nodeType": "YulTypedName",
+ "src": "26696:3:14",
+ "type": ""
+ },
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "26701:6:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "updated_pos",
+ "nodeType": "YulTypedName",
+ "src": "26712:11:14",
+ "type": ""
+ }
+ ],
+ "src": "26610:148:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "26808:261:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "26818:25:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "26841:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "26823:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26823:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "26818:1:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "26852:25:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "26875:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "26857:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26857:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "26852:1:14"
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27015:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x11",
+ "nodeType": "YulIdentifier",
+ "src": "27017:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27017:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "27017:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "26936:1:14"
+ },
+ {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "26943:66:14",
+ "type": "",
+ "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+ },
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "27011:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "26939:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26939:74:14"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "26933:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "26933:81:14"
+ },
+ "nodeType": "YulIf",
+ "src": "26930:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "27047:16:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "27058:1:14"
+ },
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "27061:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "27054:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27054:9:14"
+ },
+ "variableNames": [
+ {
+ "name": "sum",
+ "nodeType": "YulIdentifier",
+ "src": "27047:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "checked_add_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "x",
+ "nodeType": "YulTypedName",
+ "src": "26795:1:14",
+ "type": ""
+ },
+ {
+ "name": "y",
+ "nodeType": "YulTypedName",
+ "src": "26798:1:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "sum",
+ "nodeType": "YulTypedName",
+ "src": "26804:3:14",
+ "type": ""
+ }
+ ],
+ "src": "26764:305:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27117:143:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "27127:25:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "27150:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "27132:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27132:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "27127:1:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "27161:25:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "27184:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "27166:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27166:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "27161:1:14"
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27208:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x12",
+ "nodeType": "YulIdentifier",
+ "src": "27210:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27210:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "27210:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "27205:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "27198:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27198:9:14"
+ },
+ "nodeType": "YulIf",
+ "src": "27195:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "27240:14:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "27249:1:14"
+ },
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "27252:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "div",
+ "nodeType": "YulIdentifier",
+ "src": "27245:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27245:9:14"
+ },
+ "variableNames": [
+ {
+ "name": "r",
+ "nodeType": "YulIdentifier",
+ "src": "27240:1:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "checked_div_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "x",
+ "nodeType": "YulTypedName",
+ "src": "27106:1:14",
+ "type": ""
+ },
+ {
+ "name": "y",
+ "nodeType": "YulTypedName",
+ "src": "27109:1:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "r",
+ "nodeType": "YulTypedName",
+ "src": "27115:1:14",
+ "type": ""
+ }
+ ],
+ "src": "27075:185:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27311:146:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "27321:25:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "27344:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "27326:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27326:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "27321:1:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "27355:25:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "27378:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "27360:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27360:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "27355:1:14"
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27402:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x11",
+ "nodeType": "YulIdentifier",
+ "src": "27404:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27404:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "27404:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "27396:1:14"
+ },
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "27399:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "lt",
+ "nodeType": "YulIdentifier",
+ "src": "27393:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27393:8:14"
+ },
+ "nodeType": "YulIf",
+ "src": "27390:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "27434:17:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "27446:1:14"
+ },
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "27449:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "sub",
+ "nodeType": "YulIdentifier",
+ "src": "27442:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27442:9:14"
+ },
+ "variableNames": [
+ {
+ "name": "diff",
+ "nodeType": "YulIdentifier",
+ "src": "27434:4:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "checked_sub_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "x",
+ "nodeType": "YulTypedName",
+ "src": "27297:1:14",
+ "type": ""
+ },
+ {
+ "name": "y",
+ "nodeType": "YulTypedName",
+ "src": "27300:1:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "diff",
+ "nodeType": "YulTypedName",
+ "src": "27306:4:14",
+ "type": ""
+ }
+ ],
+ "src": "27266:191:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27508:51:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "27518:35:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "27547:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint160",
+ "nodeType": "YulIdentifier",
+ "src": "27529:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27529:24:14"
+ },
+ "variableNames": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulIdentifier",
+ "src": "27518:7:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "cleanup_t_address",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "27490:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulTypedName",
+ "src": "27500:7:14",
+ "type": ""
+ }
+ ],
+ "src": "27463:96:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27607:48:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "27617:32:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "27642:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "27635:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27635:13:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "27628:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27628:21:14"
+ },
+ "variableNames": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulIdentifier",
+ "src": "27617:7:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "cleanup_t_bool",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "27589:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulTypedName",
+ "src": "27599:7:14",
+ "type": ""
+ }
+ ],
+ "src": "27565:90:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27705:105:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "27715:89:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "27730:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "27737:66:14",
+ "type": "",
+ "value": "0xffffffff00000000000000000000000000000000000000000000000000000000"
+ }
+ ],
+ "functionName": {
+ "name": "and",
+ "nodeType": "YulIdentifier",
+ "src": "27726:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27726:78:14"
+ },
+ "variableNames": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulIdentifier",
+ "src": "27715:7:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "cleanup_t_bytes4",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "27687:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulTypedName",
+ "src": "27697:7:14",
+ "type": ""
+ }
+ ],
+ "src": "27661:149:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27861:81:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "27871:65:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "27886:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "27893:42:14",
+ "type": "",
+ "value": "0xffffffffffffffffffffffffffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "and",
+ "nodeType": "YulIdentifier",
+ "src": "27882:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "27882:54:14"
+ },
+ "variableNames": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulIdentifier",
+ "src": "27871:7:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "cleanup_t_uint160",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "27843:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulTypedName",
+ "src": "27853:7:14",
+ "type": ""
+ }
+ ],
+ "src": "27816:126:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "27993:32:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "28003:16:14",
+ "value": {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "28014:5:14"
+ },
+ "variableNames": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulIdentifier",
+ "src": "28003:7:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "27975:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "cleaned",
+ "nodeType": "YulTypedName",
+ "src": "27985:7:14",
+ "type": ""
+ }
+ ],
+ "src": "27948:77:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "28082:103:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "name": "dst",
+ "nodeType": "YulIdentifier",
+ "src": "28105:3:14"
+ },
+ {
+ "name": "src",
+ "nodeType": "YulIdentifier",
+ "src": "28110:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "28115:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "calldatacopy",
+ "nodeType": "YulIdentifier",
+ "src": "28092:12:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28092:30:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "28092:30:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dst",
+ "nodeType": "YulIdentifier",
+ "src": "28163:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "28168:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "28159:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28159:16:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "28177:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "28152:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28152:27:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "28152:27:14"
+ }
+ ]
+ },
+ "name": "copy_calldata_to_memory",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "src",
+ "nodeType": "YulTypedName",
+ "src": "28064:3:14",
+ "type": ""
+ },
+ {
+ "name": "dst",
+ "nodeType": "YulTypedName",
+ "src": "28069:3:14",
+ "type": ""
+ },
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "28074:6:14",
+ "type": ""
+ }
+ ],
+ "src": "28031:154:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "28240:258:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "28250:10:14",
+ "value": {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "28259:1:14",
+ "type": "",
+ "value": "0"
+ },
+ "variables": [
+ {
+ "name": "i",
+ "nodeType": "YulTypedName",
+ "src": "28254:1:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "28319:63:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dst",
+ "nodeType": "YulIdentifier",
+ "src": "28344:3:14"
+ },
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "28349:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "28340:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28340:11:14"
+ },
+ {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "src",
+ "nodeType": "YulIdentifier",
+ "src": "28363:3:14"
+ },
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "28368:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "28359:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28359:11:14"
+ }
+ ],
+ "functionName": {
+ "name": "mload",
+ "nodeType": "YulIdentifier",
+ "src": "28353:5:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28353:18:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "28333:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28333:39:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "28333:39:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "28280:1:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "28283:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "lt",
+ "nodeType": "YulIdentifier",
+ "src": "28277:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28277:13:14"
+ },
+ "nodeType": "YulForLoop",
+ "post": {
+ "nodeType": "YulBlock",
+ "src": "28291:19:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "28293:15:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "28302:1:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "28305:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "28298:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28298:10:14"
+ },
+ "variableNames": [
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "28293:1:14"
+ }
+ ]
+ }
+ ]
+ },
+ "pre": {
+ "nodeType": "YulBlock",
+ "src": "28273:3:14",
+ "statements": []
+ },
+ "src": "28269:113:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "28416:76:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "dst",
+ "nodeType": "YulIdentifier",
+ "src": "28466:3:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "28471:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "28462:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28462:16:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "28480:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "28455:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28455:27:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "28455:27:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "i",
+ "nodeType": "YulIdentifier",
+ "src": "28397:1:14"
+ },
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "28400:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "28394:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28394:13:14"
+ },
+ "nodeType": "YulIf",
+ "src": "28391:2:14"
+ }
+ ]
+ },
+ "name": "copy_memory_to_memory",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "src",
+ "nodeType": "YulTypedName",
+ "src": "28222:3:14",
+ "type": ""
+ },
+ {
+ "name": "dst",
+ "nodeType": "YulTypedName",
+ "src": "28227:3:14",
+ "type": ""
+ },
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "28232:6:14",
+ "type": ""
+ }
+ ],
+ "src": "28191:307:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "28555:269:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "28565:22:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "data",
+ "nodeType": "YulIdentifier",
+ "src": "28579:4:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "28585:1:14",
+ "type": "",
+ "value": "2"
+ }
+ ],
+ "functionName": {
+ "name": "div",
+ "nodeType": "YulIdentifier",
+ "src": "28575:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28575:12:14"
+ },
+ "variableNames": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "28565:6:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "28596:38:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "data",
+ "nodeType": "YulIdentifier",
+ "src": "28626:4:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "28632:1:14",
+ "type": "",
+ "value": "1"
+ }
+ ],
+ "functionName": {
+ "name": "and",
+ "nodeType": "YulIdentifier",
+ "src": "28622:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28622:12:14"
+ },
+ "variables": [
+ {
+ "name": "outOfPlaceEncoding",
+ "nodeType": "YulTypedName",
+ "src": "28600:18:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "28673:51:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "28687:27:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "28701:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "28709:4:14",
+ "type": "",
+ "value": "0x7f"
+ }
+ ],
+ "functionName": {
+ "name": "and",
+ "nodeType": "YulIdentifier",
+ "src": "28697:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28697:17:14"
+ },
+ "variableNames": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "28687:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "outOfPlaceEncoding",
+ "nodeType": "YulIdentifier",
+ "src": "28653:18:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "28646:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28646:26:14"
+ },
+ "nodeType": "YulIf",
+ "src": "28643:2:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "28776:42:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x22",
+ "nodeType": "YulIdentifier",
+ "src": "28790:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28790:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "28790:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "outOfPlaceEncoding",
+ "nodeType": "YulIdentifier",
+ "src": "28740:18:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "length",
+ "nodeType": "YulIdentifier",
+ "src": "28763:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "28771:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "lt",
+ "nodeType": "YulIdentifier",
+ "src": "28760:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28760:14:14"
+ }
+ ],
+ "functionName": {
+ "name": "eq",
+ "nodeType": "YulIdentifier",
+ "src": "28737:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28737:38:14"
+ },
+ "nodeType": "YulIf",
+ "src": "28734:2:14"
+ }
+ ]
+ },
+ "name": "extract_byte_array_length",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "data",
+ "nodeType": "YulTypedName",
+ "src": "28539:4:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "length",
+ "nodeType": "YulTypedName",
+ "src": "28548:6:14",
+ "type": ""
+ }
+ ],
+ "src": "28504:320:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "28873:238:14",
+ "statements": [
+ {
+ "nodeType": "YulVariableDeclaration",
+ "src": "28883:58:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "28905:6:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "size",
+ "nodeType": "YulIdentifier",
+ "src": "28935:4:14"
+ }
+ ],
+ "functionName": {
+ "name": "round_up_to_mul_of_32",
+ "nodeType": "YulIdentifier",
+ "src": "28913:21:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28913:27:14"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "28901:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28901:40:14"
+ },
+ "variables": [
+ {
+ "name": "newFreePtr",
+ "nodeType": "YulTypedName",
+ "src": "28887:10:14",
+ "type": ""
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "29052:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x41",
+ "nodeType": "YulIdentifier",
+ "src": "29054:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29054:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "29054:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "newFreePtr",
+ "nodeType": "YulIdentifier",
+ "src": "28995:10:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29007:18:14",
+ "type": "",
+ "value": "0xffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "gt",
+ "nodeType": "YulIdentifier",
+ "src": "28992:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28992:34:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "newFreePtr",
+ "nodeType": "YulIdentifier",
+ "src": "29031:10:14"
+ },
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "29043:6:14"
+ }
+ ],
+ "functionName": {
+ "name": "lt",
+ "nodeType": "YulIdentifier",
+ "src": "29028:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29028:22:14"
+ }
+ ],
+ "functionName": {
+ "name": "or",
+ "nodeType": "YulIdentifier",
+ "src": "28989:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "28989:62:14"
+ },
+ "nodeType": "YulIf",
+ "src": "28986:2:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29090:2:14",
+ "type": "",
+ "value": "64"
+ },
+ {
+ "name": "newFreePtr",
+ "nodeType": "YulIdentifier",
+ "src": "29094:10:14"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "29083:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29083:22:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "29083:22:14"
+ }
+ ]
+ },
+ "name": "finalize_allocation",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "28859:6:14",
+ "type": ""
+ },
+ {
+ "name": "size",
+ "nodeType": "YulTypedName",
+ "src": "28867:4:14",
+ "type": ""
+ }
+ ],
+ "src": "28830:281:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "29160:190:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "29170:33:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "29197:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "29179:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29179:24:14"
+ },
+ "variableNames": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "29170:5:14"
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "29293:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x11",
+ "nodeType": "YulIdentifier",
+ "src": "29295:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29295:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "29295:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "29218:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29225:66:14",
+ "type": "",
+ "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+ }
+ ],
+ "functionName": {
+ "name": "eq",
+ "nodeType": "YulIdentifier",
+ "src": "29215:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29215:77:14"
+ },
+ "nodeType": "YulIf",
+ "src": "29212:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "29324:20:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "29335:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29342:1:14",
+ "type": "",
+ "value": "1"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "29331:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29331:13:14"
+ },
+ "variableNames": [
+ {
+ "name": "ret",
+ "nodeType": "YulIdentifier",
+ "src": "29324:3:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "increment_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "29146:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "ret",
+ "nodeType": "YulTypedName",
+ "src": "29156:3:14",
+ "type": ""
+ }
+ ],
+ "src": "29117:233:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "29390:142:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "29400:25:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "29423:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "29405:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29405:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "29400:1:14"
+ }
+ ]
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "29434:25:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "29457:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "29439:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29439:20:14"
+ },
+ "variableNames": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "29434:1:14"
+ }
+ ]
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "29481:22:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "functionName": {
+ "name": "panic_error_0x12",
+ "nodeType": "YulIdentifier",
+ "src": "29483:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29483:18:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "29483:18:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "29478:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "29471:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29471:9:14"
+ },
+ "nodeType": "YulIf",
+ "src": "29468:2:14"
+ },
+ {
+ "nodeType": "YulAssignment",
+ "src": "29512:14:14",
+ "value": {
+ "arguments": [
+ {
+ "name": "x",
+ "nodeType": "YulIdentifier",
+ "src": "29521:1:14"
+ },
+ {
+ "name": "y",
+ "nodeType": "YulIdentifier",
+ "src": "29524:1:14"
+ }
+ ],
+ "functionName": {
+ "name": "mod",
+ "nodeType": "YulIdentifier",
+ "src": "29517:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29517:9:14"
+ },
+ "variableNames": [
+ {
+ "name": "r",
+ "nodeType": "YulIdentifier",
+ "src": "29512:1:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "mod_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "x",
+ "nodeType": "YulTypedName",
+ "src": "29379:1:14",
+ "type": ""
+ },
+ {
+ "name": "y",
+ "nodeType": "YulTypedName",
+ "src": "29382:1:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "r",
+ "nodeType": "YulTypedName",
+ "src": "29388:1:14",
+ "type": ""
+ }
+ ],
+ "src": "29356:176:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "29566:152:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29583:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29586:77:14",
+ "type": "",
+ "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "29576:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29576:88:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "29576:88:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29680:1:14",
+ "type": "",
+ "value": "4"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29683:4:14",
+ "type": "",
+ "value": "0x11"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "29673:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29673:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "29673:15:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29704:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29707:4:14",
+ "type": "",
+ "value": "0x24"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "29697:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29697:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "29697:15:14"
+ }
+ ]
+ },
+ "name": "panic_error_0x11",
+ "nodeType": "YulFunctionDefinition",
+ "src": "29538:180:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "29752:152:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29769:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29772:77:14",
+ "type": "",
+ "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "29762:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29762:88:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "29762:88:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29866:1:14",
+ "type": "",
+ "value": "4"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29869:4:14",
+ "type": "",
+ "value": "0x12"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "29859:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29859:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "29859:15:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29890:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29893:4:14",
+ "type": "",
+ "value": "0x24"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "29883:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29883:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "29883:15:14"
+ }
+ ]
+ },
+ "name": "panic_error_0x12",
+ "nodeType": "YulFunctionDefinition",
+ "src": "29724:180:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "29938:152:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29955:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "29958:77:14",
+ "type": "",
+ "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "29948:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "29948:88:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "29948:88:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30052:1:14",
+ "type": "",
+ "value": "4"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30055:4:14",
+ "type": "",
+ "value": "0x22"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "30045:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "30045:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "30045:15:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30076:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30079:4:14",
+ "type": "",
+ "value": "0x24"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "30069:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "30069:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "30069:15:14"
+ }
+ ]
+ },
+ "name": "panic_error_0x22",
+ "nodeType": "YulFunctionDefinition",
+ "src": "29910:180:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "30124:152:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30141:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30144:77:14",
+ "type": "",
+ "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "30134:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "30134:88:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "30134:88:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30238:1:14",
+ "type": "",
+ "value": "4"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30241:4:14",
+ "type": "",
+ "value": "0x32"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "30231:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "30231:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "30231:15:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30262:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30265:4:14",
+ "type": "",
+ "value": "0x24"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "30255:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "30255:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "30255:15:14"
+ }
+ ]
+ },
+ "name": "panic_error_0x32",
+ "nodeType": "YulFunctionDefinition",
+ "src": "30096:180:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "30310:152:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30327:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30330:77:14",
+ "type": "",
+ "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "30320:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "30320:88:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "30320:88:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30424:1:14",
+ "type": "",
+ "value": "4"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30427:4:14",
+ "type": "",
+ "value": "0x41"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "30417:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "30417:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "30417:15:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30448:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30451:4:14",
+ "type": "",
+ "value": "0x24"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "30441:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "30441:15:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "30441:15:14"
+ }
+ ]
+ },
+ "name": "panic_error_0x41",
+ "nodeType": "YulFunctionDefinition",
+ "src": "30282:180:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "30557:28:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30574:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30577:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "30567:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "30567:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "30567:12:14"
+ }
+ ]
+ },
+ "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
+ "nodeType": "YulFunctionDefinition",
+ "src": "30468:117:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "30680:28:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30697:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30700:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "30690:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "30690:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "30690:12:14"
+ }
+ ]
+ },
+ "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae",
+ "nodeType": "YulFunctionDefinition",
+ "src": "30591:117:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "30803:28:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30820:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30823:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "30813:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "30813:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "30813:12:14"
+ }
+ ]
+ },
+ "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
+ "nodeType": "YulFunctionDefinition",
+ "src": "30714:117:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "30926:28:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30943:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "30946:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "30936:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "30936:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "30936:12:14"
+ }
+ ]
+ },
+ "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
+ "nodeType": "YulFunctionDefinition",
+ "src": "30837:117:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "31008:54:14",
+ "statements": [
+ {
+ "nodeType": "YulAssignment",
+ "src": "31018:38:14",
+ "value": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "31036:5:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "31043:2:14",
+ "type": "",
+ "value": "31"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "31032:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31032:14:14"
+ },
+ {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "31052:2:14",
+ "type": "",
+ "value": "31"
+ }
+ ],
+ "functionName": {
+ "name": "not",
+ "nodeType": "YulIdentifier",
+ "src": "31048:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31048:7:14"
+ }
+ ],
+ "functionName": {
+ "name": "and",
+ "nodeType": "YulIdentifier",
+ "src": "31028:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31028:28:14"
+ },
+ "variableNames": [
+ {
+ "name": "result",
+ "nodeType": "YulIdentifier",
+ "src": "31018:6:14"
+ }
+ ]
+ }
+ ]
+ },
+ "name": "round_up_to_mul_of_32",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "30991:5:14",
+ "type": ""
+ }
+ ],
+ "returnVariables": [
+ {
+ "name": "result",
+ "nodeType": "YulTypedName",
+ "src": "31001:6:14",
+ "type": ""
+ }
+ ],
+ "src": "30960:102:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "31174:131:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "31196:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "31204:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "31192:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31192:14:14"
+ },
+ {
+ "hexValue": "4552433732313a207472616e7366657220746f206e6f6e204552433732315265",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "31208:34:14",
+ "type": "",
+ "value": "ERC721: transfer to non ERC721Re"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "31185:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31185:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "31185:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "31264:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "31272:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "31260:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31260:15:14"
+ },
+ {
+ "hexValue": "63656976657220696d706c656d656e746572",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "31277:20:14",
+ "type": "",
+ "value": "ceiver implementer"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "31253:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31253:45:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "31253:45:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "31166:6:14",
+ "type": ""
+ }
+ ],
+ "src": "31068:237:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "31417:119:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "31439:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "31447:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "31435:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31435:14:14"
+ },
+ {
+ "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "31451:34:14",
+ "type": "",
+ "value": "Ownable: new owner is the zero a"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "31428:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31428:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "31428:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "31507:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "31515:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "31503:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31503:15:14"
+ },
+ {
+ "hexValue": "646472657373",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "31520:8:14",
+ "type": "",
+ "value": "ddress"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "31496:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31496:33:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "31496:33:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "31409:6:14",
+ "type": ""
+ }
+ ],
+ "src": "31311:225:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "31648:72:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "31670:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "31678:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "31666:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31666:14:14"
+ },
+ {
+ "hexValue": "4552433732313a20746f6b656e20616c7265616479206d696e746564",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "31682:30:14",
+ "type": "",
+ "value": "ERC721: token already minted"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "31659:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31659:54:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "31659:54:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "31640:6:14",
+ "type": ""
+ }
+ ],
+ "src": "31542:178:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "31832:117:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "31854:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "31862:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "31850:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31850:14:14"
+ },
+ {
+ "hexValue": "4552433732313a207472616e7366657220746f20746865207a65726f20616464",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "31866:34:14",
+ "type": "",
+ "value": "ERC721: transfer to the zero add"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "31843:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31843:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "31843:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "31922:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "31930:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "31918:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31918:15:14"
+ },
+ {
+ "hexValue": "72657373",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "31935:6:14",
+ "type": "",
+ "value": "ress"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "31911:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "31911:31:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "31911:31:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "31824:6:14",
+ "type": ""
+ }
+ ],
+ "src": "31726:223:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "32061:69:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "32083:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "32091:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "32079:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "32079:14:14"
+ },
+ {
+ "hexValue": "4552433732313a20617070726f766520746f2063616c6c6572",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "32095:27:14",
+ "type": "",
+ "value": "ERC721: approve to caller"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "32072:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "32072:51:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "32072:51:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "32053:6:14",
+ "type": ""
+ }
+ ],
+ "src": "31955:175:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "32242:125:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "32264:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "32272:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "32260:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "32260:14:14"
+ },
+ {
+ "hexValue": "4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "32276:34:14",
+ "type": "",
+ "value": "ERC721: operator query for nonex"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "32253:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "32253:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "32253:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "32332:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "32340:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "32328:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "32328:15:14"
+ },
+ {
+ "hexValue": "697374656e7420746f6b656e",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "32345:14:14",
+ "type": "",
+ "value": "istent token"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "32321:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "32321:39:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "32321:39:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "32234:6:14",
+ "type": ""
+ }
+ ],
+ "src": "32136:231:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "32479:137:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "32501:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "32509:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "32497:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "32497:14:14"
+ },
+ {
+ "hexValue": "4552433732313a20617070726f76652063616c6c6572206973206e6f74206f77",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "32513:34:14",
+ "type": "",
+ "value": "ERC721: approve caller is not ow"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "32490:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "32490:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "32490:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "32569:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "32577:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "32565:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "32565:15:14"
+ },
+ {
+ "hexValue": "6e6572206e6f7220617070726f76656420666f7220616c6c",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "32582:26:14",
+ "type": "",
+ "value": "ner nor approved for all"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "32558:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "32558:51:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "32558:51:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "32471:6:14",
+ "type": ""
+ }
+ ],
+ "src": "32373:243:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "32728:123:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "32750:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "32758:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "32746:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "32746:14:14"
+ },
+ {
+ "hexValue": "4552433732313a2062616c616e636520717565727920666f7220746865207a65",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "32762:34:14",
+ "type": "",
+ "value": "ERC721: balance query for the ze"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "32739:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "32739:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "32739:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "32818:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "32826:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "32814:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "32814:15:14"
+ },
+ {
+ "hexValue": "726f2061646472657373",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "32831:12:14",
+ "type": "",
+ "value": "ro address"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "32807:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "32807:37:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "32807:37:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "32720:6:14",
+ "type": ""
+ }
+ ],
+ "src": "32622:229:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "32963:122:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "32985:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "32993:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "32981:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "32981:14:14"
+ },
+ {
+ "hexValue": "4552433732313a206f776e657220717565727920666f72206e6f6e6578697374",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "32997:34:14",
+ "type": "",
+ "value": "ERC721: owner query for nonexist"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "32974:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "32974:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "32974:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "33053:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "33061:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "33049:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "33049:15:14"
+ },
+ {
+ "hexValue": "656e7420746f6b656e",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "33066:11:14",
+ "type": "",
+ "value": "ent token"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "33042:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "33042:36:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "33042:36:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "32955:6:14",
+ "type": ""
+ }
+ ],
+ "src": "32857:228:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "33197:127:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "33219:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "33227:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "33215:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "33215:14:14"
+ },
+ {
+ "hexValue": "45524337323155524953746f726167653a2055524920736574206f66206e6f6e",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "33231:34:14",
+ "type": "",
+ "value": "ERC721URIStorage: URI set of non"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "33208:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "33208:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "33208:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "33287:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "33295:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "33283:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "33283:15:14"
+ },
+ {
+ "hexValue": "6578697374656e7420746f6b656e",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "33300:16:14",
+ "type": "",
+ "value": "existent token"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "33276:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "33276:41:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "33276:41:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "33189:6:14",
+ "type": ""
+ }
+ ],
+ "src": "33091:233:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "33436:76:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "33458:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "33466:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "33454:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "33454:14:14"
+ },
+ {
+ "hexValue": "4552433732313a206d696e7420746f20746865207a65726f2061646472657373",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "33470:34:14",
+ "type": "",
+ "value": "ERC721: mint to the zero address"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "33447:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "33447:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "33447:58:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "33428:6:14",
+ "type": ""
+ }
+ ],
+ "src": "33330:182:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "33624:130:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "33646:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "33654:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "33642:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "33642:14:14"
+ },
+ {
+ "hexValue": "45524337323155524953746f726167653a2055524920717565727920666f7220",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "33658:34:14",
+ "type": "",
+ "value": "ERC721URIStorage: URI query for "
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "33635:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "33635:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "33635:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "33714:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "33722:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "33710:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "33710:15:14"
+ },
+ {
+ "hexValue": "6e6f6e6578697374656e7420746f6b656e",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "33727:19:14",
+ "type": "",
+ "value": "nonexistent token"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "33703:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "33703:44:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "33703:44:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_8e9ed1638ba7e2d59e03d0957c9339381732ac84d73f65c86c45db1467eafa2a",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "33616:6:14",
+ "type": ""
+ }
+ ],
+ "src": "33518:236:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "33866:125:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "33888:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "33896:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "33884:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "33884:14:14"
+ },
+ {
+ "hexValue": "4552433732313a20617070726f76656420717565727920666f72206e6f6e6578",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "33900:34:14",
+ "type": "",
+ "value": "ERC721: approved query for nonex"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "33877:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "33877:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "33877:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "33956:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "33964:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "33952:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "33952:15:14"
+ },
+ {
+ "hexValue": "697374656e7420746f6b656e",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "33969:14:14",
+ "type": "",
+ "value": "istent token"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "33945:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "33945:39:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "33945:39:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "33858:6:14",
+ "type": ""
+ }
+ ],
+ "src": "33760:231:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "34103:76:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "34125:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "34133:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "34121:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "34121:14:14"
+ },
+ {
+ "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "34137:34:14",
+ "type": "",
+ "value": "Ownable: caller is not the owner"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "34114:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "34114:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "34114:58:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "34095:6:14",
+ "type": ""
+ }
+ ],
+ "src": "33997:182:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "34291:122:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "34313:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "34321:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "34309:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "34309:14:14"
+ },
+ {
+ "hexValue": "4552433732313a207472616e73666572206f6620746f6b656e20746861742069",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "34325:34:14",
+ "type": "",
+ "value": "ERC721: transfer of token that i"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "34302:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "34302:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "34302:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "34381:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "34389:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "34377:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "34377:15:14"
+ },
+ {
+ "hexValue": "73206e6f74206f776e",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "34394:11:14",
+ "type": "",
+ "value": "s not own"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "34370:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "34370:36:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "34370:36:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "34283:6:14",
+ "type": ""
+ }
+ ],
+ "src": "34185:228:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "34525:128:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "34547:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "34555:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "34543:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "34543:14:14"
+ },
+ {
+ "hexValue": "4552433732314d657461646174613a2055524920717565727920666f72206e6f",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "34559:34:14",
+ "type": "",
+ "value": "ERC721Metadata: URI query for no"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "34536:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "34536:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "34536:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "34615:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "34623:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "34611:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "34611:15:14"
+ },
+ {
+ "hexValue": "6e6578697374656e7420746f6b656e",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "34628:17:14",
+ "type": "",
+ "value": "nexistent token"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "34604:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "34604:42:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "34604:42:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "34517:6:14",
+ "type": ""
+ }
+ ],
+ "src": "34419:234:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "34765:114:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "34787:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "34795:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "34783:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "34783:14:14"
+ },
+ {
+ "hexValue": "4552433732313a20617070726f76616c20746f2063757272656e74206f776e65",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "34799:34:14",
+ "type": "",
+ "value": "ERC721: approval to current owne"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "34776:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "34776:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "34776:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "34855:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "34863:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "34851:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "34851:15:14"
+ },
+ {
+ "hexValue": "72",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "34868:3:14",
+ "type": "",
+ "value": "r"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "34844:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "34844:28:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "34844:28:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "34757:6:14",
+ "type": ""
+ }
+ ],
+ "src": "34659:220:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "34991:130:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "35013:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "35021:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "35009:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35009:14:14"
+ },
+ {
+ "hexValue": "4552433732313a207472616e736665722063616c6c6572206973206e6f74206f",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "35025:34:14",
+ "type": "",
+ "value": "ERC721: transfer caller is not o"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "35002:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35002:58:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "35002:58:14"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulIdentifier",
+ "src": "35081:6:14"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "35089:2:14",
+ "type": "",
+ "value": "32"
+ }
+ ],
+ "functionName": {
+ "name": "add",
+ "nodeType": "YulIdentifier",
+ "src": "35077:3:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35077:15:14"
+ },
+ {
+ "hexValue": "776e6572206e6f7220617070726f766564",
+ "kind": "string",
+ "nodeType": "YulLiteral",
+ "src": "35094:19:14",
+ "type": "",
+ "value": "wner nor approved"
+ }
+ ],
+ "functionName": {
+ "name": "mstore",
+ "nodeType": "YulIdentifier",
+ "src": "35070:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35070:44:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "35070:44:14"
+ }
+ ]
+ },
+ "name": "store_literal_in_memory_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "memPtr",
+ "nodeType": "YulTypedName",
+ "src": "34983:6:14",
+ "type": ""
+ }
+ ],
+ "src": "34885:236:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "35170:79:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "35227:16:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "35236:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "35239:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "35229:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35229:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "35229:12:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "35193:5:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "35218:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_address",
+ "nodeType": "YulIdentifier",
+ "src": "35200:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35200:24:14"
+ }
+ ],
+ "functionName": {
+ "name": "eq",
+ "nodeType": "YulIdentifier",
+ "src": "35190:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35190:35:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "35183:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35183:43:14"
+ },
+ "nodeType": "YulIf",
+ "src": "35180:2:14"
+ }
+ ]
+ },
+ "name": "validator_revert_t_address",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "35163:5:14",
+ "type": ""
+ }
+ ],
+ "src": "35127:122:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "35295:76:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "35349:16:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "35358:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "35361:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "35351:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35351:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "35351:12:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "35318:5:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "35340:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_bool",
+ "nodeType": "YulIdentifier",
+ "src": "35325:14:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35325:21:14"
+ }
+ ],
+ "functionName": {
+ "name": "eq",
+ "nodeType": "YulIdentifier",
+ "src": "35315:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35315:32:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "35308:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35308:40:14"
+ },
+ "nodeType": "YulIf",
+ "src": "35305:2:14"
+ }
+ ]
+ },
+ "name": "validator_revert_t_bool",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "35288:5:14",
+ "type": ""
+ }
+ ],
+ "src": "35255:116:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "35419:78:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "35475:16:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "35484:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "35487:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "35477:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35477:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "35477:12:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "35442:5:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "35466:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_bytes4",
+ "nodeType": "YulIdentifier",
+ "src": "35449:16:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35449:23:14"
+ }
+ ],
+ "functionName": {
+ "name": "eq",
+ "nodeType": "YulIdentifier",
+ "src": "35439:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35439:34:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "35432:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35432:42:14"
+ },
+ "nodeType": "YulIf",
+ "src": "35429:2:14"
+ }
+ ]
+ },
+ "name": "validator_revert_t_bytes4",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "35412:5:14",
+ "type": ""
+ }
+ ],
+ "src": "35377:120:14"
+ },
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "35546:79:14",
+ "statements": [
+ {
+ "body": {
+ "nodeType": "YulBlock",
+ "src": "35603:16:14",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "35612:1:14",
+ "type": "",
+ "value": "0"
+ },
+ {
+ "kind": "number",
+ "nodeType": "YulLiteral",
+ "src": "35615:1:14",
+ "type": "",
+ "value": "0"
+ }
+ ],
+ "functionName": {
+ "name": "revert",
+ "nodeType": "YulIdentifier",
+ "src": "35605:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35605:12:14"
+ },
+ "nodeType": "YulExpressionStatement",
+ "src": "35605:12:14"
+ }
+ ]
+ },
+ "condition": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "35569:5:14"
+ },
+ {
+ "arguments": [
+ {
+ "name": "value",
+ "nodeType": "YulIdentifier",
+ "src": "35594:5:14"
+ }
+ ],
+ "functionName": {
+ "name": "cleanup_t_uint256",
+ "nodeType": "YulIdentifier",
+ "src": "35576:17:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35576:24:14"
+ }
+ ],
+ "functionName": {
+ "name": "eq",
+ "nodeType": "YulIdentifier",
+ "src": "35566:2:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35566:35:14"
+ }
+ ],
+ "functionName": {
+ "name": "iszero",
+ "nodeType": "YulIdentifier",
+ "src": "35559:6:14"
+ },
+ "nodeType": "YulFunctionCall",
+ "src": "35559:43:14"
+ },
+ "nodeType": "YulIf",
+ "src": "35556:2:14"
+ }
+ ]
+ },
+ "name": "validator_revert_t_uint256",
+ "nodeType": "YulFunctionDefinition",
+ "parameters": [
+ {
+ "name": "value",
+ "nodeType": "YulTypedName",
+ "src": "35539:5:14",
+ "type": ""
+ }
+ ],
+ "src": "35503:122:14"
+ }
+ ]
+ },
+ "contents": "{\n\n function abi_decode_available_length_t_bytes_memory_ptr(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n copy_calldata_to_memory(src, dst, length)\n }\n\n function abi_decode_available_length_t_string_memory_ptr(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_string_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n copy_calldata_to_memory(src, dst, length)\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_t_bool(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_t_bytes4(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bytes4(value)\n }\n\n function abi_decode_t_bytes4_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_bytes4(value)\n }\n\n // bytes\n function abi_decode_t_bytes_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_bytes_memory_ptr(add(offset, 0x20), length, end)\n }\n\n // string\n function abi_decode_t_string_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_string_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value3 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_bool(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_string_memory_ptr(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value1 := abi_decode_t_string_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bytes4(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_bytes4_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bytes4_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n mstore(pos, cleanup_t_bool(value))\n }\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_string_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n let length := array_length_t_string_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, length)\n }\n\n function abi_encode_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 50)\n store_literal_in_memory_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 28)\n store_literal_in_memory_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 36)\n store_literal_in_memory_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 25)\n store_literal_in_memory_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 44)\n store_literal_in_memory_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 56)\n store_literal_in_memory_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 42)\n store_literal_in_memory_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 41)\n store_literal_in_memory_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 46)\n store_literal_in_memory_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n store_literal_in_memory_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_8e9ed1638ba7e2d59e03d0957c9339381732ac84d73f65c86c45db1467eafa2a_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 49)\n store_literal_in_memory_8e9ed1638ba7e2d59e03d0957c9339381732ac84d73f65c86c45db1467eafa2a(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 44)\n store_literal_in_memory_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 41)\n store_literal_in_memory_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 47)\n store_literal_in_memory_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 33)\n store_literal_in_memory_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 49)\n store_literal_in_memory_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value1, value0) -> end {\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value1, pos)\n\n end := pos\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_address_to_t_address_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value2, add(headStart, 64))\n\n mstore(add(headStart, 96), sub(tail, headStart))\n tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value3, tail)\n\n }\n\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_bool_to_t_bool_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0, tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_8e9ed1638ba7e2d59e03d0957c9339381732ac84d73f65c86c45db1467eafa2a__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8e9ed1638ba7e2d59e03d0957c9339381732ac84d73f65c86c45db1467eafa2a_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function array_allocation_size_t_string_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_length_t_string_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function checked_div_t_uint256(x, y) -> r {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n if iszero(y) { panic_error_0x12() }\n\n r := div(x, y)\n }\n\n function checked_sub_t_uint256(x, y) -> diff {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n if lt(x, y) { panic_error_0x11() }\n\n diff := sub(x, y)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function cleanup_t_bytes4(value) -> cleaned {\n cleaned := and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function copy_calldata_to_memory(src, dst, length) {\n calldatacopy(dst, src, length)\n // clear end\n mstore(add(dst, length), 0)\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n function extract_byte_array_length(data) -> length {\n length := div(data, 2)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) {\n length := and(length, 0x7f)\n }\n\n if eq(outOfPlaceEncoding, lt(length, 32)) {\n panic_error_0x22()\n }\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function increment_t_uint256(value) -> ret {\n value := cleanup_t_uint256(value)\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n ret := add(value, 1)\n }\n\n function mod_t_uint256(x, y) -> r {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n if iszero(y) { panic_error_0x12() }\n r := mod(x, y)\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function panic_error_0x12() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n\n function panic_error_0x22() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n\n function panic_error_0x32() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function store_literal_in_memory_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: transfer to non ERC721Re\")\n\n mstore(add(memPtr, 32), \"ceiver implementer\")\n\n }\n\n function store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe(memPtr) {\n\n mstore(add(memPtr, 0), \"Ownable: new owner is the zero a\")\n\n mstore(add(memPtr, 32), \"ddress\")\n\n }\n\n function store_literal_in_memory_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: token already minted\")\n\n }\n\n function store_literal_in_memory_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: transfer to the zero add\")\n\n mstore(add(memPtr, 32), \"ress\")\n\n }\n\n function store_literal_in_memory_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: approve to caller\")\n\n }\n\n function store_literal_in_memory_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: operator query for nonex\")\n\n mstore(add(memPtr, 32), \"istent token\")\n\n }\n\n function store_literal_in_memory_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: approve caller is not ow\")\n\n mstore(add(memPtr, 32), \"ner nor approved for all\")\n\n }\n\n function store_literal_in_memory_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: balance query for the ze\")\n\n mstore(add(memPtr, 32), \"ro address\")\n\n }\n\n function store_literal_in_memory_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: owner query for nonexist\")\n\n mstore(add(memPtr, 32), \"ent token\")\n\n }\n\n function store_literal_in_memory_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721URIStorage: URI set of non\")\n\n mstore(add(memPtr, 32), \"existent token\")\n\n }\n\n function store_literal_in_memory_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: mint to the zero address\")\n\n }\n\n function store_literal_in_memory_8e9ed1638ba7e2d59e03d0957c9339381732ac84d73f65c86c45db1467eafa2a(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721URIStorage: URI query for \")\n\n mstore(add(memPtr, 32), \"nonexistent token\")\n\n }\n\n function store_literal_in_memory_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: approved query for nonex\")\n\n mstore(add(memPtr, 32), \"istent token\")\n\n }\n\n function store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(memPtr) {\n\n mstore(add(memPtr, 0), \"Ownable: caller is not the owner\")\n\n }\n\n function store_literal_in_memory_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: transfer of token that i\")\n\n mstore(add(memPtr, 32), \"s not own\")\n\n }\n\n function store_literal_in_memory_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721Metadata: URI query for no\")\n\n mstore(add(memPtr, 32), \"nexistent token\")\n\n }\n\n function store_literal_in_memory_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: approval to current owne\")\n\n mstore(add(memPtr, 32), \"r\")\n\n }\n\n function store_literal_in_memory_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: transfer caller is not o\")\n\n mstore(add(memPtr, 32), \"wner nor approved\")\n\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n function validator_revert_t_bytes4(value) {\n if iszero(eq(value, cleanup_t_bytes4(value))) { revert(0, 0) }\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n",
+ "id": 14,
+ "language": "Yul",
+ "name": "#utility.yul"
+ }
+ ],
+ "sourceMap": "243:481:13:-:0;;;382:41;;;;;;;;;;1316:113:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1390:5;1382;:13;;;;;;;;;;;;:::i;:::-;;1415:7;1405;:17;;;;;;;;;;;;:::i;:::-;;1316:113;;867:23:0;877:12;:10;;;:12;;:::i;:::-;867:9;;;:23;;:::i;:::-;243:481:13;;587:96:7;640:7;666:10;659:17;;587:96;:::o;2041:169:0:-;2096:16;2115:6;;;;;;;;;;;2096:25;;2140:8;2131:6;;:17;;;;;;;;;;;;;;;;;;2194:8;2163:40;;2184:8;2163:40;;;;;;;;;;;;2086:124;2041:169;:::o;243:481:13:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:320:14:-;51:6;88:1;82:4;78:12;68:22;;135:1;129:4;125:12;156:18;146:2;;212:4;204:6;200:17;190:27;;146:2;274;266:6;263:14;243:18;240:38;237:2;;;293:18;;:::i;:::-;237:2;58:269;;;;:::o;333:180::-;381:77;378:1;371:88;478:4;475:1;468:15;502:4;499:1;492:15;243:481:13;;;;;;;",
+ "deployedSourceMap": "243:481:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1496:300:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2414:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3925:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3463:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4789:330;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5185:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2117:235;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1855:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1605:92:0;;;:::i;:::-;;973:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2576:102:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4209:290;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5430:320;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;429:293:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;387:663:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4565:162:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1846:189:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1496:300:1;1598:4;1648:25;1633:40;;;:11;:40;;;;:104;;;;1704:33;1689:48;;;:11;:48;;;;1633:104;:156;;;;1753:36;1777:11;1753:23;:36::i;:::-;1633:156;1614:175;;1496:300;;;:::o;2414:98::-;2468:13;2500:5;2493:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2414:98;:::o;3925:217::-;4001:7;4028:16;4036:7;4028;:16::i;:::-;4020:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4111:15;:24;4127:7;4111:24;;;;;;;;;;;;;;;;;;;;;4104:31;;3925:217;;;:::o;3463:401::-;3543:13;3559:23;3574:7;3559:14;:23::i;:::-;3543:39;;3606:5;3600:11;;:2;:11;;;;3592:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3697:5;3681:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3706:37;3723:5;3730:12;:10;:12::i;:::-;3706:16;:37::i;:::-;3681:62;3660:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3836:21;3845:2;3849:7;3836:8;:21::i;:::-;3533:331;3463:401;;:::o;4789:330::-;4978:41;4997:12;:10;:12::i;:::-;5011:7;4978:18;:41::i;:::-;4970:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5084:28;5094:4;5100:2;5104:7;5084:9;:28::i;:::-;4789:330;;;:::o;5185:179::-;5318:39;5335:4;5341:2;5345:7;5318:39;;;;;;;;;;;;:16;:39::i;:::-;5185:179;;;:::o;2117:235::-;2189:7;2208:13;2224:7;:16;2232:7;2224:16;;;;;;;;;;;;;;;;;;;;;2208:32;;2275:1;2258:19;;:5;:19;;;;2250:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2340:5;2333:12;;;2117:235;;;:::o;1855:205::-;1927:7;1971:1;1954:19;;:5;:19;;;;1946:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2037:9;:16;2047:5;2037:16;;;;;;;;;;;;;;;;2030:23;;1855:205;;;:::o;1605:92:0:-;1196:12;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1669:21:::1;1687:1;1669:9;:21::i;:::-;1605:92::o:0;973:85::-;1019:7;1045:6;;;;;;;;;;;1038:13;;973:85;:::o;2576:102:1:-;2632:13;2664:7;2657:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2576:102;:::o;4209:290::-;4323:12;:10;:12::i;:::-;4311:24;;:8;:24;;;;4303:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4421:8;4376:18;:32;4395:12;:10;:12::i;:::-;4376:32;;;;;;;;;;;;;;;:42;4409:8;4376:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4473:8;4444:48;;4459:12;:10;:12::i;:::-;4444:48;;;4483:8;4444:48;;;;;;:::i;:::-;;;;;;;;4209:290;;:::o;5430:320::-;5599:41;5618:12;:10;:12::i;:::-;5632:7;5599:18;:41::i;:::-;5591:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5704:39;5718:4;5724:2;5728:7;5737:5;5704:13;:39::i;:::-;5430:320;;;;:::o;429:293:13:-;523:7;1196:12:0;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;542:21:13::1;:9;:19;:21::i;:::-;573:17;593:19;:9;:17;:19::i;:::-;573:39;;622:24;628:6;636:9;622:5;:24::i;:::-;656:33;669:9;680:8;656:12;:33::i;:::-;706:9;699:16;;;429:293:::0;;;;:::o;387:663:4:-;460:13;493:16;501:7;493;:16::i;:::-;485:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;574:23;600:10;:19;611:7;600:19;;;;;;;;;;;574:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;629:18;650:10;:8;:10::i;:::-;629:31;;755:1;739:4;733:18;:23;729:70;;;779:9;772:16;;;;;;729:70;927:1;907:9;901:23;:27;897:106;;;975:4;981:9;958:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;944:48;;;;;;897:106;1020:23;1035:7;1020:14;:23::i;:::-;1013:30;;;;387:663;;;;:::o;4565:162:1:-;4662:4;4685:18;:25;4704:5;4685:25;;;;;;;;;;;;;;;:35;4711:8;4685:35;;;;;;;;;;;;;;;;;;;;;;;;;4678:42;;4565:162;;;;:::o;1846:189:0:-;1196:12;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1954:1:::1;1934:22;;:8;:22;;;;1926:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2009:19;2019:8;2009:9;:19::i;:::-;1846:189:::0;:::o;763:155:10:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;7222:125:1:-;7287:4;7338:1;7310:30;;:7;:16;7318:7;7310:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7303:37;;7222:125;;;:::o;587:96:7:-;640:7;666:10;659:17;;587:96;:::o;11073:171:1:-;11174:2;11147:15;:24;11163:7;11147:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11229:7;11225:2;11191:46;;11200:23;11215:7;11200:14;:23::i;:::-;11191:46;;;;;;;;;;;;11073:171;;:::o;7505:344::-;7598:4;7622:16;7630:7;7622;:16::i;:::-;7614:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7697:13;7713:23;7728:7;7713:14;:23::i;:::-;7697:39;;7765:5;7754:16;;:7;:16;;;:51;;;;7798:7;7774:31;;:20;7786:7;7774:11;:20::i;:::-;:31;;;7754:51;:87;;;;7809:32;7826:5;7833:7;7809:16;:32::i;:::-;7754:87;7746:96;;;7505:344;;;;:::o;10402:560::-;10556:4;10529:31;;:23;10544:7;10529:14;:23::i;:::-;:31;;;10521:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10638:1;10624:16;;:2;:16;;;;10616:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10692:39;10713:4;10719:2;10723:7;10692:20;:39::i;:::-;10793:29;10810:1;10814:7;10793:8;:29::i;:::-;10852:1;10833:9;:15;10843:4;10833:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10880:1;10863:9;:13;10873:2;10863:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10910:2;10891:7;:16;10899:7;10891:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10947:7;10943:2;10928:27;;10937:4;10928:27;;;;;;;;;;;;10402:560;;;:::o;2041:169:0:-;2096:16;2115:6;;;;;;;;;;;2096:25;;2140:8;2131:6;;:17;;;;;;;;;;;;;;;;;;2194:8;2163:40;;2184:8;2163:40;;;;;;;;;;;;2086:124;2041:169;:::o;6612:307:1:-;6763:28;6773:4;6779:2;6783:7;6763:9;:28::i;:::-;6809:48;6832:4;6838:2;6842:7;6851:5;6809:22;:48::i;:::-;6801:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6612:307;;;;:::o;891:123:8:-;996:1;978:7;:14;;;:19;;;;;;;;;;;891:123;:::o;773:112::-;838:7;864;:14;;;857:21;;773:112;;;:::o;9141:372:1:-;9234:1;9220:16;;:2;:16;;;;9212:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9292:16;9300:7;9292;:16::i;:::-;9291:17;9283:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9352:45;9381:1;9385:2;9389:7;9352:20;:45::i;:::-;9425:1;9408:9;:13;9418:2;9408:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9455:2;9436:7;:16;9444:7;9436:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9498:7;9494:2;9473:33;;9490:1;9473:33;;;;;;;;;;;;9141:372;;:::o;1197:214:4:-;1296:16;1304:7;1296;:16::i;:::-;1288:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;1395:9;1373:10;:19;1384:7;1373:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;1197:214;;:::o;3314:92:1:-;3365:13;3390:9;;;;;;;;;;;;;;3314:92;:::o;2744:329::-;2817:13;2850:16;2858:7;2850;:16::i;:::-;2842:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2929:21;2953:10;:8;:10::i;:::-;2929:34;;3004:1;2986:7;2980:21;:25;:86;;;;;;;;;;;;;;;;;3032:7;3041:18;:7;:16;:18::i;:::-;3015:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2980:86;2973:93;;;2744:329;;;:::o;13131:122::-;;;;:::o;11797:778::-;11947:4;11967:15;:2;:13;;;:15::i;:::-;11963:606;;;12018:2;12002:36;;;12039:12;:10;:12::i;:::-;12053:4;12059:7;12068:5;12002:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11998:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12258:1;12241:6;:13;:18;12237:266;;;12283:60;;;;;;;;;;:::i;:::-;;;;;;;;12237:266;12455:6;12449:13;12440:6;12436:2;12432:15;12425:38;11998:519;12134:41;;;12124:51;;;:6;:51;;;;12117:58;;;;;11963:606;12554:4;12547:11;;11797:778;;;;;;;:::o;275:703:9:-;331:13;557:1;548:5;:10;544:51;;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;718:377:6:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:14:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:2;;;698:79;;:::i;:::-;667:2;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;893:87;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;1035:84;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1176:86;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1330:79;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:2;;1540:79;;:::i;:::-;1499:2;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:2;;1899:79;;:::i;:::-;1858:2;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2184:87;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2391:79;;:::i;:::-;2353:2;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2343:263;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:2;;;2743:79;;:::i;:::-;2705:2;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2695:391;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:2;;;3240:79;;:::i;:::-;3202:2;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3192:519;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:2;;;3892:79;;:::i;:::-;3853:2;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:2;;;4476:79;;:::i;:::-;4440:2;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3843:817;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:2;;;4794:79;;:::i;:::-;4756:2;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4746:388;;;;;:::o;5140:654::-;5218:6;5226;5275:2;5263:9;5254:7;5250:23;5246:32;5243:2;;;5281:79;;:::i;:::-;5243:2;5401:1;5426:53;5471:7;5462:6;5451:9;5447:22;5426:53;:::i;:::-;5416:63;;5372:117;5556:2;5545:9;5541:18;5528:32;5587:18;5579:6;5576:30;5573:2;;;5609:79;;:::i;:::-;5573:2;5714:63;5769:7;5760:6;5749:9;5745:22;5714:63;:::i;:::-;5704:73;;5499:288;5233:561;;;;;:::o;5800:474::-;5868:6;5876;5925:2;5913:9;5904:7;5900:23;5896:32;5893:2;;;5931:79;;:::i;:::-;5893:2;6051:1;6076:53;6121:7;6112:6;6101:9;6097:22;6076:53;:::i;:::-;6066:63;;6022:117;6178:2;6204:53;6249:7;6240:6;6229:9;6225:22;6204:53;:::i;:::-;6194:63;;6149:118;5883:391;;;;;:::o;6280:327::-;6338:6;6387:2;6375:9;6366:7;6362:23;6358:32;6355:2;;;6393:79;;:::i;:::-;6355:2;6513:1;6538:52;6582:7;6573:6;6562:9;6558:22;6538:52;:::i;:::-;6528:62;;6484:116;6345:262;;;;:::o;6613:349::-;6682:6;6731:2;6719:9;6710:7;6706:23;6702:32;6699:2;;;6737:79;;:::i;:::-;6699:2;6857:1;6882:63;6937:7;6928:6;6917:9;6913:22;6882:63;:::i;:::-;6872:73;;6828:127;6689:273;;;;:::o;6968:329::-;7027:6;7076:2;7064:9;7055:7;7051:23;7047:32;7044:2;;;7082:79;;:::i;:::-;7044:2;7202:1;7227:53;7272:7;7263:6;7252:9;7248:22;7227:53;:::i;:::-;7217:63;;7173:117;7034:263;;;;:::o;7303:118::-;7390:24;7408:5;7390:24;:::i;:::-;7385:3;7378:37;7368:53;;:::o;7427:109::-;7508:21;7523:5;7508:21;:::i;:::-;7503:3;7496:34;7486:50;;:::o;7542:360::-;7628:3;7656:38;7688:5;7656:38;:::i;:::-;7710:70;7773:6;7768:3;7710:70;:::i;:::-;7703:77;;7789:52;7834:6;7829:3;7822:4;7815:5;7811:16;7789:52;:::i;:::-;7866:29;7888:6;7866:29;:::i;:::-;7861:3;7857:39;7850:46;;7632:270;;;;;:::o;7908:364::-;7996:3;8024:39;8057:5;8024:39;:::i;:::-;8079:71;8143:6;8138:3;8079:71;:::i;:::-;8072:78;;8159:52;8204:6;8199:3;8192:4;8185:5;8181:16;8159:52;:::i;:::-;8236:29;8258:6;8236:29;:::i;:::-;8231:3;8227:39;8220:46;;8000:272;;;;;:::o;8278:377::-;8384:3;8412:39;8445:5;8412:39;:::i;:::-;8467:89;8549:6;8544:3;8467:89;:::i;:::-;8460:96;;8565:52;8610:6;8605:3;8598:4;8591:5;8587:16;8565:52;:::i;:::-;8642:6;8637:3;8633:16;8626:23;;8388:267;;;;;:::o;8661:366::-;8803:3;8824:67;8888:2;8883:3;8824:67;:::i;:::-;8817:74;;8900:93;8989:3;8900:93;:::i;:::-;9018:2;9013:3;9009:12;9002:19;;8807:220;;;:::o;9033:366::-;9175:3;9196:67;9260:2;9255:3;9196:67;:::i;:::-;9189:74;;9272:93;9361:3;9272:93;:::i;:::-;9390:2;9385:3;9381:12;9374:19;;9179:220;;;:::o;9405:366::-;9547:3;9568:67;9632:2;9627:3;9568:67;:::i;:::-;9561:74;;9644:93;9733:3;9644:93;:::i;:::-;9762:2;9757:3;9753:12;9746:19;;9551:220;;;:::o;9777:366::-;9919:3;9940:67;10004:2;9999:3;9940:67;:::i;:::-;9933:74;;10016:93;10105:3;10016:93;:::i;:::-;10134:2;10129:3;10125:12;10118:19;;9923:220;;;:::o;10149:366::-;10291:3;10312:67;10376:2;10371:3;10312:67;:::i;:::-;10305:74;;10388:93;10477:3;10388:93;:::i;:::-;10506:2;10501:3;10497:12;10490:19;;10295:220;;;:::o;10521:366::-;10663:3;10684:67;10748:2;10743:3;10684:67;:::i;:::-;10677:74;;10760:93;10849:3;10760:93;:::i;:::-;10878:2;10873:3;10869:12;10862:19;;10667:220;;;:::o;10893:366::-;11035:3;11056:67;11120:2;11115:3;11056:67;:::i;:::-;11049:74;;11132:93;11221:3;11132:93;:::i;:::-;11250:2;11245:3;11241:12;11234:19;;11039:220;;;:::o;11265:366::-;11407:3;11428:67;11492:2;11487:3;11428:67;:::i;:::-;11421:74;;11504:93;11593:3;11504:93;:::i;:::-;11622:2;11617:3;11613:12;11606:19;;11411:220;;;:::o;11637:366::-;11779:3;11800:67;11864:2;11859:3;11800:67;:::i;:::-;11793:74;;11876:93;11965:3;11876:93;:::i;:::-;11994:2;11989:3;11985:12;11978:19;;11783:220;;;:::o;12009:366::-;12151:3;12172:67;12236:2;12231:3;12172:67;:::i;:::-;12165:74;;12248:93;12337:3;12248:93;:::i;:::-;12366:2;12361:3;12357:12;12350:19;;12155:220;;;:::o;12381:366::-;12523:3;12544:67;12608:2;12603:3;12544:67;:::i;:::-;12537:74;;12620:93;12709:3;12620:93;:::i;:::-;12738:2;12733:3;12729:12;12722:19;;12527:220;;;:::o;12753:366::-;12895:3;12916:67;12980:2;12975:3;12916:67;:::i;:::-;12909:74;;12992:93;13081:3;12992:93;:::i;:::-;13110:2;13105:3;13101:12;13094:19;;12899:220;;;:::o;13125:366::-;13267:3;13288:67;13352:2;13347:3;13288:67;:::i;:::-;13281:74;;13364:93;13453:3;13364:93;:::i;:::-;13482:2;13477:3;13473:12;13466:19;;13271:220;;;:::o;13497:366::-;13639:3;13660:67;13724:2;13719:3;13660:67;:::i;:::-;13653:74;;13736:93;13825:3;13736:93;:::i;:::-;13854:2;13849:3;13845:12;13838:19;;13643:220;;;:::o;13869:366::-;14011:3;14032:67;14096:2;14091:3;14032:67;:::i;:::-;14025:74;;14108:93;14197:3;14108:93;:::i;:::-;14226:2;14221:3;14217:12;14210:19;;14015:220;;;:::o;14241:366::-;14383:3;14404:67;14468:2;14463:3;14404:67;:::i;:::-;14397:74;;14480:93;14569:3;14480:93;:::i;:::-;14598:2;14593:3;14589:12;14582:19;;14387:220;;;:::o;14613:366::-;14755:3;14776:67;14840:2;14835:3;14776:67;:::i;:::-;14769:74;;14852:93;14941:3;14852:93;:::i;:::-;14970:2;14965:3;14961:12;14954:19;;14759:220;;;:::o;14985:366::-;15127:3;15148:67;15212:2;15207:3;15148:67;:::i;:::-;15141:74;;15224:93;15313:3;15224:93;:::i;:::-;15342:2;15337:3;15333:12;15326:19;;15131:220;;;:::o;15357:118::-;15444:24;15462:5;15444:24;:::i;:::-;15439:3;15432:37;15422:53;;:::o;15481:435::-;15661:3;15683:95;15774:3;15765:6;15683:95;:::i;:::-;15676:102;;15795:95;15886:3;15877:6;15795:95;:::i;:::-;15788:102;;15907:3;15900:10;;15665:251;;;;;:::o;15922:222::-;16015:4;16053:2;16042:9;16038:18;16030:26;;16066:71;16134:1;16123:9;16119:17;16110:6;16066:71;:::i;:::-;16020:124;;;;:::o;16150:640::-;16345:4;16383:3;16372:9;16368:19;16360:27;;16397:71;16465:1;16454:9;16450:17;16441:6;16397:71;:::i;:::-;16478:72;16546:2;16535:9;16531:18;16522:6;16478:72;:::i;:::-;16560;16628:2;16617:9;16613:18;16604:6;16560:72;:::i;:::-;16679:9;16673:4;16669:20;16664:2;16653:9;16649:18;16642:48;16707:76;16778:4;16769:6;16707:76;:::i;:::-;16699:84;;16350:440;;;;;;;:::o;16796:210::-;16883:4;16921:2;16910:9;16906:18;16898:26;;16934:65;16996:1;16985:9;16981:17;16972:6;16934:65;:::i;:::-;16888:118;;;;:::o;17012:313::-;17125:4;17163:2;17152:9;17148:18;17140:26;;17212:9;17206:4;17202:20;17198:1;17187:9;17183:17;17176:47;17240:78;17313:4;17304:6;17240:78;:::i;:::-;17232:86;;17130:195;;;;:::o;17331:419::-;17497:4;17535:2;17524:9;17520:18;17512:26;;17584:9;17578:4;17574:20;17570:1;17559:9;17555:17;17548:47;17612:131;17738:4;17612:131;:::i;:::-;17604:139;;17502:248;;;:::o;17756:419::-;17922:4;17960:2;17949:9;17945:18;17937:26;;18009:9;18003:4;17999:20;17995:1;17984:9;17980:17;17973:47;18037:131;18163:4;18037:131;:::i;:::-;18029:139;;17927:248;;;:::o;18181:419::-;18347:4;18385:2;18374:9;18370:18;18362:26;;18434:9;18428:4;18424:20;18420:1;18409:9;18405:17;18398:47;18462:131;18588:4;18462:131;:::i;:::-;18454:139;;18352:248;;;:::o;18606:419::-;18772:4;18810:2;18799:9;18795:18;18787:26;;18859:9;18853:4;18849:20;18845:1;18834:9;18830:17;18823:47;18887:131;19013:4;18887:131;:::i;:::-;18879:139;;18777:248;;;:::o;19031:419::-;19197:4;19235:2;19224:9;19220:18;19212:26;;19284:9;19278:4;19274:20;19270:1;19259:9;19255:17;19248:47;19312:131;19438:4;19312:131;:::i;:::-;19304:139;;19202:248;;;:::o;19456:419::-;19622:4;19660:2;19649:9;19645:18;19637:26;;19709:9;19703:4;19699:20;19695:1;19684:9;19680:17;19673:47;19737:131;19863:4;19737:131;:::i;:::-;19729:139;;19627:248;;;:::o;19881:419::-;20047:4;20085:2;20074:9;20070:18;20062:26;;20134:9;20128:4;20124:20;20120:1;20109:9;20105:17;20098:47;20162:131;20288:4;20162:131;:::i;:::-;20154:139;;20052:248;;;:::o;20306:419::-;20472:4;20510:2;20499:9;20495:18;20487:26;;20559:9;20553:4;20549:20;20545:1;20534:9;20530:17;20523:47;20587:131;20713:4;20587:131;:::i;:::-;20579:139;;20477:248;;;:::o;20731:419::-;20897:4;20935:2;20924:9;20920:18;20912:26;;20984:9;20978:4;20974:20;20970:1;20959:9;20955:17;20948:47;21012:131;21138:4;21012:131;:::i;:::-;21004:139;;20902:248;;;:::o;21156:419::-;21322:4;21360:2;21349:9;21345:18;21337:26;;21409:9;21403:4;21399:20;21395:1;21384:9;21380:17;21373:47;21437:131;21563:4;21437:131;:::i;:::-;21429:139;;21327:248;;;:::o;21581:419::-;21747:4;21785:2;21774:9;21770:18;21762:26;;21834:9;21828:4;21824:20;21820:1;21809:9;21805:17;21798:47;21862:131;21988:4;21862:131;:::i;:::-;21854:139;;21752:248;;;:::o;22006:419::-;22172:4;22210:2;22199:9;22195:18;22187:26;;22259:9;22253:4;22249:20;22245:1;22234:9;22230:17;22223:47;22287:131;22413:4;22287:131;:::i;:::-;22279:139;;22177:248;;;:::o;22431:419::-;22597:4;22635:2;22624:9;22620:18;22612:26;;22684:9;22678:4;22674:20;22670:1;22659:9;22655:17;22648:47;22712:131;22838:4;22712:131;:::i;:::-;22704:139;;22602:248;;;:::o;22856:419::-;23022:4;23060:2;23049:9;23045:18;23037:26;;23109:9;23103:4;23099:20;23095:1;23084:9;23080:17;23073:47;23137:131;23263:4;23137:131;:::i;:::-;23129:139;;23027:248;;;:::o;23281:419::-;23447:4;23485:2;23474:9;23470:18;23462:26;;23534:9;23528:4;23524:20;23520:1;23509:9;23505:17;23498:47;23562:131;23688:4;23562:131;:::i;:::-;23554:139;;23452:248;;;:::o;23706:419::-;23872:4;23910:2;23899:9;23895:18;23887:26;;23959:9;23953:4;23949:20;23945:1;23934:9;23930:17;23923:47;23987:131;24113:4;23987:131;:::i;:::-;23979:139;;23877:248;;;:::o;24131:419::-;24297:4;24335:2;24324:9;24320:18;24312:26;;24384:9;24378:4;24374:20;24370:1;24359:9;24355:17;24348:47;24412:131;24538:4;24412:131;:::i;:::-;24404:139;;24302:248;;;:::o;24556:419::-;24722:4;24760:2;24749:9;24745:18;24737:26;;24809:9;24803:4;24799:20;24795:1;24784:9;24780:17;24773:47;24837:131;24963:4;24837:131;:::i;:::-;24829:139;;24727:248;;;:::o;24981:222::-;25074:4;25112:2;25101:9;25097:18;25089:26;;25125:71;25193:1;25182:9;25178:17;25169:6;25125:71;:::i;:::-;25079:124;;;;:::o;25209:129::-;25243:6;25270:20;;:::i;:::-;25260:30;;25299:33;25327:4;25319:6;25299:33;:::i;:::-;25250:88;;;:::o;25344:75::-;25377:6;25410:2;25404:9;25394:19;;25384:35;:::o;25425:307::-;25486:4;25576:18;25568:6;25565:30;25562:2;;;25598:18;;:::i;:::-;25562:2;25636:29;25658:6;25636:29;:::i;:::-;25628:37;;25720:4;25714;25710:15;25702:23;;25491:241;;;:::o;25738:308::-;25800:4;25890:18;25882:6;25879:30;25876:2;;;25912:18;;:::i;:::-;25876:2;25950:29;25972:6;25950:29;:::i;:::-;25942:37;;26034:4;26028;26024:15;26016:23;;25805:241;;;:::o;26052:98::-;26103:6;26137:5;26131:12;26121:22;;26110:40;;;:::o;26156:99::-;26208:6;26242:5;26236:12;26226:22;;26215:40;;;:::o;26261:168::-;26344:11;26378:6;26373:3;26366:19;26418:4;26413:3;26409:14;26394:29;;26356:73;;;;:::o;26435:169::-;26519:11;26553:6;26548:3;26541:19;26593:4;26588:3;26584:14;26569:29;;26531:73;;;;:::o;26610:148::-;26712:11;26749:3;26734:18;;26724:34;;;;:::o;26764:305::-;26804:3;26823:20;26841:1;26823:20;:::i;:::-;26818:25;;26857:20;26875:1;26857:20;:::i;:::-;26852:25;;27011:1;26943:66;26939:74;26936:1;26933:81;26930:2;;;27017:18;;:::i;:::-;26930:2;27061:1;27058;27054:9;27047:16;;26808:261;;;;:::o;27075:185::-;27115:1;27132:20;27150:1;27132:20;:::i;:::-;27127:25;;27166:20;27184:1;27166:20;:::i;:::-;27161:25;;27205:1;27195:2;;27210:18;;:::i;:::-;27195:2;27252:1;27249;27245:9;27240:14;;27117:143;;;;:::o;27266:191::-;27306:4;27326:20;27344:1;27326:20;:::i;:::-;27321:25;;27360:20;27378:1;27360:20;:::i;:::-;27355:25;;27399:1;27396;27393:8;27390:2;;;27404:18;;:::i;:::-;27390:2;27449:1;27446;27442:9;27434:17;;27311:146;;;;:::o;27463:96::-;27500:7;27529:24;27547:5;27529:24;:::i;:::-;27518:35;;27508:51;;;:::o;27565:90::-;27599:7;27642:5;27635:13;27628:21;27617:32;;27607:48;;;:::o;27661:149::-;27697:7;27737:66;27730:5;27726:78;27715:89;;27705:105;;;:::o;27816:126::-;27853:7;27893:42;27886:5;27882:54;27871:65;;27861:81;;;:::o;27948:77::-;27985:7;28014:5;28003:16;;27993:32;;;:::o;28031:154::-;28115:6;28110:3;28105;28092:30;28177:1;28168:6;28163:3;28159:16;28152:27;28082:103;;;:::o;28191:307::-;28259:1;28269:113;28283:6;28280:1;28277:13;28269:113;;;28368:1;28363:3;28359:11;28353:18;28349:1;28344:3;28340:11;28333:39;28305:2;28302:1;28298:10;28293:15;;28269:113;;;28400:6;28397:1;28394:13;28391:2;;;28480:1;28471:6;28466:3;28462:16;28455:27;28391:2;28240:258;;;;:::o;28504:320::-;28548:6;28585:1;28579:4;28575:12;28565:22;;28632:1;28626:4;28622:12;28653:18;28643:2;;28709:4;28701:6;28697:17;28687:27;;28643:2;28771;28763:6;28760:14;28740:18;28737:38;28734:2;;;28790:18;;:::i;:::-;28734:2;28555:269;;;;:::o;28830:281::-;28913:27;28935:4;28913:27;:::i;:::-;28905:6;28901:40;29043:6;29031:10;29028:22;29007:18;28995:10;28992:34;28989:62;28986:2;;;29054:18;;:::i;:::-;28986:2;29094:10;29090:2;29083:22;28873:238;;;:::o;29117:233::-;29156:3;29179:24;29197:5;29179:24;:::i;:::-;29170:33;;29225:66;29218:5;29215:77;29212:2;;;29295:18;;:::i;:::-;29212:2;29342:1;29335:5;29331:13;29324:20;;29160:190;;;:::o;29356:176::-;29388:1;29405:20;29423:1;29405:20;:::i;:::-;29400:25;;29439:20;29457:1;29439:20;:::i;:::-;29434:25;;29478:1;29468:2;;29483:18;;:::i;:::-;29468:2;29524:1;29521;29517:9;29512:14;;29390:142;;;;:::o;29538:180::-;29586:77;29583:1;29576:88;29683:4;29680:1;29673:15;29707:4;29704:1;29697:15;29724:180;29772:77;29769:1;29762:88;29869:4;29866:1;29859:15;29893:4;29890:1;29883:15;29910:180;29958:77;29955:1;29948:88;30055:4;30052:1;30045:15;30079:4;30076:1;30069:15;30096:180;30144:77;30141:1;30134:88;30241:4;30238:1;30231:15;30265:4;30262:1;30255:15;30282:180;30330:77;30327:1;30320:88;30427:4;30424:1;30417:15;30451:4;30448:1;30441:15;30468:117;30577:1;30574;30567:12;30591:117;30700:1;30697;30690:12;30714:117;30823:1;30820;30813:12;30837:117;30946:1;30943;30936:12;30960:102;31001:6;31052:2;31048:7;31043:2;31036:5;31032:14;31028:28;31018:38;;31008:54;;;:::o;31068:237::-;31208:34;31204:1;31196:6;31192:14;31185:58;31277:20;31272:2;31264:6;31260:15;31253:45;31174:131;:::o;31311:225::-;31451:34;31447:1;31439:6;31435:14;31428:58;31520:8;31515:2;31507:6;31503:15;31496:33;31417:119;:::o;31542:178::-;31682:30;31678:1;31670:6;31666:14;31659:54;31648:72;:::o;31726:223::-;31866:34;31862:1;31854:6;31850:14;31843:58;31935:6;31930:2;31922:6;31918:15;31911:31;31832:117;:::o;31955:175::-;32095:27;32091:1;32083:6;32079:14;32072:51;32061:69;:::o;32136:231::-;32276:34;32272:1;32264:6;32260:14;32253:58;32345:14;32340:2;32332:6;32328:15;32321:39;32242:125;:::o;32373:243::-;32513:34;32509:1;32501:6;32497:14;32490:58;32582:26;32577:2;32569:6;32565:15;32558:51;32479:137;:::o;32622:229::-;32762:34;32758:1;32750:6;32746:14;32739:58;32831:12;32826:2;32818:6;32814:15;32807:37;32728:123;:::o;32857:228::-;32997:34;32993:1;32985:6;32981:14;32974:58;33066:11;33061:2;33053:6;33049:15;33042:36;32963:122;:::o;33091:233::-;33231:34;33227:1;33219:6;33215:14;33208:58;33300:16;33295:2;33287:6;33283:15;33276:41;33197:127;:::o;33330:182::-;33470:34;33466:1;33458:6;33454:14;33447:58;33436:76;:::o;33518:236::-;33658:34;33654:1;33646:6;33642:14;33635:58;33727:19;33722:2;33714:6;33710:15;33703:44;33624:130;:::o;33760:231::-;33900:34;33896:1;33888:6;33884:14;33877:58;33969:14;33964:2;33956:6;33952:15;33945:39;33866:125;:::o;33997:182::-;34137:34;34133:1;34125:6;34121:14;34114:58;34103:76;:::o;34185:228::-;34325:34;34321:1;34313:6;34309:14;34302:58;34394:11;34389:2;34381:6;34377:15;34370:36;34291:122;:::o;34419:234::-;34559:34;34555:1;34547:6;34543:14;34536:58;34628:17;34623:2;34615:6;34611:15;34604:42;34525:128;:::o;34659:220::-;34799:34;34795:1;34787:6;34783:14;34776:58;34868:3;34863:2;34855:6;34851:15;34844:28;34765:114;:::o;34885:236::-;35025:34;35021:1;35013:6;35009:14;35002:58;35094:19;35089:2;35081:6;35077:15;35070:44;34991:130;:::o;35127:122::-;35200:24;35218:5;35200:24;:::i;:::-;35193:5;35190:35;35180:2;;35239:1;35236;35229:12;35180:2;35170:79;:::o;35255:116::-;35325:21;35340:5;35325:21;:::i;:::-;35318:5;35315:32;35305:2;;35361:1;35358;35351:12;35305:2;35295:76;:::o;35377:120::-;35449:23;35466:5;35449:23;:::i;:::-;35442:5;35439:34;35429:2;;35487:1;35484;35477:12;35429:2;35419:78;:::o;35503:122::-;35576:24;35594:5;35576:24;:::i;:::-;35569:5;35566:35;35556:2;;35615:1;35612;35605:12;35556:2;35546:79;:::o",
+ "source": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.6;\n\nimport \"@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol\";\nimport \"@openzeppelin/contracts/utils/Counters.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract PanacloudApi is ERC721URIStorage, Ownable {\n using Counters for Counters.Counter;\n Counters.Counter private _tokenIds;\n\n constructor() ERC721(\"PanaApi\", \"PNA\") {}\n\n function createPanacloudApi(address player, string memory tokenURI) public onlyOwner returns (uint256) {\n _tokenIds.increment();\n uint256 newItemId = _tokenIds.current();\n _mint(player, newItemId);\n _setTokenURI(newItemId, tokenURI);\n return newItemId;\n }\n}",
+ "sourcePath": "/home/uzairbangee/Development/Blockchain/FirstNFT/contracts/PanacloudApi.sol",
+ "ast": {
+ "absolutePath": "project:/contracts/PanacloudApi.sol",
+ "exportedSymbols": {
+ "Address": [
+ 1505
+ ],
+ "Context": [
+ 1527
+ ],
+ "Counters": [
+ 1601
+ ],
+ "ERC165": [
+ 1828
+ ],
+ "ERC721": [
+ 919
+ ],
+ "ERC721URIStorage": [
+ 1181
+ ],
+ "IERC165": [
+ 1840
+ ],
+ "IERC721": [
+ 1035
+ ],
+ "IERC721Metadata": [
+ 1208
+ ],
+ "IERC721Receiver": [
+ 1053
+ ],
+ "Ownable": [
+ 103
+ ],
+ "PanacloudApi": [
+ 1933
+ ],
+ "Strings": [
+ 1804
+ ]
+ },
+ "id": 1934,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1875,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".6"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "32:23:13"
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol",
+ "file": "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol",
+ "id": 1876,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 1934,
+ "sourceUnit": 1182,
+ "src": "57:78:13",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/utils/Counters.sol",
+ "file": "@openzeppelin/contracts/utils/Counters.sol",
+ "id": 1877,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 1934,
+ "sourceUnit": 1602,
+ "src": "136:52:13",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
+ "file": "@openzeppelin/contracts/access/Ownable.sol",
+ "id": 1878,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 1934,
+ "sourceUnit": 104,
+ "src": "189:52:13",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [
+ {
+ "baseName": {
+ "id": 1879,
+ "name": "ERC721URIStorage",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1181,
+ "src": "268:16:13"
+ },
+ "id": 1880,
+ "nodeType": "InheritanceSpecifier",
+ "src": "268:16:13"
+ },
+ {
+ "baseName": {
+ "id": 1881,
+ "name": "Ownable",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 103,
+ "src": "286:7:13"
+ },
+ "id": 1882,
+ "nodeType": "InheritanceSpecifier",
+ "src": "286:7:13"
+ }
+ ],
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "fullyImplemented": true,
+ "id": 1933,
+ "linearizedBaseContracts": [
+ 1933,
+ 103,
+ 1181,
+ 919,
+ 1208,
+ 1035,
+ 1828,
+ 1840,
+ 1527
+ ],
+ "name": "PanacloudApi",
+ "nameLocation": "252:12:13",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "id": 1886,
+ "libraryName": {
+ "id": 1883,
+ "name": "Counters",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1601,
+ "src": "306:8:13"
+ },
+ "nodeType": "UsingForDirective",
+ "src": "300:36:13",
+ "typeName": {
+ "id": 1885,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 1884,
+ "name": "Counters.Counter",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1533,
+ "src": "319:16:13"
+ },
+ "referencedDeclaration": 1533,
+ "src": "319:16:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ }
+ }
+ },
+ {
+ "constant": false,
+ "id": 1889,
+ "mutability": "mutable",
+ "name": "_tokenIds",
+ "nameLocation": "366:9:13",
+ "nodeType": "VariableDeclaration",
+ "scope": 1933,
+ "src": "341:34:13",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage",
+ "typeString": "struct Counters.Counter"
+ },
+ "typeName": {
+ "id": 1888,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 1887,
+ "name": "Counters.Counter",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1533,
+ "src": "341:16:13"
+ },
+ "referencedDeclaration": 1533,
+ "src": "341:16:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "body": {
+ "id": 1896,
+ "nodeType": "Block",
+ "src": "421:2:13",
+ "statements": []
+ },
+ "id": 1897,
+ "implemented": true,
+ "kind": "constructor",
+ "modifiers": [
+ {
+ "arguments": [
+ {
+ "hexValue": "50616e61417069",
+ "id": 1892,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "403:9:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_d3122129a7310660360c3844200158610f2e637caf9a861c343b705313ea3d63",
+ "typeString": "literal_string \"PanaApi\""
+ },
+ "value": "PanaApi"
+ },
+ {
+ "hexValue": "504e41",
+ "id": 1893,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "414:5:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_ac02563cd17d259f4243c67b56714307812fefe11cf025f7a2960b7253d18702",
+ "typeString": "literal_string \"PNA\""
+ },
+ "value": "PNA"
+ }
+ ],
+ "id": 1894,
+ "kind": "baseConstructorSpecifier",
+ "modifierName": {
+ "id": 1891,
+ "name": "ERC721",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 919,
+ "src": "396:6:13"
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "396:24:13"
+ }
+ ],
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1890,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "393:2:13"
+ },
+ "returnParameters": {
+ "id": 1895,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "421:0:13"
+ },
+ "scope": 1933,
+ "src": "382:41:13",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 1931,
+ "nodeType": "Block",
+ "src": "532:190:13",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "id": 1908,
+ "name": "_tokenIds",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1889,
+ "src": "542:9:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage",
+ "typeString": "struct Counters.Counter storage ref"
+ }
+ },
+ "id": 1910,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "increment",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1559,
+ "src": "542:19:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Counter_$1533_storage_ptr_$returns$__$bound_to$_t_struct$_Counter_$1533_storage_ptr_$",
+ "typeString": "function (struct Counters.Counter storage pointer)"
+ }
+ },
+ "id": 1911,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "542:21:13",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1912,
+ "nodeType": "ExpressionStatement",
+ "src": "542:21:13"
+ },
+ {
+ "assignments": [
+ 1914
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1914,
+ "mutability": "mutable",
+ "name": "newItemId",
+ "nameLocation": "581:9:13",
+ "nodeType": "VariableDeclaration",
+ "scope": 1931,
+ "src": "573:17:13",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1913,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "573:7:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1918,
+ "initialValue": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "id": 1915,
+ "name": "_tokenIds",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1889,
+ "src": "593:9:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage",
+ "typeString": "struct Counters.Counter storage ref"
+ }
+ },
+ "id": 1916,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "current",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1545,
+ "src": "593:17:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$1533_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$1533_storage_ptr_$",
+ "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
+ }
+ },
+ "id": 1917,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "593:19:13",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "573:39:13"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1920,
+ "name": "player",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1899,
+ "src": "628:6:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 1921,
+ "name": "newItemId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1914,
+ "src": "636:9:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1919,
+ "name": "_mint",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 701,
+ "src": "622:5:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 1922,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "622:24:13",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1923,
+ "nodeType": "ExpressionStatement",
+ "src": "622:24:13"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1925,
+ "name": "newItemId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1914,
+ "src": "669:9:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "id": 1926,
+ "name": "tokenURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1901,
+ "src": "680:8:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 1924,
+ "name": "_setTokenURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1150,
+ "src": "656:12:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (uint256,string memory)"
+ }
+ },
+ "id": 1927,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "656:33:13",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1928,
+ "nodeType": "ExpressionStatement",
+ "src": "656:33:13"
+ },
+ {
+ "expression": {
+ "id": 1929,
+ "name": "newItemId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1914,
+ "src": "706:9:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 1907,
+ "id": 1930,
+ "nodeType": "Return",
+ "src": "699:16:13"
+ }
+ ]
+ },
+ "functionSelector": "c7790981",
+ "id": 1932,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "id": 1904,
+ "kind": "modifierInvocation",
+ "modifierName": {
+ "id": 1903,
+ "name": "onlyOwner",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 46,
+ "src": "504:9:13"
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "504:9:13"
+ }
+ ],
+ "name": "createPanacloudApi",
+ "nameLocation": "438:18:13",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1902,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1899,
+ "mutability": "mutable",
+ "name": "player",
+ "nameLocation": "465:6:13",
+ "nodeType": "VariableDeclaration",
+ "scope": 1932,
+ "src": "457:14:13",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1898,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "457:7:13",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1901,
+ "mutability": "mutable",
+ "name": "tokenURI",
+ "nameLocation": "487:8:13",
+ "nodeType": "VariableDeclaration",
+ "scope": 1932,
+ "src": "473:22:13",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1900,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "473:6:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "456:40:13"
+ },
+ "returnParameters": {
+ "id": 1907,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1906,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1932,
+ "src": "523:7:13",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1905,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "523:7:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "522:9:13"
+ },
+ "scope": 1933,
+ "src": "429:293:13",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ }
+ ],
+ "scope": 1934,
+ "src": "243:481:13",
+ "usedErrors": []
+ }
+ ],
+ "src": "32:692:13"
+ },
+ "legacyAST": {
+ "absolutePath": "project:/contracts/PanacloudApi.sol",
+ "exportedSymbols": {
+ "Address": [
+ 1505
+ ],
+ "Context": [
+ 1527
+ ],
+ "Counters": [
+ 1601
+ ],
+ "ERC165": [
+ 1828
+ ],
+ "ERC721": [
+ 919
+ ],
+ "ERC721URIStorage": [
+ 1181
+ ],
+ "IERC165": [
+ 1840
+ ],
+ "IERC721": [
+ 1035
+ ],
+ "IERC721Metadata": [
+ 1208
+ ],
+ "IERC721Receiver": [
+ 1053
+ ],
+ "Ownable": [
+ 103
+ ],
+ "PanacloudApi": [
+ 1933
+ ],
+ "Strings": [
+ 1804
+ ]
+ },
+ "id": 1934,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1875,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".6"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "32:23:13"
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol",
+ "file": "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol",
+ "id": 1876,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 1934,
+ "sourceUnit": 1182,
+ "src": "57:78:13",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/utils/Counters.sol",
+ "file": "@openzeppelin/contracts/utils/Counters.sol",
+ "id": 1877,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 1934,
+ "sourceUnit": 1602,
+ "src": "136:52:13",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
+ "file": "@openzeppelin/contracts/access/Ownable.sol",
+ "id": 1878,
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "ImportDirective",
+ "scope": 1934,
+ "sourceUnit": 104,
+ "src": "189:52:13",
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "abstract": false,
+ "baseContracts": [
+ {
+ "baseName": {
+ "id": 1879,
+ "name": "ERC721URIStorage",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1181,
+ "src": "268:16:13"
+ },
+ "id": 1880,
+ "nodeType": "InheritanceSpecifier",
+ "src": "268:16:13"
+ },
+ {
+ "baseName": {
+ "id": 1881,
+ "name": "Ownable",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 103,
+ "src": "286:7:13"
+ },
+ "id": 1882,
+ "nodeType": "InheritanceSpecifier",
+ "src": "286:7:13"
+ }
+ ],
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "fullyImplemented": true,
+ "id": 1933,
+ "linearizedBaseContracts": [
+ 1933,
+ 103,
+ 1181,
+ 919,
+ 1208,
+ 1035,
+ 1828,
+ 1840,
+ 1527
+ ],
+ "name": "PanacloudApi",
+ "nameLocation": "252:12:13",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "id": 1886,
+ "libraryName": {
+ "id": 1883,
+ "name": "Counters",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1601,
+ "src": "306:8:13"
+ },
+ "nodeType": "UsingForDirective",
+ "src": "300:36:13",
+ "typeName": {
+ "id": 1885,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 1884,
+ "name": "Counters.Counter",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1533,
+ "src": "319:16:13"
+ },
+ "referencedDeclaration": 1533,
+ "src": "319:16:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ }
+ }
+ },
+ {
+ "constant": false,
+ "id": 1889,
+ "mutability": "mutable",
+ "name": "_tokenIds",
+ "nameLocation": "366:9:13",
+ "nodeType": "VariableDeclaration",
+ "scope": 1933,
+ "src": "341:34:13",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage",
+ "typeString": "struct Counters.Counter"
+ },
+ "typeName": {
+ "id": 1888,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 1887,
+ "name": "Counters.Counter",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 1533,
+ "src": "341:16:13"
+ },
+ "referencedDeclaration": 1533,
+ "src": "341:16:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage_ptr",
+ "typeString": "struct Counters.Counter"
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "body": {
+ "id": 1896,
+ "nodeType": "Block",
+ "src": "421:2:13",
+ "statements": []
+ },
+ "id": 1897,
+ "implemented": true,
+ "kind": "constructor",
+ "modifiers": [
+ {
+ "arguments": [
+ {
+ "hexValue": "50616e61417069",
+ "id": 1892,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "403:9:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_d3122129a7310660360c3844200158610f2e637caf9a861c343b705313ea3d63",
+ "typeString": "literal_string \"PanaApi\""
+ },
+ "value": "PanaApi"
+ },
+ {
+ "hexValue": "504e41",
+ "id": 1893,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "414:5:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_ac02563cd17d259f4243c67b56714307812fefe11cf025f7a2960b7253d18702",
+ "typeString": "literal_string \"PNA\""
+ },
+ "value": "PNA"
+ }
+ ],
+ "id": 1894,
+ "kind": "baseConstructorSpecifier",
+ "modifierName": {
+ "id": 1891,
+ "name": "ERC721",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 919,
+ "src": "396:6:13"
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "396:24:13"
+ }
+ ],
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1890,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "393:2:13"
+ },
+ "returnParameters": {
+ "id": 1895,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "421:0:13"
+ },
+ "scope": 1933,
+ "src": "382:41:13",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "body": {
+ "id": 1931,
+ "nodeType": "Block",
+ "src": "532:190:13",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "id": 1908,
+ "name": "_tokenIds",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1889,
+ "src": "542:9:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage",
+ "typeString": "struct Counters.Counter storage ref"
+ }
+ },
+ "id": 1910,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "increment",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1559,
+ "src": "542:19:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Counter_$1533_storage_ptr_$returns$__$bound_to$_t_struct$_Counter_$1533_storage_ptr_$",
+ "typeString": "function (struct Counters.Counter storage pointer)"
+ }
+ },
+ "id": 1911,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "542:21:13",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1912,
+ "nodeType": "ExpressionStatement",
+ "src": "542:21:13"
+ },
+ {
+ "assignments": [
+ 1914
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1914,
+ "mutability": "mutable",
+ "name": "newItemId",
+ "nameLocation": "581:9:13",
+ "nodeType": "VariableDeclaration",
+ "scope": 1931,
+ "src": "573:17:13",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1913,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "573:7:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1918,
+ "initialValue": {
+ "arguments": [],
+ "expression": {
+ "argumentTypes": [],
+ "expression": {
+ "id": 1915,
+ "name": "_tokenIds",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1889,
+ "src": "593:9:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_Counter_$1533_storage",
+ "typeString": "struct Counters.Counter storage ref"
+ }
+ },
+ "id": 1916,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberName": "current",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 1545,
+ "src": "593:17:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$1533_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$1533_storage_ptr_$",
+ "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
+ }
+ },
+ "id": 1917,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "593:19:13",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "573:39:13"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1920,
+ "name": "player",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1899,
+ "src": "628:6:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 1921,
+ "name": "newItemId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1914,
+ "src": "636:9:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1919,
+ "name": "_mint",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 701,
+ "src": "622:5:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
+ "typeString": "function (address,uint256)"
+ }
+ },
+ "id": 1922,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "622:24:13",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1923,
+ "nodeType": "ExpressionStatement",
+ "src": "622:24:13"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1925,
+ "name": "newItemId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1914,
+ "src": "669:9:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "id": 1926,
+ "name": "tokenURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1901,
+ "src": "680:8:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ ],
+ "id": 1924,
+ "name": "_setTokenURI",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1150,
+ "src": "656:12:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (uint256,string memory)"
+ }
+ },
+ "id": 1927,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "656:33:13",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1928,
+ "nodeType": "ExpressionStatement",
+ "src": "656:33:13"
+ },
+ {
+ "expression": {
+ "id": 1929,
+ "name": "newItemId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1914,
+ "src": "706:9:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "functionReturnParameters": 1907,
+ "id": 1930,
+ "nodeType": "Return",
+ "src": "699:16:13"
+ }
+ ]
+ },
+ "functionSelector": "c7790981",
+ "id": 1932,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [
+ {
+ "id": 1904,
+ "kind": "modifierInvocation",
+ "modifierName": {
+ "id": 1903,
+ "name": "onlyOwner",
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 46,
+ "src": "504:9:13"
+ },
+ "nodeType": "ModifierInvocation",
+ "src": "504:9:13"
+ }
+ ],
+ "name": "createPanacloudApi",
+ "nameLocation": "438:18:13",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1902,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1899,
+ "mutability": "mutable",
+ "name": "player",
+ "nameLocation": "465:6:13",
+ "nodeType": "VariableDeclaration",
+ "scope": 1932,
+ "src": "457:14:13",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 1898,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "457:7:13",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1901,
+ "mutability": "mutable",
+ "name": "tokenURI",
+ "nameLocation": "487:8:13",
+ "nodeType": "VariableDeclaration",
+ "scope": 1932,
+ "src": "473:22:13",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1900,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "473:6:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "456:40:13"
+ },
+ "returnParameters": {
+ "id": 1907,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1906,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1932,
+ "src": "523:7:13",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1905,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "523:7:13",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "522:9:13"
+ },
+ "scope": 1933,
+ "src": "429:293:13",
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ }
+ ],
+ "scope": 1934,
+ "src": "243:481:13",
+ "usedErrors": []
+ }
+ ],
+ "src": "32:692:13"
+ },
+ "compiler": {
+ "name": "solc",
+ "version": "0.8.6+commit.11564f7e.Emscripten.clang"
+ },
+ "networks": {},
+ "schemaVersion": "3.4.3",
+ "updatedAt": "2021-09-07T13:34:26.840Z",
+ "devdoc": {
+ "kind": "dev",
+ "methods": {
+ "approve(address,uint256)": {
+ "details": "See {IERC721-approve}."
+ },
+ "balanceOf(address)": {
+ "details": "See {IERC721-balanceOf}."
+ },
+ "getApproved(uint256)": {
+ "details": "See {IERC721-getApproved}."
+ },
+ "isApprovedForAll(address,address)": {
+ "details": "See {IERC721-isApprovedForAll}."
+ },
+ "name()": {
+ "details": "See {IERC721Metadata-name}."
+ },
+ "owner()": {
+ "details": "Returns the address of the current owner."
+ },
+ "ownerOf(uint256)": {
+ "details": "See {IERC721-ownerOf}."
+ },
+ "renounceOwnership()": {
+ "details": "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."
+ },
+ "safeTransferFrom(address,address,uint256)": {
+ "details": "See {IERC721-safeTransferFrom}."
+ },
+ "safeTransferFrom(address,address,uint256,bytes)": {
+ "details": "See {IERC721-safeTransferFrom}."
+ },
+ "setApprovalForAll(address,bool)": {
+ "details": "See {IERC721-setApprovalForAll}."
+ },
+ "supportsInterface(bytes4)": {
+ "details": "See {IERC165-supportsInterface}."
+ },
+ "symbol()": {
+ "details": "See {IERC721Metadata-symbol}."
+ },
+ "tokenURI(uint256)": {
+ "details": "See {IERC721Metadata-tokenURI}."
+ },
+ "transferFrom(address,address,uint256)": {
+ "details": "See {IERC721-transferFrom}."
+ },
+ "transferOwnership(address)": {
+ "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
+ }
+ },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {},
+ "version": 1
+ }
+}
\ No newline at end of file
diff --git a/build/contracts/Strings.json b/build/contracts/Strings.json
new file mode 100644
index 0000000..4fff2ee
--- /dev/null
+++ b/build/contracts/Strings.json
@@ -0,0 +1,5126 @@
+{
+ "contractName": "Strings",
+ "abi": [],
+ "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"String operations.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Strings.sol\":\"Strings\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x391d3ba97ab6856a16b225d6ee29617ad15ff00db70f3b4df1ab5ea33aa47c9d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d636ba90bbbeed04a1ea7fe9ec2466757e30fd38ba2ca173636dbf69a518735e\",\"dweb:/ipfs/QmQwCB2BHnEuYR22PYt9HkpbgeFDhq4rHmaYqAZbX3WRC7\"]}},\"version\":1}",
+ "bytecode": "0x60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208717730ae315497a210914df5c10886bb53100467a0b92dc996e4bebb21c323b64736f6c63430008060033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208717730ae315497a210914df5c10886bb53100467a0b92dc996e4bebb21c323b64736f6c63430008060033",
+ "immutableReferences": {},
+ "generatedSources": [],
+ "deployedGeneratedSources": [],
+ "sourceMap": "93:1885:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "deployedSourceMap": "93:1885:9:-:0;;;;;;;;",
+ "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _HEX_SYMBOLS = \"0123456789abcdef\";\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n while (value != 0) {\n digits -= 1;\n buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\n value /= 10;\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n if (value == 0) {\n return \"0x00\";\n }\n uint256 temp = value;\n uint256 length = 0;\n while (temp != 0) {\n length++;\n temp >>= 8;\n }\n return toHexString(value, length);\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _HEX_SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n}\n",
+ "sourcePath": "@openzeppelin/contracts/utils/Strings.sol",
+ "ast": {
+ "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
+ "exportedSymbols": {
+ "Strings": [
+ 1804
+ ]
+ },
+ "id": 1805,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1603,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:9"
+ },
+ {
+ "abstract": false,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "library",
+ "documentation": {
+ "id": 1604,
+ "nodeType": "StructuredDocumentation",
+ "src": "58:34:9",
+ "text": " @dev String operations."
+ },
+ "fullyImplemented": true,
+ "id": 1804,
+ "linearizedBaseContracts": [
+ 1804
+ ],
+ "name": "Strings",
+ "nameLocation": "101:7:9",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "constant": true,
+ "id": 1607,
+ "mutability": "constant",
+ "name": "_HEX_SYMBOLS",
+ "nameLocation": "140:12:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1804,
+ "src": "115:58:9",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes16",
+ "typeString": "bytes16"
+ },
+ "typeName": {
+ "id": 1605,
+ "name": "bytes16",
+ "nodeType": "ElementaryTypeName",
+ "src": "115:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes16",
+ "typeString": "bytes16"
+ }
+ },
+ "value": {
+ "hexValue": "30313233343536373839616263646566",
+ "id": 1606,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "155:18:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f",
+ "typeString": "literal_string \"0123456789abcdef\""
+ },
+ "value": "0123456789abcdef"
+ },
+ "visibility": "private"
+ },
+ {
+ "body": {
+ "id": 1685,
+ "nodeType": "Block",
+ "src": "346:632:9",
+ "statements": [
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1617,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1615,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1610,
+ "src": "548:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1616,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "557:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "548:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1621,
+ "nodeType": "IfStatement",
+ "src": "544:51:9",
+ "trueBody": {
+ "id": 1620,
+ "nodeType": "Block",
+ "src": "560:35:9",
+ "statements": [
+ {
+ "expression": {
+ "hexValue": "30",
+ "id": 1618,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "581:3:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d",
+ "typeString": "literal_string \"0\""
+ },
+ "value": "0"
+ },
+ "functionReturnParameters": 1614,
+ "id": 1619,
+ "nodeType": "Return",
+ "src": "574:10:9"
+ }
+ ]
+ }
+ },
+ {
+ "assignments": [
+ 1623
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1623,
+ "mutability": "mutable",
+ "name": "temp",
+ "nameLocation": "612:4:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1685,
+ "src": "604:12:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1622,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "604:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1625,
+ "initialValue": {
+ "id": 1624,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1610,
+ "src": "619:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "604:20:9"
+ },
+ {
+ "assignments": [
+ 1627
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1627,
+ "mutability": "mutable",
+ "name": "digits",
+ "nameLocation": "642:6:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1685,
+ "src": "634:14:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1626,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "634:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1628,
+ "nodeType": "VariableDeclarationStatement",
+ "src": "634:14:9"
+ },
+ {
+ "body": {
+ "id": 1639,
+ "nodeType": "Block",
+ "src": "676:57:9",
+ "statements": [
+ {
+ "expression": {
+ "id": 1633,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "++",
+ "prefix": false,
+ "src": "690:8:9",
+ "subExpression": {
+ "id": 1632,
+ "name": "digits",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1627,
+ "src": "690:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1634,
+ "nodeType": "ExpressionStatement",
+ "src": "690:8:9"
+ },
+ {
+ "expression": {
+ "id": 1637,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 1635,
+ "name": "temp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1623,
+ "src": "712:4:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "/=",
+ "rightHandSide": {
+ "hexValue": "3130",
+ "id": 1636,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "720:2:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_10_by_1",
+ "typeString": "int_const 10"
+ },
+ "value": "10"
+ },
+ "src": "712:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1638,
+ "nodeType": "ExpressionStatement",
+ "src": "712:10:9"
+ }
+ ]
+ },
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1631,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1629,
+ "name": "temp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1623,
+ "src": "665:4:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1630,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "673:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "665:9:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1640,
+ "nodeType": "WhileStatement",
+ "src": "658:75:9"
+ },
+ {
+ "assignments": [
+ 1642
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1642,
+ "mutability": "mutable",
+ "name": "buffer",
+ "nameLocation": "755:6:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1685,
+ "src": "742:19:9",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1641,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "742:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1647,
+ "initialValue": {
+ "arguments": [
+ {
+ "id": 1645,
+ "name": "digits",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1627,
+ "src": "774:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1644,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "NewExpression",
+ "src": "764:9:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (uint256) pure returns (bytes memory)"
+ },
+ "typeName": {
+ "id": 1643,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "768:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ }
+ },
+ "id": 1646,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "764:17:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "742:39:9"
+ },
+ {
+ "body": {
+ "id": 1678,
+ "nodeType": "Block",
+ "src": "810:131:9",
+ "statements": [
+ {
+ "expression": {
+ "id": 1653,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 1651,
+ "name": "digits",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1627,
+ "src": "824:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "-=",
+ "rightHandSide": {
+ "hexValue": "31",
+ "id": 1652,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "834:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "824:11:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1654,
+ "nodeType": "ExpressionStatement",
+ "src": "824:11:9"
+ },
+ {
+ "expression": {
+ "id": 1672,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 1655,
+ "name": "buffer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1642,
+ "src": "849:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 1657,
+ "indexExpression": {
+ "id": 1656,
+ "name": "digits",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1627,
+ "src": "856:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "849:14:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1669,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "hexValue": "3438",
+ "id": 1662,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "879:2:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_48_by_1",
+ "typeString": "int_const 48"
+ },
+ "value": "48"
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "+",
+ "rightExpression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1667,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1665,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1610,
+ "src": "892:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "%",
+ "rightExpression": {
+ "hexValue": "3130",
+ "id": 1666,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "900:2:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_10_by_1",
+ "typeString": "int_const 10"
+ },
+ "value": "10"
+ },
+ "src": "892:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1664,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "884:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_uint256_$",
+ "typeString": "type(uint256)"
+ },
+ "typeName": {
+ "id": 1663,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "884:7:9",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1668,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "884:19:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "879:24:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1661,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "873:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_uint8_$",
+ "typeString": "type(uint8)"
+ },
+ "typeName": {
+ "id": 1660,
+ "name": "uint8",
+ "nodeType": "ElementaryTypeName",
+ "src": "873:5:9",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1670,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "873:31:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ ],
+ "id": 1659,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "866:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes1_$",
+ "typeString": "type(bytes1)"
+ },
+ "typeName": {
+ "id": 1658,
+ "name": "bytes1",
+ "nodeType": "ElementaryTypeName",
+ "src": "866:6:9",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1671,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "866:39:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "src": "849:56:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "id": 1673,
+ "nodeType": "ExpressionStatement",
+ "src": "849:56:9"
+ },
+ {
+ "expression": {
+ "id": 1676,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 1674,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1610,
+ "src": "919:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "/=",
+ "rightHandSide": {
+ "hexValue": "3130",
+ "id": 1675,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "928:2:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_10_by_1",
+ "typeString": "int_const 10"
+ },
+ "value": "10"
+ },
+ "src": "919:11:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1677,
+ "nodeType": "ExpressionStatement",
+ "src": "919:11:9"
+ }
+ ]
+ },
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1650,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1648,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1610,
+ "src": "798:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1649,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "807:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "798:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1679,
+ "nodeType": "WhileStatement",
+ "src": "791:150:9"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1682,
+ "name": "buffer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1642,
+ "src": "964:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 1681,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "957:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_string_storage_ptr_$",
+ "typeString": "type(string storage pointer)"
+ },
+ "typeName": {
+ "id": 1680,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "957:6:9",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1683,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "957:14:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 1614,
+ "id": 1684,
+ "nodeType": "Return",
+ "src": "950:21:9"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1608,
+ "nodeType": "StructuredDocumentation",
+ "src": "180:90:9",
+ "text": " @dev Converts a `uint256` to its ASCII `string` decimal representation."
+ },
+ "id": 1686,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "toString",
+ "nameLocation": "284:8:9",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1611,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1610,
+ "mutability": "mutable",
+ "name": "value",
+ "nameLocation": "301:5:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1686,
+ "src": "293:13:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1609,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "293:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "292:15:9"
+ },
+ "returnParameters": {
+ "id": 1614,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1613,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1686,
+ "src": "331:13:9",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1612,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "331:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "330:15:9"
+ },
+ "scope": 1804,
+ "src": "275:703:9",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1726,
+ "nodeType": "Block",
+ "src": "1157:255:9",
+ "statements": [
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1696,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1694,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1689,
+ "src": "1171:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1695,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1180:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1171:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1700,
+ "nodeType": "IfStatement",
+ "src": "1167:54:9",
+ "trueBody": {
+ "id": 1699,
+ "nodeType": "Block",
+ "src": "1183:38:9",
+ "statements": [
+ {
+ "expression": {
+ "hexValue": "30783030",
+ "id": 1697,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1204:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_27489e20a0060b723a1748bdff5e44570ee9fae64141728105692eac6031e8a4",
+ "typeString": "literal_string \"0x00\""
+ },
+ "value": "0x00"
+ },
+ "functionReturnParameters": 1693,
+ "id": 1698,
+ "nodeType": "Return",
+ "src": "1197:13:9"
+ }
+ ]
+ }
+ },
+ {
+ "assignments": [
+ 1702
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1702,
+ "mutability": "mutable",
+ "name": "temp",
+ "nameLocation": "1238:4:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1726,
+ "src": "1230:12:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1701,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1230:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1704,
+ "initialValue": {
+ "id": 1703,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1689,
+ "src": "1245:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1230:20:9"
+ },
+ {
+ "assignments": [
+ 1706
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1706,
+ "mutability": "mutable",
+ "name": "length",
+ "nameLocation": "1268:6:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1726,
+ "src": "1260:14:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1705,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1260:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1708,
+ "initialValue": {
+ "hexValue": "30",
+ "id": 1707,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1277:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1260:18:9"
+ },
+ {
+ "body": {
+ "id": 1719,
+ "nodeType": "Block",
+ "src": "1306:57:9",
+ "statements": [
+ {
+ "expression": {
+ "id": 1713,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "++",
+ "prefix": false,
+ "src": "1320:8:9",
+ "subExpression": {
+ "id": 1712,
+ "name": "length",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1706,
+ "src": "1320:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1714,
+ "nodeType": "ExpressionStatement",
+ "src": "1320:8:9"
+ },
+ {
+ "expression": {
+ "id": 1717,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 1715,
+ "name": "temp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1702,
+ "src": "1342:4:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": ">>=",
+ "rightHandSide": {
+ "hexValue": "38",
+ "id": 1716,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1351:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_8_by_1",
+ "typeString": "int_const 8"
+ },
+ "value": "8"
+ },
+ "src": "1342:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1718,
+ "nodeType": "ExpressionStatement",
+ "src": "1342:10:9"
+ }
+ ]
+ },
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1711,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1709,
+ "name": "temp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1702,
+ "src": "1295:4:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1710,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1303:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1295:9:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1720,
+ "nodeType": "WhileStatement",
+ "src": "1288:75:9"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1722,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1689,
+ "src": "1391:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "id": 1723,
+ "name": "length",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1706,
+ "src": "1398:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1721,
+ "name": "toHexString",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 1727,
+ 1803
+ ],
+ "referencedDeclaration": 1803,
+ "src": "1379:11:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (string memory)"
+ }
+ },
+ "id": 1724,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1379:26:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 1693,
+ "id": 1725,
+ "nodeType": "Return",
+ "src": "1372:33:9"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1687,
+ "nodeType": "StructuredDocumentation",
+ "src": "984:94:9",
+ "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation."
+ },
+ "id": 1727,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "toHexString",
+ "nameLocation": "1092:11:9",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1690,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1689,
+ "mutability": "mutable",
+ "name": "value",
+ "nameLocation": "1112:5:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1727,
+ "src": "1104:13:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1688,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1104:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1103:15:9"
+ },
+ "returnParameters": {
+ "id": 1693,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1692,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1727,
+ "src": "1142:13:9",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1691,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "1142:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1141:15:9"
+ },
+ "scope": 1804,
+ "src": "1083:329:9",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1802,
+ "nodeType": "Block",
+ "src": "1625:351:9",
+ "statements": [
+ {
+ "assignments": [
+ 1738
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1738,
+ "mutability": "mutable",
+ "name": "buffer",
+ "nameLocation": "1648:6:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1802,
+ "src": "1635:19:9",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1737,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "1635:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1747,
+ "initialValue": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1745,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1743,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "hexValue": "32",
+ "id": 1741,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1667:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_2_by_1",
+ "typeString": "int_const 2"
+ },
+ "value": "2"
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "*",
+ "rightExpression": {
+ "id": 1742,
+ "name": "length",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1732,
+ "src": "1671:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "1667:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "+",
+ "rightExpression": {
+ "hexValue": "32",
+ "id": 1744,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1680:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_2_by_1",
+ "typeString": "int_const 2"
+ },
+ "value": "2"
+ },
+ "src": "1667:14:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1740,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "NewExpression",
+ "src": "1657:9:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (uint256) pure returns (bytes memory)"
+ },
+ "typeName": {
+ "id": 1739,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "1661:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ }
+ },
+ "id": 1746,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1657:25:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1635:47:9"
+ },
+ {
+ "expression": {
+ "id": 1752,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 1748,
+ "name": "buffer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1738,
+ "src": "1692:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 1750,
+ "indexExpression": {
+ "hexValue": "30",
+ "id": 1749,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1699:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "1692:9:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "hexValue": "30",
+ "id": 1751,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1704:3:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d",
+ "typeString": "literal_string \"0\""
+ },
+ "value": "0"
+ },
+ "src": "1692:15:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "id": 1753,
+ "nodeType": "ExpressionStatement",
+ "src": "1692:15:9"
+ },
+ {
+ "expression": {
+ "id": 1758,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 1754,
+ "name": "buffer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1738,
+ "src": "1717:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 1756,
+ "indexExpression": {
+ "hexValue": "31",
+ "id": 1755,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1724:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "1717:9:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "hexValue": "78",
+ "id": 1757,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1729:3:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83",
+ "typeString": "literal_string \"x\""
+ },
+ "value": "x"
+ },
+ "src": "1717:15:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "id": 1759,
+ "nodeType": "ExpressionStatement",
+ "src": "1717:15:9"
+ },
+ {
+ "body": {
+ "id": 1788,
+ "nodeType": "Block",
+ "src": "1787:87:9",
+ "statements": [
+ {
+ "expression": {
+ "id": 1782,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 1774,
+ "name": "buffer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1738,
+ "src": "1801:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 1776,
+ "indexExpression": {
+ "id": 1775,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1761,
+ "src": "1808:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "1801:9:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "baseExpression": {
+ "id": 1777,
+ "name": "_HEX_SYMBOLS",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1607,
+ "src": "1813:12:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes16",
+ "typeString": "bytes16"
+ }
+ },
+ "id": 1781,
+ "indexExpression": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1780,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1778,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1730,
+ "src": "1826:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&",
+ "rightExpression": {
+ "hexValue": "307866",
+ "id": 1779,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1834:3:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_15_by_1",
+ "typeString": "int_const 15"
+ },
+ "value": "0xf"
+ },
+ "src": "1826:11:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "1813:25:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "src": "1801:37:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "id": 1783,
+ "nodeType": "ExpressionStatement",
+ "src": "1801:37:9"
+ },
+ {
+ "expression": {
+ "id": 1786,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 1784,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1730,
+ "src": "1852:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": ">>=",
+ "rightHandSide": {
+ "hexValue": "34",
+ "id": 1785,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1862:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_4_by_1",
+ "typeString": "int_const 4"
+ },
+ "value": "4"
+ },
+ "src": "1852:11:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1787,
+ "nodeType": "ExpressionStatement",
+ "src": "1852:11:9"
+ }
+ ]
+ },
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1770,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1768,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1761,
+ "src": "1775:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "hexValue": "31",
+ "id": 1769,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1779:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "1775:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1789,
+ "initializationExpression": {
+ "assignments": [
+ 1761
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1761,
+ "mutability": "mutable",
+ "name": "i",
+ "nameLocation": "1755:1:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1789,
+ "src": "1747:9:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1760,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1747:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1767,
+ "initialValue": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1766,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1764,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "hexValue": "32",
+ "id": 1762,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1759:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_2_by_1",
+ "typeString": "int_const 2"
+ },
+ "value": "2"
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "*",
+ "rightExpression": {
+ "id": 1763,
+ "name": "length",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1732,
+ "src": "1763:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "1759:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "+",
+ "rightExpression": {
+ "hexValue": "31",
+ "id": 1765,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1772:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "1759:14:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1747:26:9"
+ },
+ "loopExpression": {
+ "expression": {
+ "id": 1772,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "--",
+ "prefix": true,
+ "src": "1782:3:9",
+ "subExpression": {
+ "id": 1771,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1761,
+ "src": "1784:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1773,
+ "nodeType": "ExpressionStatement",
+ "src": "1782:3:9"
+ },
+ "nodeType": "ForStatement",
+ "src": "1742:132:9"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1793,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1791,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1730,
+ "src": "1891:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1792,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1900:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1891:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "537472696e67733a20686578206c656e67746820696e73756666696369656e74",
+ "id": 1794,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1903:34:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2",
+ "typeString": "literal_string \"Strings: hex length insufficient\""
+ },
+ "value": "Strings: hex length insufficient"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2",
+ "typeString": "literal_string \"Strings: hex length insufficient\""
+ }
+ ],
+ "id": 1790,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "1883:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1795,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1883:55:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1796,
+ "nodeType": "ExpressionStatement",
+ "src": "1883:55:9"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1799,
+ "name": "buffer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1738,
+ "src": "1962:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 1798,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1955:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_string_storage_ptr_$",
+ "typeString": "type(string storage pointer)"
+ },
+ "typeName": {
+ "id": 1797,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "1955:6:9",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1800,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1955:14:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 1736,
+ "id": 1801,
+ "nodeType": "Return",
+ "src": "1948:21:9"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1728,
+ "nodeType": "StructuredDocumentation",
+ "src": "1418:112:9",
+ "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length."
+ },
+ "id": 1803,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "toHexString",
+ "nameLocation": "1544:11:9",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1733,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1730,
+ "mutability": "mutable",
+ "name": "value",
+ "nameLocation": "1564:5:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1803,
+ "src": "1556:13:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1729,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1556:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1732,
+ "mutability": "mutable",
+ "name": "length",
+ "nameLocation": "1579:6:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1803,
+ "src": "1571:14:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1731,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1571:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1555:31:9"
+ },
+ "returnParameters": {
+ "id": 1736,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1735,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1803,
+ "src": "1610:13:9",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1734,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "1610:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1609:15:9"
+ },
+ "scope": 1804,
+ "src": "1535:441:9",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 1805,
+ "src": "93:1885:9",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:1946:9"
+ },
+ "legacyAST": {
+ "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
+ "exportedSymbols": {
+ "Strings": [
+ 1804
+ ]
+ },
+ "id": 1805,
+ "license": "MIT",
+ "nodeType": "SourceUnit",
+ "nodes": [
+ {
+ "id": 1603,
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ],
+ "nodeType": "PragmaDirective",
+ "src": "33:23:9"
+ },
+ {
+ "abstract": false,
+ "baseContracts": [],
+ "contractDependencies": [],
+ "contractKind": "library",
+ "documentation": {
+ "id": 1604,
+ "nodeType": "StructuredDocumentation",
+ "src": "58:34:9",
+ "text": " @dev String operations."
+ },
+ "fullyImplemented": true,
+ "id": 1804,
+ "linearizedBaseContracts": [
+ 1804
+ ],
+ "name": "Strings",
+ "nameLocation": "101:7:9",
+ "nodeType": "ContractDefinition",
+ "nodes": [
+ {
+ "constant": true,
+ "id": 1607,
+ "mutability": "constant",
+ "name": "_HEX_SYMBOLS",
+ "nameLocation": "140:12:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1804,
+ "src": "115:58:9",
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes16",
+ "typeString": "bytes16"
+ },
+ "typeName": {
+ "id": 1605,
+ "name": "bytes16",
+ "nodeType": "ElementaryTypeName",
+ "src": "115:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes16",
+ "typeString": "bytes16"
+ }
+ },
+ "value": {
+ "hexValue": "30313233343536373839616263646566",
+ "id": 1606,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "155:18:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f",
+ "typeString": "literal_string \"0123456789abcdef\""
+ },
+ "value": "0123456789abcdef"
+ },
+ "visibility": "private"
+ },
+ {
+ "body": {
+ "id": 1685,
+ "nodeType": "Block",
+ "src": "346:632:9",
+ "statements": [
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1617,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1615,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1610,
+ "src": "548:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1616,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "557:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "548:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1621,
+ "nodeType": "IfStatement",
+ "src": "544:51:9",
+ "trueBody": {
+ "id": 1620,
+ "nodeType": "Block",
+ "src": "560:35:9",
+ "statements": [
+ {
+ "expression": {
+ "hexValue": "30",
+ "id": 1618,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "581:3:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d",
+ "typeString": "literal_string \"0\""
+ },
+ "value": "0"
+ },
+ "functionReturnParameters": 1614,
+ "id": 1619,
+ "nodeType": "Return",
+ "src": "574:10:9"
+ }
+ ]
+ }
+ },
+ {
+ "assignments": [
+ 1623
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1623,
+ "mutability": "mutable",
+ "name": "temp",
+ "nameLocation": "612:4:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1685,
+ "src": "604:12:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1622,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "604:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1625,
+ "initialValue": {
+ "id": 1624,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1610,
+ "src": "619:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "604:20:9"
+ },
+ {
+ "assignments": [
+ 1627
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1627,
+ "mutability": "mutable",
+ "name": "digits",
+ "nameLocation": "642:6:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1685,
+ "src": "634:14:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1626,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "634:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1628,
+ "nodeType": "VariableDeclarationStatement",
+ "src": "634:14:9"
+ },
+ {
+ "body": {
+ "id": 1639,
+ "nodeType": "Block",
+ "src": "676:57:9",
+ "statements": [
+ {
+ "expression": {
+ "id": 1633,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "++",
+ "prefix": false,
+ "src": "690:8:9",
+ "subExpression": {
+ "id": 1632,
+ "name": "digits",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1627,
+ "src": "690:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1634,
+ "nodeType": "ExpressionStatement",
+ "src": "690:8:9"
+ },
+ {
+ "expression": {
+ "id": 1637,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 1635,
+ "name": "temp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1623,
+ "src": "712:4:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "/=",
+ "rightHandSide": {
+ "hexValue": "3130",
+ "id": 1636,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "720:2:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_10_by_1",
+ "typeString": "int_const 10"
+ },
+ "value": "10"
+ },
+ "src": "712:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1638,
+ "nodeType": "ExpressionStatement",
+ "src": "712:10:9"
+ }
+ ]
+ },
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1631,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1629,
+ "name": "temp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1623,
+ "src": "665:4:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1630,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "673:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "665:9:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1640,
+ "nodeType": "WhileStatement",
+ "src": "658:75:9"
+ },
+ {
+ "assignments": [
+ 1642
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1642,
+ "mutability": "mutable",
+ "name": "buffer",
+ "nameLocation": "755:6:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1685,
+ "src": "742:19:9",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1641,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "742:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1647,
+ "initialValue": {
+ "arguments": [
+ {
+ "id": 1645,
+ "name": "digits",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1627,
+ "src": "774:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1644,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "NewExpression",
+ "src": "764:9:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (uint256) pure returns (bytes memory)"
+ },
+ "typeName": {
+ "id": 1643,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "768:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ }
+ },
+ "id": 1646,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "764:17:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "742:39:9"
+ },
+ {
+ "body": {
+ "id": 1678,
+ "nodeType": "Block",
+ "src": "810:131:9",
+ "statements": [
+ {
+ "expression": {
+ "id": 1653,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 1651,
+ "name": "digits",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1627,
+ "src": "824:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "-=",
+ "rightHandSide": {
+ "hexValue": "31",
+ "id": 1652,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "834:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "824:11:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1654,
+ "nodeType": "ExpressionStatement",
+ "src": "824:11:9"
+ },
+ {
+ "expression": {
+ "id": 1672,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 1655,
+ "name": "buffer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1642,
+ "src": "849:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 1657,
+ "indexExpression": {
+ "id": 1656,
+ "name": "digits",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1627,
+ "src": "856:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "849:14:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1669,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "hexValue": "3438",
+ "id": 1662,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "879:2:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_48_by_1",
+ "typeString": "int_const 48"
+ },
+ "value": "48"
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "+",
+ "rightExpression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1667,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1665,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1610,
+ "src": "892:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "%",
+ "rightExpression": {
+ "hexValue": "3130",
+ "id": 1666,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "900:2:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_10_by_1",
+ "typeString": "int_const 10"
+ },
+ "value": "10"
+ },
+ "src": "892:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1664,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "884:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_uint256_$",
+ "typeString": "type(uint256)"
+ },
+ "typeName": {
+ "id": 1663,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "884:7:9",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1668,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "884:19:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "879:24:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1661,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "873:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_uint8_$",
+ "typeString": "type(uint8)"
+ },
+ "typeName": {
+ "id": 1660,
+ "name": "uint8",
+ "nodeType": "ElementaryTypeName",
+ "src": "873:5:9",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1670,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "873:31:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint8",
+ "typeString": "uint8"
+ }
+ ],
+ "id": 1659,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "866:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes1_$",
+ "typeString": "type(bytes1)"
+ },
+ "typeName": {
+ "id": 1658,
+ "name": "bytes1",
+ "nodeType": "ElementaryTypeName",
+ "src": "866:6:9",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1671,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "866:39:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "src": "849:56:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "id": 1673,
+ "nodeType": "ExpressionStatement",
+ "src": "849:56:9"
+ },
+ {
+ "expression": {
+ "id": 1676,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 1674,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1610,
+ "src": "919:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "/=",
+ "rightHandSide": {
+ "hexValue": "3130",
+ "id": 1675,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "928:2:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_10_by_1",
+ "typeString": "int_const 10"
+ },
+ "value": "10"
+ },
+ "src": "919:11:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1677,
+ "nodeType": "ExpressionStatement",
+ "src": "919:11:9"
+ }
+ ]
+ },
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1650,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1648,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1610,
+ "src": "798:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1649,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "807:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "798:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1679,
+ "nodeType": "WhileStatement",
+ "src": "791:150:9"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1682,
+ "name": "buffer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1642,
+ "src": "964:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 1681,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "957:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_string_storage_ptr_$",
+ "typeString": "type(string storage pointer)"
+ },
+ "typeName": {
+ "id": 1680,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "957:6:9",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1683,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "957:14:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 1614,
+ "id": 1684,
+ "nodeType": "Return",
+ "src": "950:21:9"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1608,
+ "nodeType": "StructuredDocumentation",
+ "src": "180:90:9",
+ "text": " @dev Converts a `uint256` to its ASCII `string` decimal representation."
+ },
+ "id": 1686,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "toString",
+ "nameLocation": "284:8:9",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1611,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1610,
+ "mutability": "mutable",
+ "name": "value",
+ "nameLocation": "301:5:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1686,
+ "src": "293:13:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1609,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "293:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "292:15:9"
+ },
+ "returnParameters": {
+ "id": 1614,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1613,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1686,
+ "src": "331:13:9",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1612,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "331:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "330:15:9"
+ },
+ "scope": 1804,
+ "src": "275:703:9",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1726,
+ "nodeType": "Block",
+ "src": "1157:255:9",
+ "statements": [
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1696,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1694,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1689,
+ "src": "1171:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1695,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1180:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1171:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1700,
+ "nodeType": "IfStatement",
+ "src": "1167:54:9",
+ "trueBody": {
+ "id": 1699,
+ "nodeType": "Block",
+ "src": "1183:38:9",
+ "statements": [
+ {
+ "expression": {
+ "hexValue": "30783030",
+ "id": 1697,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1204:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_27489e20a0060b723a1748bdff5e44570ee9fae64141728105692eac6031e8a4",
+ "typeString": "literal_string \"0x00\""
+ },
+ "value": "0x00"
+ },
+ "functionReturnParameters": 1693,
+ "id": 1698,
+ "nodeType": "Return",
+ "src": "1197:13:9"
+ }
+ ]
+ }
+ },
+ {
+ "assignments": [
+ 1702
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1702,
+ "mutability": "mutable",
+ "name": "temp",
+ "nameLocation": "1238:4:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1726,
+ "src": "1230:12:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1701,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1230:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1704,
+ "initialValue": {
+ "id": 1703,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1689,
+ "src": "1245:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1230:20:9"
+ },
+ {
+ "assignments": [
+ 1706
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1706,
+ "mutability": "mutable",
+ "name": "length",
+ "nameLocation": "1268:6:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1726,
+ "src": "1260:14:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1705,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1260:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1708,
+ "initialValue": {
+ "hexValue": "30",
+ "id": 1707,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1277:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1260:18:9"
+ },
+ {
+ "body": {
+ "id": 1719,
+ "nodeType": "Block",
+ "src": "1306:57:9",
+ "statements": [
+ {
+ "expression": {
+ "id": 1713,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "++",
+ "prefix": false,
+ "src": "1320:8:9",
+ "subExpression": {
+ "id": 1712,
+ "name": "length",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1706,
+ "src": "1320:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1714,
+ "nodeType": "ExpressionStatement",
+ "src": "1320:8:9"
+ },
+ {
+ "expression": {
+ "id": 1717,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 1715,
+ "name": "temp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1702,
+ "src": "1342:4:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": ">>=",
+ "rightHandSide": {
+ "hexValue": "38",
+ "id": 1716,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1351:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_8_by_1",
+ "typeString": "int_const 8"
+ },
+ "value": "8"
+ },
+ "src": "1342:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1718,
+ "nodeType": "ExpressionStatement",
+ "src": "1342:10:9"
+ }
+ ]
+ },
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1711,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1709,
+ "name": "temp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1702,
+ "src": "1295:4:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1710,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1303:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1295:9:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1720,
+ "nodeType": "WhileStatement",
+ "src": "1288:75:9"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1722,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1689,
+ "src": "1391:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "id": 1723,
+ "name": "length",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1706,
+ "src": "1398:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1721,
+ "name": "toHexString",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 1727,
+ 1803
+ ],
+ "referencedDeclaration": 1803,
+ "src": "1379:11:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
+ "typeString": "function (uint256,uint256) pure returns (string memory)"
+ }
+ },
+ "id": 1724,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1379:26:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 1693,
+ "id": 1725,
+ "nodeType": "Return",
+ "src": "1372:33:9"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1687,
+ "nodeType": "StructuredDocumentation",
+ "src": "984:94:9",
+ "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation."
+ },
+ "id": 1727,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "toHexString",
+ "nameLocation": "1092:11:9",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1690,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1689,
+ "mutability": "mutable",
+ "name": "value",
+ "nameLocation": "1112:5:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1727,
+ "src": "1104:13:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1688,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1104:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1103:15:9"
+ },
+ "returnParameters": {
+ "id": 1693,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1692,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1727,
+ "src": "1142:13:9",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1691,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "1142:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1141:15:9"
+ },
+ "scope": 1804,
+ "src": "1083:329:9",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "body": {
+ "id": 1802,
+ "nodeType": "Block",
+ "src": "1625:351:9",
+ "statements": [
+ {
+ "assignments": [
+ 1738
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1738,
+ "mutability": "mutable",
+ "name": "buffer",
+ "nameLocation": "1648:6:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1802,
+ "src": "1635:19:9",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 1737,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "1635:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1747,
+ "initialValue": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1745,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1743,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "hexValue": "32",
+ "id": 1741,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1667:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_2_by_1",
+ "typeString": "int_const 2"
+ },
+ "value": "2"
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "*",
+ "rightExpression": {
+ "id": 1742,
+ "name": "length",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1732,
+ "src": "1671:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "1667:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "+",
+ "rightExpression": {
+ "hexValue": "32",
+ "id": 1744,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1680:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_2_by_1",
+ "typeString": "int_const 2"
+ },
+ "value": "2"
+ },
+ "src": "1667:14:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 1740,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "NewExpression",
+ "src": "1657:9:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function (uint256) pure returns (bytes memory)"
+ },
+ "typeName": {
+ "id": 1739,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "1661:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ }
+ },
+ "id": 1746,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1657:25:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1635:47:9"
+ },
+ {
+ "expression": {
+ "id": 1752,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 1748,
+ "name": "buffer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1738,
+ "src": "1692:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 1750,
+ "indexExpression": {
+ "hexValue": "30",
+ "id": 1749,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1699:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "1692:9:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "hexValue": "30",
+ "id": 1751,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1704:3:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d",
+ "typeString": "literal_string \"0\""
+ },
+ "value": "0"
+ },
+ "src": "1692:15:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "id": 1753,
+ "nodeType": "ExpressionStatement",
+ "src": "1692:15:9"
+ },
+ {
+ "expression": {
+ "id": 1758,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 1754,
+ "name": "buffer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1738,
+ "src": "1717:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 1756,
+ "indexExpression": {
+ "hexValue": "31",
+ "id": 1755,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1724:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "1717:9:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "hexValue": "78",
+ "id": 1757,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1729:3:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83",
+ "typeString": "literal_string \"x\""
+ },
+ "value": "x"
+ },
+ "src": "1717:15:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "id": 1759,
+ "nodeType": "ExpressionStatement",
+ "src": "1717:15:9"
+ },
+ {
+ "body": {
+ "id": 1788,
+ "nodeType": "Block",
+ "src": "1787:87:9",
+ "statements": [
+ {
+ "expression": {
+ "id": 1782,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "id": 1774,
+ "name": "buffer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1738,
+ "src": "1801:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 1776,
+ "indexExpression": {
+ "id": 1775,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1761,
+ "src": "1808:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "1801:9:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "baseExpression": {
+ "id": 1777,
+ "name": "_HEX_SYMBOLS",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1607,
+ "src": "1813:12:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes16",
+ "typeString": "bytes16"
+ }
+ },
+ "id": 1781,
+ "indexExpression": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1780,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1778,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1730,
+ "src": "1826:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "&",
+ "rightExpression": {
+ "hexValue": "307866",
+ "id": 1779,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1834:3:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_15_by_1",
+ "typeString": "int_const 15"
+ },
+ "value": "0xf"
+ },
+ "src": "1826:11:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "1813:25:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "src": "1801:37:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes1",
+ "typeString": "bytes1"
+ }
+ },
+ "id": 1783,
+ "nodeType": "ExpressionStatement",
+ "src": "1801:37:9"
+ },
+ {
+ "expression": {
+ "id": 1786,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 1784,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1730,
+ "src": "1852:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": ">>=",
+ "rightHandSide": {
+ "hexValue": "34",
+ "id": 1785,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1862:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_4_by_1",
+ "typeString": "int_const 4"
+ },
+ "value": "4"
+ },
+ "src": "1852:11:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1787,
+ "nodeType": "ExpressionStatement",
+ "src": "1852:11:9"
+ }
+ ]
+ },
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1770,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1768,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1761,
+ "src": "1775:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "hexValue": "31",
+ "id": 1769,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1779:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "1775:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 1789,
+ "initializationExpression": {
+ "assignments": [
+ 1761
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 1761,
+ "mutability": "mutable",
+ "name": "i",
+ "nameLocation": "1755:1:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1789,
+ "src": "1747:9:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1760,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1747:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 1767,
+ "initialValue": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1766,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1764,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "hexValue": "32",
+ "id": 1762,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1759:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_2_by_1",
+ "typeString": "int_const 2"
+ },
+ "value": "2"
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "*",
+ "rightExpression": {
+ "id": 1763,
+ "name": "length",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1732,
+ "src": "1763:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "src": "1759:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "+",
+ "rightExpression": {
+ "hexValue": "31",
+ "id": 1765,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1772:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "src": "1759:14:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1747:26:9"
+ },
+ "loopExpression": {
+ "expression": {
+ "id": 1772,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "--",
+ "prefix": true,
+ "src": "1782:3:9",
+ "subExpression": {
+ "id": 1771,
+ "name": "i",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1761,
+ "src": "1784:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "id": 1773,
+ "nodeType": "ExpressionStatement",
+ "src": "1782:3:9"
+ },
+ "nodeType": "ForStatement",
+ "src": "1742:132:9"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 1793,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 1791,
+ "name": "value",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1730,
+ "src": "1891:5:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 1792,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1900:1:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1891:10:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ {
+ "hexValue": "537472696e67733a20686578206c656e67746820696e73756666696369656e74",
+ "id": 1794,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "string",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1903:34:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2",
+ "typeString": "literal_string \"Strings: hex length insufficient\""
+ },
+ "value": "Strings: hex length insufficient"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2",
+ "typeString": "literal_string \"Strings: hex length insufficient\""
+ }
+ ],
+ "id": 1790,
+ "name": "require",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [
+ 4294967278,
+ 4294967278
+ ],
+ "referencedDeclaration": 4294967278,
+ "src": "1883:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
+ "typeString": "function (bool,string memory) pure"
+ }
+ },
+ "id": 1795,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1883:55:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 1796,
+ "nodeType": "ExpressionStatement",
+ "src": "1883:55:9"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 1799,
+ "name": "buffer",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 1738,
+ "src": "1962:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 1798,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1955:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_string_storage_ptr_$",
+ "typeString": "type(string storage pointer)"
+ },
+ "typeName": {
+ "id": 1797,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "1955:6:9",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 1800,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1955:14:9",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string memory"
+ }
+ },
+ "functionReturnParameters": 1736,
+ "id": 1801,
+ "nodeType": "Return",
+ "src": "1948:21:9"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 1728,
+ "nodeType": "StructuredDocumentation",
+ "src": "1418:112:9",
+ "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length."
+ },
+ "id": 1803,
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "toHexString",
+ "nameLocation": "1544:11:9",
+ "nodeType": "FunctionDefinition",
+ "parameters": {
+ "id": 1733,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1730,
+ "mutability": "mutable",
+ "name": "value",
+ "nameLocation": "1564:5:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1803,
+ "src": "1556:13:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1729,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1556:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 1732,
+ "mutability": "mutable",
+ "name": "length",
+ "nameLocation": "1579:6:9",
+ "nodeType": "VariableDeclaration",
+ "scope": 1803,
+ "src": "1571:14:9",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 1731,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1571:7:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1555:31:9"
+ },
+ "returnParameters": {
+ "id": 1736,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 1735,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 1803,
+ "src": "1610:13:9",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_memory_ptr",
+ "typeString": "string"
+ },
+ "typeName": {
+ "id": 1734,
+ "name": "string",
+ "nodeType": "ElementaryTypeName",
+ "src": "1610:6:9",
+ "typeDescriptions": {
+ "typeIdentifier": "t_string_storage_ptr",
+ "typeString": "string"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1609:15:9"
+ },
+ "scope": 1804,
+ "src": "1535:441:9",
+ "stateMutability": "pure",
+ "virtual": false,
+ "visibility": "internal"
+ }
+ ],
+ "scope": 1805,
+ "src": "93:1885:9",
+ "usedErrors": []
+ }
+ ],
+ "src": "33:1946:9"
+ },
+ "compiler": {
+ "name": "solc",
+ "version": "0.8.6+commit.11564f7e.Emscripten.clang"
+ },
+ "networks": {},
+ "schemaVersion": "3.4.3",
+ "updatedAt": "2021-09-07T13:34:26.830Z",
+ "devdoc": {
+ "details": "String operations.",
+ "kind": "dev",
+ "methods": {},
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {},
+ "version": 1
+ }
+}
\ No newline at end of file
diff --git a/contracts/Migrations.sol b/contracts/Migrations.sol
new file mode 100644
index 0000000..9aac975
--- /dev/null
+++ b/contracts/Migrations.sol
@@ -0,0 +1,19 @@
+// SPDX-License-Identifier: MIT
+pragma solidity >=0.4.22 <0.9.0;
+
+contract Migrations {
+ address public owner = msg.sender;
+ uint public last_completed_migration;
+
+ modifier restricted() {
+ require(
+ msg.sender == owner,
+ "This function is restricted to the contract's owner"
+ );
+ _;
+ }
+
+ function setCompleted(uint completed) public restricted {
+ last_completed_migration = completed;
+ }
+}
diff --git a/contracts/PanacloudApi.sol b/contracts/PanacloudApi.sol
new file mode 100644
index 0000000..76e0442
--- /dev/null
+++ b/contracts/PanacloudApi.sol
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.6;
+
+import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
+import "@openzeppelin/contracts/utils/Counters.sol";
+import "@openzeppelin/contracts/access/Ownable.sol";
+
+contract PanacloudApi is ERC721URIStorage, Ownable {
+ using Counters for Counters.Counter;
+ Counters.Counter private _tokenIds;
+
+ constructor() ERC721("PanaApi", "PNA") {}
+
+ function createPanacloudApi(address player, string memory tokenURI) public onlyOwner returns (uint256) {
+ _tokenIds.increment();
+ uint256 newItemId = _tokenIds.current();
+ _mint(player, newItemId);
+ _setTokenURI(newItemId, tokenURI);
+ return newItemId;
+ }
+}
\ No newline at end of file
diff --git a/migrations/1_initial_migration.js b/migrations/1_initial_migration.js
new file mode 100644
index 0000000..16a7ba5
--- /dev/null
+++ b/migrations/1_initial_migration.js
@@ -0,0 +1,5 @@
+const Migrations = artifacts.require("Migrations");
+
+module.exports = function (deployer) {
+ deployer.deploy(Migrations);
+};
diff --git a/migrations/2_PanacloudApi.js b/migrations/2_PanacloudApi.js
new file mode 100644
index 0000000..582a68f
--- /dev/null
+++ b/migrations/2_PanacloudApi.js
@@ -0,0 +1,5 @@
+var PanacloudApi = artifacts.require("PanacloudApi");
+
+module.exports = function(deployer) {
+ deployer.deploy(PanacloudApi);
+};
\ No newline at end of file
diff --git a/node_modules/.yarn-integrity b/node_modules/.yarn-integrity
new file mode 100644
index 0000000..9ed0698
--- /dev/null
+++ b/node_modules/.yarn-integrity
@@ -0,0 +1,16 @@
+{
+ "systemParams": "linux-x64-83",
+ "modulesFolders": [
+ "node_modules"
+ ],
+ "flags": [],
+ "linkedModules": [],
+ "topLevelPatterns": [
+ "@openzeppelin/contracts@^4.3.1"
+ ],
+ "lockfileEntries": {
+ "@openzeppelin/contracts@^4.3.1": "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.3.1.tgz#c01f791ce6c9d3989ac1a643267501dbe336b9e3"
+ },
+ "files": [],
+ "artifacts": {}
+}
\ No newline at end of file
diff --git a/node_modules/@openzeppelin/contracts/README.md b/node_modules/@openzeppelin/contracts/README.md
new file mode 100644
index 0000000..c191278
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/README.md
@@ -0,0 +1,79 @@
+#
+
+[](https://docs.openzeppelin.com/contracts)
+[](https://www.npmjs.org/package/@openzeppelin/contracts)
+[](https://codecov.io/gh/OpenZeppelin/openzeppelin-contracts)
+
+**A library for secure smart contract development.** Build on a solid foundation of community-vetted code.
+
+ * Implementations of standards like [ERC20](https://docs.openzeppelin.com/contracts/erc20) and [ERC721](https://docs.openzeppelin.com/contracts/erc721).
+ * Flexible [role-based permissioning](https://docs.openzeppelin.com/contracts/access-control) scheme.
+ * Reusable [Solidity components](https://docs.openzeppelin.com/contracts/utilities) to build custom contracts and complex decentralized systems.
+
+:mage: **Not sure how to get started?** Check out [Contracts Wizard](https://wizard.openzeppelin.com/) — an interactive smart contract generator.
+
+## Overview
+
+### Installation
+
+```console
+$ npm install @openzeppelin/contracts
+```
+
+OpenZeppelin Contracts features a [stable API](https://docs.openzeppelin.com/contracts/releases-stability#api-stability), which means your contracts won't break unexpectedly when upgrading to a newer minor version.
+
+### Usage
+
+Once installed, you can use the contracts in the library by importing them:
+
+```solidity
+pragma solidity ^0.8.0;
+
+import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
+
+contract MyCollectible is ERC721 {
+ constructor() ERC721("MyCollectible", "MCO") {
+ }
+}
+```
+
+_If you're new to smart contract development, head to [Developing Smart Contracts](https://docs.openzeppelin.com/learn/developing-smart-contracts) to learn about creating a new project and compiling your contracts._
+
+To keep your system secure, you should **always** use the installed code as-is, and neither copy-paste it from online sources, nor modify it yourself. The library is designed so that only the contracts and functions you use are deployed, so you don't need to worry about it needlessly increasing gas costs.
+
+## Learn More
+
+The guides in the [docs site](https://docs.openzeppelin.com/contracts) will teach about different concepts, and how to use the related contracts that OpenZeppelin Contracts provides:
+
+* [Access Control](https://docs.openzeppelin.com/contracts/access-control): decide who can perform each of the actions on your system.
+* [Tokens](https://docs.openzeppelin.com/contracts/tokens): create tradeable assets or collectives, and distribute them via [Crowdsales](https://docs.openzeppelin.com/contracts/crowdsales).
+* [Gas Station Network](https://docs.openzeppelin.com/contracts/gsn): let your users interact with your contracts without having to pay for gas themselves.
+* [Utilities](https://docs.openzeppelin.com/contracts/utilities): generic useful tools, including non-overflowing math, signature verification, and trustless paying systems.
+
+The [full API](https://docs.openzeppelin.com/contracts/api/token/ERC20) is also thoroughly documented, and serves as a great reference when developing your smart contract application. You can also ask for help or follow Contracts's development in the [community forum](https://forum.openzeppelin.com).
+
+Finally, you may want to take a look at the [guides on our blog](https://blog.openzeppelin.com/guides), which cover several common use cases and good practices.. The following articles provide great background reading, though please note, some of the referenced tools have changed as the tooling in the ecosystem continues to rapidly evolve.
+
+* [The Hitchhiker’s Guide to Smart Contracts in Ethereum](https://blog.openzeppelin.com/the-hitchhikers-guide-to-smart-contracts-in-ethereum-848f08001f05) will help you get an overview of the various tools available for smart contract development, and help you set up your environment.
+* [A Gentle Introduction to Ethereum Programming, Part 1](https://blog.openzeppelin.com/a-gentle-introduction-to-ethereum-programming-part-1-783cc7796094) provides very useful information on an introductory level, including many basic concepts from the Ethereum platform.
+* For a more in-depth dive, you may read the guide [Designing the Architecture for Your Ethereum Application](https://blog.openzeppelin.com/designing-the-architecture-for-your-ethereum-application-9cec086f8317), which discusses how to better structure your application and its relationship to the real world.
+
+## Security
+
+This project is maintained by [OpenZeppelin](https://openzeppelin.com), and developed following our high standards for code quality and security. OpenZeppelin Contracts is meant to provide tested and community-audited code, but please use common sense when doing anything that deals with real money! We take no responsibility for your implementation decisions and any security problems you might experience.
+
+The core development principles and strategies that OpenZeppelin Contracts is based on include: security in depth, simple and modular code, clarity-driven naming conventions, comprehensive unit testing, pre-and-post-condition sanity checks, code consistency, and regular audits.
+
+The latest audit was done on October 2018 on version 2.0.0.
+
+Please report any security issues you find to security@openzeppelin.org.
+
+Critical bug fixes will be backported to past major releases.
+
+## Contribute
+
+OpenZeppelin Contracts exists thanks to its contributors. There are many ways you can participate and help build high quality software. Check out the [contribution guide](CONTRIBUTING.md)!
+
+## License
+
+OpenZeppelin Contracts is released under the [MIT License](LICENSE).
diff --git a/node_modules/@openzeppelin/contracts/access/AccessControl.sol b/node_modules/@openzeppelin/contracts/access/AccessControl.sol
new file mode 100644
index 0000000..08ab65f
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/access/AccessControl.sol
@@ -0,0 +1,210 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IAccessControl.sol";
+import "../utils/Context.sol";
+import "../utils/Strings.sol";
+import "../utils/introspection/ERC165.sol";
+
+/**
+ * @dev Contract module that allows children to implement role-based access
+ * control mechanisms. This is a lightweight version that doesn't allow enumerating role
+ * members except through off-chain means by accessing the contract event logs. Some
+ * applications may benefit from on-chain enumerability, for those cases see
+ * {AccessControlEnumerable}.
+ *
+ * Roles are referred to by their `bytes32` identifier. These should be exposed
+ * in the external API and be unique. The best way to achieve this is by
+ * using `public constant` hash digests:
+ *
+ * ```
+ * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
+ * ```
+ *
+ * Roles can be used to represent a set of permissions. To restrict access to a
+ * function call, use {hasRole}:
+ *
+ * ```
+ * function foo() public {
+ * require(hasRole(MY_ROLE, msg.sender));
+ * ...
+ * }
+ * ```
+ *
+ * Roles can be granted and revoked dynamically via the {grantRole} and
+ * {revokeRole} functions. Each role has an associated admin role, and only
+ * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
+ *
+ * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
+ * that only accounts with this role will be able to grant or revoke other
+ * roles. More complex role relationships can be created by using
+ * {_setRoleAdmin}.
+ *
+ * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
+ * grant and revoke this role. Extra precautions should be taken to secure
+ * accounts that have been granted it.
+ */
+abstract contract AccessControl is Context, IAccessControl, ERC165 {
+ struct RoleData {
+ mapping(address => bool) members;
+ bytes32 adminRole;
+ }
+
+ mapping(bytes32 => RoleData) private _roles;
+
+ bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
+
+ /**
+ * @dev Modifier that checks that an account has a specific role. Reverts
+ * with a standardized message including the required role.
+ *
+ * The format of the revert reason is given by the following regular expression:
+ *
+ * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
+ *
+ * _Available since v4.1._
+ */
+ modifier onlyRole(bytes32 role) {
+ _checkRole(role, _msgSender());
+ _;
+ }
+
+ /**
+ * @dev See {IERC165-supportsInterface}.
+ */
+ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
+ return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
+ }
+
+ /**
+ * @dev Returns `true` if `account` has been granted `role`.
+ */
+ function hasRole(bytes32 role, address account) public view override returns (bool) {
+ return _roles[role].members[account];
+ }
+
+ /**
+ * @dev Revert with a standard message if `account` is missing `role`.
+ *
+ * The format of the revert reason is given by the following regular expression:
+ *
+ * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
+ */
+ function _checkRole(bytes32 role, address account) internal view {
+ if (!hasRole(role, account)) {
+ revert(
+ string(
+ abi.encodePacked(
+ "AccessControl: account ",
+ Strings.toHexString(uint160(account), 20),
+ " is missing role ",
+ Strings.toHexString(uint256(role), 32)
+ )
+ )
+ );
+ }
+ }
+
+ /**
+ * @dev Returns the admin role that controls `role`. See {grantRole} and
+ * {revokeRole}.
+ *
+ * To change a role's admin, use {_setRoleAdmin}.
+ */
+ function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
+ return _roles[role].adminRole;
+ }
+
+ /**
+ * @dev Grants `role` to `account`.
+ *
+ * If `account` had not been already granted `role`, emits a {RoleGranted}
+ * event.
+ *
+ * Requirements:
+ *
+ * - the caller must have ``role``'s admin role.
+ */
+ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
+ _grantRole(role, account);
+ }
+
+ /**
+ * @dev Revokes `role` from `account`.
+ *
+ * If `account` had been granted `role`, emits a {RoleRevoked} event.
+ *
+ * Requirements:
+ *
+ * - the caller must have ``role``'s admin role.
+ */
+ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
+ _revokeRole(role, account);
+ }
+
+ /**
+ * @dev Revokes `role` from the calling account.
+ *
+ * Roles are often managed via {grantRole} and {revokeRole}: this function's
+ * purpose is to provide a mechanism for accounts to lose their privileges
+ * if they are compromised (such as when a trusted device is misplaced).
+ *
+ * If the calling account had been granted `role`, emits a {RoleRevoked}
+ * event.
+ *
+ * Requirements:
+ *
+ * - the caller must be `account`.
+ */
+ function renounceRole(bytes32 role, address account) public virtual override {
+ require(account == _msgSender(), "AccessControl: can only renounce roles for self");
+
+ _revokeRole(role, account);
+ }
+
+ /**
+ * @dev Grants `role` to `account`.
+ *
+ * If `account` had not been already granted `role`, emits a {RoleGranted}
+ * event. Note that unlike {grantRole}, this function doesn't perform any
+ * checks on the calling account.
+ *
+ * [WARNING]
+ * ====
+ * This function should only be called from the constructor when setting
+ * up the initial roles for the system.
+ *
+ * Using this function in any other way is effectively circumventing the admin
+ * system imposed by {AccessControl}.
+ * ====
+ */
+ function _setupRole(bytes32 role, address account) internal virtual {
+ _grantRole(role, account);
+ }
+
+ /**
+ * @dev Sets `adminRole` as ``role``'s admin role.
+ *
+ * Emits a {RoleAdminChanged} event.
+ */
+ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
+ bytes32 previousAdminRole = getRoleAdmin(role);
+ _roles[role].adminRole = adminRole;
+ emit RoleAdminChanged(role, previousAdminRole, adminRole);
+ }
+
+ function _grantRole(bytes32 role, address account) private {
+ if (!hasRole(role, account)) {
+ _roles[role].members[account] = true;
+ emit RoleGranted(role, account, _msgSender());
+ }
+ }
+
+ function _revokeRole(bytes32 role, address account) private {
+ if (hasRole(role, account)) {
+ _roles[role].members[account] = false;
+ emit RoleRevoked(role, account, _msgSender());
+ }
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/access/AccessControlEnumerable.sol b/node_modules/@openzeppelin/contracts/access/AccessControlEnumerable.sol
new file mode 100644
index 0000000..6635a40
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/access/AccessControlEnumerable.sol
@@ -0,0 +1,79 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IAccessControlEnumerable.sol";
+import "./AccessControl.sol";
+import "../utils/structs/EnumerableSet.sol";
+
+/**
+ * @dev Extension of {AccessControl} that allows enumerating the members of each role.
+ */
+abstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {
+ using EnumerableSet for EnumerableSet.AddressSet;
+
+ mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers;
+
+ /**
+ * @dev See {IERC165-supportsInterface}.
+ */
+ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
+ return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);
+ }
+
+ /**
+ * @dev Returns one of the accounts that have `role`. `index` must be a
+ * value between 0 and {getRoleMemberCount}, non-inclusive.
+ *
+ * Role bearers are not sorted in any particular way, and their ordering may
+ * change at any point.
+ *
+ * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure
+ * you perform all queries on the same block. See the following
+ * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]
+ * for more information.
+ */
+ function getRoleMember(bytes32 role, uint256 index) public view override returns (address) {
+ return _roleMembers[role].at(index);
+ }
+
+ /**
+ * @dev Returns the number of accounts that have `role`. Can be used
+ * together with {getRoleMember} to enumerate all bearers of a role.
+ */
+ function getRoleMemberCount(bytes32 role) public view override returns (uint256) {
+ return _roleMembers[role].length();
+ }
+
+ /**
+ * @dev Overload {grantRole} to track enumerable memberships
+ */
+ function grantRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) {
+ super.grantRole(role, account);
+ _roleMembers[role].add(account);
+ }
+
+ /**
+ * @dev Overload {revokeRole} to track enumerable memberships
+ */
+ function revokeRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) {
+ super.revokeRole(role, account);
+ _roleMembers[role].remove(account);
+ }
+
+ /**
+ * @dev Overload {renounceRole} to track enumerable memberships
+ */
+ function renounceRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) {
+ super.renounceRole(role, account);
+ _roleMembers[role].remove(account);
+ }
+
+ /**
+ * @dev Overload {_setupRole} to track enumerable memberships
+ */
+ function _setupRole(bytes32 role, address account) internal virtual override {
+ super._setupRole(role, account);
+ _roleMembers[role].add(account);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/access/IAccessControl.sol b/node_modules/@openzeppelin/contracts/access/IAccessControl.sol
new file mode 100644
index 0000000..4614792
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/access/IAccessControl.sol
@@ -0,0 +1,87 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev External interface of AccessControl declared to support ERC165 detection.
+ */
+interface IAccessControl {
+ /**
+ * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
+ *
+ * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
+ * {RoleAdminChanged} not being emitted signaling this.
+ *
+ * _Available since v3.1._
+ */
+ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
+
+ /**
+ * @dev Emitted when `account` is granted `role`.
+ *
+ * `sender` is the account that originated the contract call, an admin role
+ * bearer except when using {AccessControl-_setupRole}.
+ */
+ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
+
+ /**
+ * @dev Emitted when `account` is revoked `role`.
+ *
+ * `sender` is the account that originated the contract call:
+ * - if using `revokeRole`, it is the admin role bearer
+ * - if using `renounceRole`, it is the role bearer (i.e. `account`)
+ */
+ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
+
+ /**
+ * @dev Returns `true` if `account` has been granted `role`.
+ */
+ function hasRole(bytes32 role, address account) external view returns (bool);
+
+ /**
+ * @dev Returns the admin role that controls `role`. See {grantRole} and
+ * {revokeRole}.
+ *
+ * To change a role's admin, use {AccessControl-_setRoleAdmin}.
+ */
+ function getRoleAdmin(bytes32 role) external view returns (bytes32);
+
+ /**
+ * @dev Grants `role` to `account`.
+ *
+ * If `account` had not been already granted `role`, emits a {RoleGranted}
+ * event.
+ *
+ * Requirements:
+ *
+ * - the caller must have ``role``'s admin role.
+ */
+ function grantRole(bytes32 role, address account) external;
+
+ /**
+ * @dev Revokes `role` from `account`.
+ *
+ * If `account` had been granted `role`, emits a {RoleRevoked} event.
+ *
+ * Requirements:
+ *
+ * - the caller must have ``role``'s admin role.
+ */
+ function revokeRole(bytes32 role, address account) external;
+
+ /**
+ * @dev Revokes `role` from the calling account.
+ *
+ * Roles are often managed via {grantRole} and {revokeRole}: this function's
+ * purpose is to provide a mechanism for accounts to lose their privileges
+ * if they are compromised (such as when a trusted device is misplaced).
+ *
+ * If the calling account had been granted `role`, emits a {RoleRevoked}
+ * event.
+ *
+ * Requirements:
+ *
+ * - the caller must be `account`.
+ */
+ function renounceRole(bytes32 role, address account) external;
+}
diff --git a/node_modules/@openzeppelin/contracts/access/IAccessControlEnumerable.sol b/node_modules/@openzeppelin/contracts/access/IAccessControlEnumerable.sol
new file mode 100644
index 0000000..e4a8e9f
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/access/IAccessControlEnumerable.sol
@@ -0,0 +1,30 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IAccessControl.sol";
+
+/**
+ * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.
+ */
+interface IAccessControlEnumerable is IAccessControl {
+ /**
+ * @dev Returns one of the accounts that have `role`. `index` must be a
+ * value between 0 and {getRoleMemberCount}, non-inclusive.
+ *
+ * Role bearers are not sorted in any particular way, and their ordering may
+ * change at any point.
+ *
+ * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure
+ * you perform all queries on the same block. See the following
+ * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]
+ * for more information.
+ */
+ function getRoleMember(bytes32 role, uint256 index) external view returns (address);
+
+ /**
+ * @dev Returns the number of accounts that have `role`. Can be used
+ * together with {getRoleMember} to enumerate all bearers of a role.
+ */
+ function getRoleMemberCount(bytes32 role) external view returns (uint256);
+}
diff --git a/node_modules/@openzeppelin/contracts/access/Ownable.sol b/node_modules/@openzeppelin/contracts/access/Ownable.sol
new file mode 100644
index 0000000..16469d5
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/access/Ownable.sol
@@ -0,0 +1,71 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../utils/Context.sol";
+
+/**
+ * @dev Contract module which provides a basic access control mechanism, where
+ * there is an account (an owner) that can be granted exclusive access to
+ * specific functions.
+ *
+ * By default, the owner account will be the one that deploys the contract. This
+ * can later be changed with {transferOwnership}.
+ *
+ * This module is used through inheritance. It will make available the modifier
+ * `onlyOwner`, which can be applied to your functions to restrict their use to
+ * the owner.
+ */
+abstract contract Ownable is Context {
+ address private _owner;
+
+ event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
+
+ /**
+ * @dev Initializes the contract setting the deployer as the initial owner.
+ */
+ constructor() {
+ _setOwner(_msgSender());
+ }
+
+ /**
+ * @dev Returns the address of the current owner.
+ */
+ function owner() public view virtual returns (address) {
+ return _owner;
+ }
+
+ /**
+ * @dev Throws if called by any account other than the owner.
+ */
+ modifier onlyOwner() {
+ require(owner() == _msgSender(), "Ownable: caller is not the owner");
+ _;
+ }
+
+ /**
+ * @dev Leaves the contract without owner. It will not be possible to call
+ * `onlyOwner` functions anymore. Can only be called by the current owner.
+ *
+ * NOTE: Renouncing ownership will leave the contract without an owner,
+ * thereby removing any functionality that is only available to the owner.
+ */
+ function renounceOwnership() public virtual onlyOwner {
+ _setOwner(address(0));
+ }
+
+ /**
+ * @dev Transfers ownership of the contract to a new account (`newOwner`).
+ * Can only be called by the current owner.
+ */
+ function transferOwnership(address newOwner) public virtual onlyOwner {
+ require(newOwner != address(0), "Ownable: new owner is the zero address");
+ _setOwner(newOwner);
+ }
+
+ function _setOwner(address newOwner) private {
+ address oldOwner = _owner;
+ _owner = newOwner;
+ emit OwnershipTransferred(oldOwner, newOwner);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/AccessControl.json b/node_modules/@openzeppelin/contracts/build/contracts/AccessControl.json
new file mode 100644
index 0000000..61422fe
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/AccessControl.json
@@ -0,0 +1,215 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "AccessControl",
+ "sourceName": "contracts/access/AccessControl.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "previousAdminRole",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "newAdminRole",
+ "type": "bytes32"
+ }
+ ],
+ "name": "RoleAdminChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "RoleGranted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "RoleRevoked",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "DEFAULT_ADMIN_ROLE",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getRoleAdmin",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "grantRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasRole",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "renounceRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "revokeRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/AccessControlEnumerable.json b/node_modules/@openzeppelin/contracts/build/contracts/AccessControlEnumerable.json
new file mode 100644
index 0000000..896b3c4
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/AccessControlEnumerable.json
@@ -0,0 +1,258 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "AccessControlEnumerable",
+ "sourceName": "contracts/access/AccessControlEnumerable.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "previousAdminRole",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "newAdminRole",
+ "type": "bytes32"
+ }
+ ],
+ "name": "RoleAdminChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "RoleGranted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "RoleRevoked",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "DEFAULT_ADMIN_ROLE",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getRoleAdmin",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ }
+ ],
+ "name": "getRoleMember",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getRoleMemberCount",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "grantRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasRole",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "renounceRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "revokeRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/Address.json b/node_modules/@openzeppelin/contracts/build/contracts/Address.json
new file mode 100644
index 0000000..8d9369d
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/Address.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "Address",
+ "sourceName": "contracts/utils/Address.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122087668ebac231427ac5112a48f8eb5ebe654ece78cff120f4dc6e1c1423a2672164736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122087668ebac231427ac5112a48f8eb5ebe654ece78cff120f4dc6e1c1423a2672164736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/Arrays.json b/node_modules/@openzeppelin/contracts/build/contracts/Arrays.json
new file mode 100644
index 0000000..d192390
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/Arrays.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "Arrays",
+ "sourceName": "contracts/utils/Arrays.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122079fb203044e4773f88f97bd4aaa86df33813a3ca584e6b172c043f451eba76d464736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122079fb203044e4773f88f97bd4aaa86df33813a3ca584e6b172c043f451eba76d464736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/BeaconProxy.json b/node_modules/@openzeppelin/contracts/build/contracts/BeaconProxy.json
new file mode 100644
index 0000000..03feee3
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/BeaconProxy.json
@@ -0,0 +1,80 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "BeaconProxy",
+ "sourceName": "contracts/proxy/beacon/BeaconProxy.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "beacon",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "previousAdmin",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "newAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "AdminChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "beacon",
+ "type": "address"
+ }
+ ],
+ "name": "BeaconUpgraded",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "implementation",
+ "type": "address"
+ }
+ ],
+ "name": "Upgraded",
+ "type": "event"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "fallback"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "receive"
+ }
+ ],
+ "bytecode": "0x608060405260405161098838038061098883398101604081905261002291610483565b61004d60017fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5161058e565b6000805160206109418339815191521461007757634e487b7160e01b600052600160045260246000fd5b6100838282600061008a565b50506105f3565b61009383610164565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a26000825111806100d45750805b1561015f5761015d836001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561011557600080fd5b505afa158015610129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061014d9190610469565b8361030460201b6100291760201c565b505b505050565b6101778161033060201b6100551760201c565b6101d65760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b610259816001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561021257600080fd5b505afa158015610226573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061024a9190610469565b61033060201b6100551760201c565b6102be5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b60648201526084016101cd565b806102e360008051602061094183398151915260001b61033a60201b61005b1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b606061032983836040518060600160405280602781526020016109616027913961033d565b9392505050565b803b15155b919050565b90565b606061034884610330565b6103a35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016101cd565b600080856001600160a01b0316856040516103be919061053f565b600060405180830381855af49150503d80600081146103f9576040519150601f19603f3d011682016040523d82523d6000602084013e6103fe565b606091505b50909250905061040f828286610419565b9695505050505050565b60608315610428575081610329565b8251156104385782518084602001fd5b8160405162461bcd60e51b81526004016101cd919061055b565b80516001600160a01b038116811461033557600080fd5b60006020828403121561047a578081fd5b61032982610452565b60008060408385031215610495578081fd5b61049e83610452565b60208401519092506001600160401b03808211156104ba578283fd5b818501915085601f8301126104cd578283fd5b8151818111156104df576104df6105dd565b604051601f8201601f19908116603f01168101908382118183101715610507576105076105dd565b8160405282815288602084870101111561051f578586fd5b6105308360208301602088016105b1565b80955050505050509250929050565b600082516105518184602087016105b1565b9190910192915050565b600060208252825180602084015261057a8160408501602087016105b1565b601f01601f19169190910160400192915050565b6000828210156105ac57634e487b7160e01b81526011600452602481fd5b500390565b60005b838110156105cc5781810151838201526020016105b4565b8381111561015d5750506000910152565b634e487b7160e01b600052604160045260246000fd5b61033f806106026000396000f3fe60806040523661001357610011610017565b005b6100115b61002761002261005e565b610106565b565b606061004e83836040518060600160405280602781526020016102e36027913961012a565b9392505050565b3b151590565b90565b60006100917fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156100c957600080fd5b505afa1580156100dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610101919061023c565b905090565b3660008037600080366000845af43d6000803e808015610125573d6000f35b3d6000fd5b6060833b61018e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b0316856040516101a99190610263565b600060405180830381855af49150503d80600081146101e4576040519150601f19603f3d011682016040523d82523d6000602084013e6101e9565b606091505b50915091506101f9828286610203565b9695505050505050565b6060831561021257508161004e565b8251156102225782518084602001fd5b8160405162461bcd60e51b8152600401610185919061027f565b60006020828403121561024d578081fd5b81516001600160a01b038116811461004e578182fd5b600082516102758184602087016102b2565b9190910192915050565b600060208252825180602084015261029e8160408501602087016102b2565b601f01601f19169190910160400192915050565b60005b838110156102cd5781810151838201526020016102b5565b838111156102dc576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201cb996891e0e185f82d2c11ffc73eff0fcb823b001721fc4f725e35a9ed5dc4264736f6c63430008030033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564",
+ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b61002761002261005e565b610106565b565b606061004e83836040518060600160405280602781526020016102e36027913961012a565b9392505050565b3b151590565b90565b60006100917fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156100c957600080fd5b505afa1580156100dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610101919061023c565b905090565b3660008037600080366000845af43d6000803e808015610125573d6000f35b3d6000fd5b6060833b61018e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b0316856040516101a99190610263565b600060405180830381855af49150503d80600081146101e4576040519150601f19603f3d011682016040523d82523d6000602084013e6101e9565b606091505b50915091506101f9828286610203565b9695505050505050565b6060831561021257508161004e565b8251156102225782518084602001fd5b8160405162461bcd60e51b8152600401610185919061027f565b60006020828403121561024d578081fd5b81516001600160a01b038116811461004e578182fd5b600082516102758184602087016102b2565b9190910192915050565b600060208252825180602084015261029e8160408501602087016102b2565b601f01601f19169190910160400192915050565b60005b838110156102cd5781810151838201526020016102b5565b838111156102dc576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201cb996891e0e185f82d2c11ffc73eff0fcb823b001721fc4f725e35a9ed5dc4264736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/BitMaps.json b/node_modules/@openzeppelin/contracts/build/contracts/BitMaps.json
new file mode 100644
index 0000000..6eb3e47
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/BitMaps.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "BitMaps",
+ "sourceName": "contracts/utils/structs/BitMaps.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220816d3c991ac8b7c7371f85b4390f82fb27b363de9a864484c9536f2202a4a2b064736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220816d3c991ac8b7c7371f85b4390f82fb27b363de9a864484c9536f2202a4a2b064736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/Clones.json b/node_modules/@openzeppelin/contracts/build/contracts/Clones.json
new file mode 100644
index 0000000..8e2e78c
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/Clones.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "Clones",
+ "sourceName": "contracts/proxy/Clones.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cd526066f099f3825553042c47bc0ca7580fcaee299a785c414ed3d203f8297064736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cd526066f099f3825553042c47bc0ca7580fcaee299a785c414ed3d203f8297064736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ConditionalEscrow.json b/node_modules/@openzeppelin/contracts/build/contracts/ConditionalEscrow.json
new file mode 100644
index 0000000..2cad814
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ConditionalEscrow.json
@@ -0,0 +1,165 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ConditionalEscrow",
+ "sourceName": "contracts/utils/escrow/ConditionalEscrow.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "payee",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weiAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "Deposited",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "previousOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "OwnershipTransferred",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "payee",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weiAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "Withdrawn",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "payee",
+ "type": "address"
+ }
+ ],
+ "name": "deposit",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "payee",
+ "type": "address"
+ }
+ ],
+ "name": "depositsOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "renounceOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address payable",
+ "name": "payee",
+ "type": "address"
+ }
+ ],
+ "name": "withdraw",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "payee",
+ "type": "address"
+ }
+ ],
+ "name": "withdrawalAllowed",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/Context.json b/node_modules/@openzeppelin/contracts/build/contracts/Context.json
new file mode 100644
index 0000000..184c2e1
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/Context.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "Context",
+ "sourceName": "contracts/utils/Context.sol",
+ "abi": [],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/Counters.json b/node_modules/@openzeppelin/contracts/build/contracts/Counters.json
new file mode 100644
index 0000000..d6910f6
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/Counters.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "Counters",
+ "sourceName": "contracts/utils/Counters.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a21e253091723b026ffad764c146aee9860311835b0da7d37cfb867ea9b8ba1364736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a21e253091723b026ffad764c146aee9860311835b0da7d37cfb867ea9b8ba1364736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/Create2.json b/node_modules/@openzeppelin/contracts/build/contracts/Create2.json
new file mode 100644
index 0000000..845289a
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/Create2.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "Create2",
+ "sourceName": "contracts/utils/Create2.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ed29ff5f092e12a3b803bebadc72c3da0985c3d08ba24500bb08660f83eedb7564736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ed29ff5f092e12a3b803bebadc72c3da0985c3d08ba24500bb08660f83eedb7564736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ECDSA.json b/node_modules/@openzeppelin/contracts/build/contracts/ECDSA.json
new file mode 100644
index 0000000..1064648
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ECDSA.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ECDSA",
+ "sourceName": "contracts/utils/cryptography/ECDSA.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220baedd20259ac1db864bb1630c1835f25c492bfcc3179000115ec2aacaf7d7eda64736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220baedd20259ac1db864bb1630c1835f25c492bfcc3179000115ec2aacaf7d7eda64736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/EIP712.json b/node_modules/@openzeppelin/contracts/build/contracts/EIP712.json
new file mode 100644
index 0000000..f2f9094
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/EIP712.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "EIP712",
+ "sourceName": "contracts/utils/cryptography/draft-EIP712.sol",
+ "abi": [],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC1155.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC1155.json
new file mode 100644
index 0000000..3a593c4
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC1155.json
@@ -0,0 +1,334 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC1155",
+ "sourceName": "contracts/token/ERC1155/ERC1155.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "uri_",
+ "type": "string"
+ }
+ ],
+ "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": "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"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "id",
+ "type": "uint256"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "accounts",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "balanceOfBatch",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "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": "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": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "uri",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x60806040523480156200001157600080fd5b50604051620016b9380380620016b9833981016040819052620000349162000105565b6200003f8162000046565b506200022e565b80516200005b9060029060208401906200005f565b5050565b8280546200006d90620001db565b90600052602060002090601f016020900481019282620000915760008555620000dc565b82601f10620000ac57805160ff1916838001178555620000dc565b82800160010185558215620000dc579182015b82811115620000dc578251825591602001919060010190620000bf565b50620000ea929150620000ee565b5090565b5b80821115620000ea5760008155600101620000ef565b6000602080838503121562000118578182fd5b82516001600160401b03808211156200012f578384fd5b818501915085601f83011262000143578384fd5b81518181111562000158576200015862000218565b604051601f8201601f19908116603f0116810190838211818310171562000183576200018362000218565b8160405282815288868487010111156200019b578687fd5b8693505b82841015620001be57848401860151818501870152928501926200019f565b82841115620001cf57868684830101525b98975050505050505050565b600181811c90821680620001f057607f821691505b602082108114156200021257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61147b806200023e6000396000f3fe608060405234801561001057600080fd5b50600436106100875760003560e01c80634e1273f41161005b5780634e1273f41461010a578063a22cb4651461012a578063e985e9c51461013d578063f242432a1461017957610087565b8062fdd58e1461008c57806301ffc9a7146100b25780630e89341c146100d55780632eb2c2d6146100f5575b600080fd5b61009f61009a366004610efa565b61018c565b6040519081526020015b60405180910390f35b6100c56100c0366004610fee565b610223565b60405190151581526020016100a9565b6100e86100e336600461102d565b610277565b6040516100a991906111ae565b610108610103366004610db7565b61030b565b005b61011d610118366004610f23565b6103b4565b6040516100a9919061116d565b610108610138366004610ec0565b610516565b6100c561014b366004610d85565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b610108610187366004610e5d565b61062a565b60006001600160a01b0383166101fd5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061025457506001600160e01b031982166303a24d0760e21b145b8061026f57506301ffc9a760e01b6001600160e01b03198316145b90505b919050565b606060028054610286906112d4565b80601f01602080910402602001604051908101604052809291908181526020018280546102b2906112d4565b80156102ff5780601f106102d4576101008083540402835291602001916102ff565b820191906000526020600020905b8154815290600101906020018083116102e257829003601f168201915b50505050509050919050565b6103136106c3565b6001600160a01b0316856001600160a01b0316148061033957506103398561014b6106c3565b6103a05760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016101f4565b6103ad85858585856106c8565b5050505050565b606081518351146104195760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016101f4565b6000835167ffffffffffffffff81111561044357634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561046c578160200160208202803683370190505b50905060005b845181101561050e576104d385828151811061049e57634e487b7160e01b600052603260045260246000fd5b60200260200101518583815181106104c657634e487b7160e01b600052603260045260246000fd5b602002602001015161018c565b8282815181106104f357634e487b7160e01b600052603260045260246000fd5b60209081029190910101526105078161133c565b9050610472565b509392505050565b816001600160a01b03166105286106c3565b6001600160a01b031614156105915760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016101f4565b806001600061059e6106c3565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556105e26106c3565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161061e911515815260200190565b60405180910390a35050565b6106326106c3565b6001600160a01b0316856001600160a01b0316148061065857506106588561014b6106c3565b6106b65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016101f4565b6103ad85858585856108cc565b335b90565b815183511461072a5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016101f4565b6001600160a01b0384166107505760405162461bcd60e51b81526004016101f490611209565b600061075a6106c3565b905060005b845181101561085e57600085828151811061078a57634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008583815181106107b657634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156108065760405162461bcd60e51b81526004016101f49061124e565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906108439084906112bc565b92505081905550505050806108579061133c565b905061075f565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516108ae929190611180565b60405180910390a46108c48187878787876109fd565b505050505050565b6001600160a01b0384166108f25760405162461bcd60e51b81526004016101f490611209565b60006108fc6106c3565b905061091681878761090d88610b68565b6103ad88610b68565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156109575760405162461bcd60e51b81526004016101f49061124e565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906109949084906112bc565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46109f4828888888888610bc1565b50505050505050565b6001600160a01b0384163b156108c45760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190610a4190899089908890889088906004016110ca565b602060405180830381600087803b158015610a5b57600080fd5b505af1925050508015610a8b575060408051601f3d908101601f19168201909252610a8891810190611011565b60015b610b3857610a97611383565b806308c379a01415610ad15750610aac61139a565b80610ab75750610ad3565b8060405162461bcd60e51b81526004016101f491906111ae565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016101f4565b6001600160e01b0319811663bc197c8160e01b146109f45760405162461bcd60e51b81526004016101f4906111c1565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610bb057634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156108c45760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190610c059089908990889088908890600401611128565b602060405180830381600087803b158015610c1f57600080fd5b505af1925050508015610c4f575060408051601f3d908101601f19168201909252610c4c91810190611011565b60015b610c5b57610a97611383565b6001600160e01b0319811663f23a6e6160e01b146109f45760405162461bcd60e51b81526004016101f4906111c1565b80356001600160a01b038116811461027257600080fd5b600082601f830112610cb2578081fd5b81356020610cbf82611298565b604051610ccc828261130f565b8381528281019150858301600585901b87018401881015610ceb578586fd5b855b85811015610d0957813584529284019290840190600101610ced565b5090979650505050505050565b600082601f830112610d26578081fd5b813567ffffffffffffffff811115610d4057610d4061136d565b604051610d57601f8301601f19166020018261130f565b818152846020838601011115610d6b578283fd5b816020850160208301379081016020019190915292915050565b60008060408385031215610d97578182fd5b610da083610c8b565b9150610dae60208401610c8b565b90509250929050565b600080600080600060a08688031215610dce578081fd5b610dd786610c8b565b9450610de560208701610c8b565b9350604086013567ffffffffffffffff80821115610e01578283fd5b610e0d89838a01610ca2565b94506060880135915080821115610e22578283fd5b610e2e89838a01610ca2565b93506080880135915080821115610e43578283fd5b50610e5088828901610d16565b9150509295509295909350565b600080600080600060a08688031215610e74578081fd5b610e7d86610c8b565b9450610e8b60208701610c8b565b93506040860135925060608601359150608086013567ffffffffffffffff811115610eb4578182fd5b610e5088828901610d16565b60008060408385031215610ed2578182fd5b610edb83610c8b565b915060208301358015158114610eef578182fd5b809150509250929050565b60008060408385031215610f0c578182fd5b610f1583610c8b565b946020939093013593505050565b60008060408385031215610f35578182fd5b823567ffffffffffffffff80821115610f4c578384fd5b818501915085601f830112610f5f578384fd5b81356020610f6c82611298565b604051610f79828261130f565b8381528281019150858301600585901b870184018b1015610f98578889fd5b8896505b84871015610fc157610fad81610c8b565b835260019690960195918301918301610f9c565b5096505086013592505080821115610fd7578283fd5b50610fe485828601610ca2565b9150509250929050565b600060208284031215610fff578081fd5b813561100a8161142c565b9392505050565b600060208284031215611022578081fd5b815161100a8161142c565b60006020828403121561103e578081fd5b5035919050565b6000815180845260208085019450808401835b8381101561107457815187529582019590820190600101611058565b509495945050505050565b60008151808452815b818110156110a457602081850181015186830182015201611088565b818111156110b55782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a0604082018190526000906110f690830186611045565b82810360608401526111088186611045565b9050828103608084015261111c818561107f565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906111629083018461107f565b979650505050505050565b60006020825261100a6020830184611045565b6000604082526111936040830185611045565b82810360208401526111a58185611045565b95945050505050565b60006020825261100a602083018461107f565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b600067ffffffffffffffff8211156112b2576112b261136d565b5060051b60200190565b600082198211156112cf576112cf611357565b500190565b600181811c908216806112e857607f821691505b6020821081141561130957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff811182821017156113355761133561136d565b6040525050565b600060001982141561135057611350611357565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156106c557600481823e5160e01c90565b600060443d10156113aa576106c5565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156113dc5750505050506106c5565b82850191508151818111156113f6575050505050506106c5565b843d8701016020828501011115611412575050505050506106c5565b6114216020828601018761130f565b509094505050505090565b6001600160e01b03198116811461144257600080fd5b5056fea26469706673582212205adf82880a09a85f7a1b95c8af419ce5cf77d06610ac0ffd5b99d7df48fdd51f64736f6c63430008030033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100875760003560e01c80634e1273f41161005b5780634e1273f41461010a578063a22cb4651461012a578063e985e9c51461013d578063f242432a1461017957610087565b8062fdd58e1461008c57806301ffc9a7146100b25780630e89341c146100d55780632eb2c2d6146100f5575b600080fd5b61009f61009a366004610efa565b61018c565b6040519081526020015b60405180910390f35b6100c56100c0366004610fee565b610223565b60405190151581526020016100a9565b6100e86100e336600461102d565b610277565b6040516100a991906111ae565b610108610103366004610db7565b61030b565b005b61011d610118366004610f23565b6103b4565b6040516100a9919061116d565b610108610138366004610ec0565b610516565b6100c561014b366004610d85565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b610108610187366004610e5d565b61062a565b60006001600160a01b0383166101fd5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061025457506001600160e01b031982166303a24d0760e21b145b8061026f57506301ffc9a760e01b6001600160e01b03198316145b90505b919050565b606060028054610286906112d4565b80601f01602080910402602001604051908101604052809291908181526020018280546102b2906112d4565b80156102ff5780601f106102d4576101008083540402835291602001916102ff565b820191906000526020600020905b8154815290600101906020018083116102e257829003601f168201915b50505050509050919050565b6103136106c3565b6001600160a01b0316856001600160a01b0316148061033957506103398561014b6106c3565b6103a05760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016101f4565b6103ad85858585856106c8565b5050505050565b606081518351146104195760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016101f4565b6000835167ffffffffffffffff81111561044357634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561046c578160200160208202803683370190505b50905060005b845181101561050e576104d385828151811061049e57634e487b7160e01b600052603260045260246000fd5b60200260200101518583815181106104c657634e487b7160e01b600052603260045260246000fd5b602002602001015161018c565b8282815181106104f357634e487b7160e01b600052603260045260246000fd5b60209081029190910101526105078161133c565b9050610472565b509392505050565b816001600160a01b03166105286106c3565b6001600160a01b031614156105915760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016101f4565b806001600061059e6106c3565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556105e26106c3565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161061e911515815260200190565b60405180910390a35050565b6106326106c3565b6001600160a01b0316856001600160a01b0316148061065857506106588561014b6106c3565b6106b65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016101f4565b6103ad85858585856108cc565b335b90565b815183511461072a5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016101f4565b6001600160a01b0384166107505760405162461bcd60e51b81526004016101f490611209565b600061075a6106c3565b905060005b845181101561085e57600085828151811061078a57634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008583815181106107b657634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156108065760405162461bcd60e51b81526004016101f49061124e565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906108439084906112bc565b92505081905550505050806108579061133c565b905061075f565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516108ae929190611180565b60405180910390a46108c48187878787876109fd565b505050505050565b6001600160a01b0384166108f25760405162461bcd60e51b81526004016101f490611209565b60006108fc6106c3565b905061091681878761090d88610b68565b6103ad88610b68565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156109575760405162461bcd60e51b81526004016101f49061124e565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906109949084906112bc565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46109f4828888888888610bc1565b50505050505050565b6001600160a01b0384163b156108c45760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190610a4190899089908890889088906004016110ca565b602060405180830381600087803b158015610a5b57600080fd5b505af1925050508015610a8b575060408051601f3d908101601f19168201909252610a8891810190611011565b60015b610b3857610a97611383565b806308c379a01415610ad15750610aac61139a565b80610ab75750610ad3565b8060405162461bcd60e51b81526004016101f491906111ae565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016101f4565b6001600160e01b0319811663bc197c8160e01b146109f45760405162461bcd60e51b81526004016101f4906111c1565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610bb057634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156108c45760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190610c059089908990889088908890600401611128565b602060405180830381600087803b158015610c1f57600080fd5b505af1925050508015610c4f575060408051601f3d908101601f19168201909252610c4c91810190611011565b60015b610c5b57610a97611383565b6001600160e01b0319811663f23a6e6160e01b146109f45760405162461bcd60e51b81526004016101f4906111c1565b80356001600160a01b038116811461027257600080fd5b600082601f830112610cb2578081fd5b81356020610cbf82611298565b604051610ccc828261130f565b8381528281019150858301600585901b87018401881015610ceb578586fd5b855b85811015610d0957813584529284019290840190600101610ced565b5090979650505050505050565b600082601f830112610d26578081fd5b813567ffffffffffffffff811115610d4057610d4061136d565b604051610d57601f8301601f19166020018261130f565b818152846020838601011115610d6b578283fd5b816020850160208301379081016020019190915292915050565b60008060408385031215610d97578182fd5b610da083610c8b565b9150610dae60208401610c8b565b90509250929050565b600080600080600060a08688031215610dce578081fd5b610dd786610c8b565b9450610de560208701610c8b565b9350604086013567ffffffffffffffff80821115610e01578283fd5b610e0d89838a01610ca2565b94506060880135915080821115610e22578283fd5b610e2e89838a01610ca2565b93506080880135915080821115610e43578283fd5b50610e5088828901610d16565b9150509295509295909350565b600080600080600060a08688031215610e74578081fd5b610e7d86610c8b565b9450610e8b60208701610c8b565b93506040860135925060608601359150608086013567ffffffffffffffff811115610eb4578182fd5b610e5088828901610d16565b60008060408385031215610ed2578182fd5b610edb83610c8b565b915060208301358015158114610eef578182fd5b809150509250929050565b60008060408385031215610f0c578182fd5b610f1583610c8b565b946020939093013593505050565b60008060408385031215610f35578182fd5b823567ffffffffffffffff80821115610f4c578384fd5b818501915085601f830112610f5f578384fd5b81356020610f6c82611298565b604051610f79828261130f565b8381528281019150858301600585901b870184018b1015610f98578889fd5b8896505b84871015610fc157610fad81610c8b565b835260019690960195918301918301610f9c565b5096505086013592505080821115610fd7578283fd5b50610fe485828601610ca2565b9150509250929050565b600060208284031215610fff578081fd5b813561100a8161142c565b9392505050565b600060208284031215611022578081fd5b815161100a8161142c565b60006020828403121561103e578081fd5b5035919050565b6000815180845260208085019450808401835b8381101561107457815187529582019590820190600101611058565b509495945050505050565b60008151808452815b818110156110a457602081850181015186830182015201611088565b818111156110b55782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a0604082018190526000906110f690830186611045565b82810360608401526111088186611045565b9050828103608084015261111c818561107f565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906111629083018461107f565b979650505050505050565b60006020825261100a6020830184611045565b6000604082526111936040830185611045565b82810360208401526111a58185611045565b95945050505050565b60006020825261100a602083018461107f565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b600067ffffffffffffffff8211156112b2576112b261136d565b5060051b60200190565b600082198211156112cf576112cf611357565b500190565b600181811c908216806112e857607f821691505b6020821081141561130957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff811182821017156113355761133561136d565b6040525050565b600060001982141561135057611350611357565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156106c557600481823e5160e01c90565b600060443d10156113aa576106c5565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156113dc5750505050506106c5565b82850191508151818111156113f6575050505050506106c5565b843d8701016020828501011115611412575050505050506106c5565b6114216020828601018761130f565b509094505050505090565b6001600160e01b03198116811461144257600080fd5b5056fea26469706673582212205adf82880a09a85f7a1b95c8af419ce5cf77d06610ac0ffd5b99d7df48fdd51f64736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC1155Burnable.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC1155Burnable.json
new file mode 100644
index 0000000..7445563
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC1155Burnable.json
@@ -0,0 +1,369 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC1155Burnable",
+ "sourceName": "contracts/token/ERC1155/extensions/ERC1155Burnable.sol",
+ "abi": [
+ {
+ "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": "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"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "id",
+ "type": "uint256"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "accounts",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "balanceOfBatch",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "id",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "burn",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "burnBatch",
+ "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": "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": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "uri",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC1155Holder.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC1155Holder.json
new file mode 100644
index 0000000..e0cb036
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC1155Holder.json
@@ -0,0 +1,108 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC1155Holder",
+ "sourceName": "contracts/token/ERC1155/utils/ERC1155Holder.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "name": "onERC1155BatchReceived",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "",
+ "type": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "name": "onERC1155Received",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "",
+ "type": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x608060405234801561001057600080fd5b506103b8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806301ffc9a714610046578063bc197c811461006e578063f23a6e61146100a6575b600080fd5b61005961005436600461030c565b6100c5565b60405190151581526020015b60405180910390f35b61008d61007c366004610203565b63bc197c8160e01b95945050505050565b6040516001600160e01b03199091168152602001610065565b61008d6100b43660046102a9565b63f23a6e6160e01b95945050505050565b60006001600160e01b03198216630271189760e51b14806100f657506301ffc9a760e01b6001600160e01b03198316145b90505b919050565b80356001600160a01b03811681146100f957600080fd5b600082601f830112610125578081fd5b8135602067ffffffffffffffff8211156101415761014161036c565b8160051b61015082820161033b565b83815282810190868401838801850189101561016a578687fd5b8693505b8584101561018c57803583526001939093019291840191840161016e565b50979650505050505050565b600082601f8301126101a8578081fd5b813567ffffffffffffffff8111156101c2576101c261036c565b6101d5601f8201601f191660200161033b565b8181528460208386010111156101e9578283fd5b816020850160208301379081016020019190915292915050565b600080600080600060a0868803121561021a578081fd5b610223866100fe565b9450610231602087016100fe565b9350604086013567ffffffffffffffff8082111561024d578283fd5b61025989838a01610115565b9450606088013591508082111561026e578283fd5b61027a89838a01610115565b9350608088013591508082111561028f578283fd5b5061029c88828901610198565b9150509295509295909350565b600080600080600060a086880312156102c0578081fd5b6102c9866100fe565b94506102d7602087016100fe565b93506040860135925060608601359150608086013567ffffffffffffffff811115610300578182fd5b61029c88828901610198565b60006020828403121561031d578081fd5b81356001600160e01b031981168114610334578182fd5b9392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156103645761036461036c565b604052919050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220c7089a563675685ec683fd12db514d46eb711c3b0cdf61b0863c181eff8fdfde64736f6c63430008030033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806301ffc9a714610046578063bc197c811461006e578063f23a6e61146100a6575b600080fd5b61005961005436600461030c565b6100c5565b60405190151581526020015b60405180910390f35b61008d61007c366004610203565b63bc197c8160e01b95945050505050565b6040516001600160e01b03199091168152602001610065565b61008d6100b43660046102a9565b63f23a6e6160e01b95945050505050565b60006001600160e01b03198216630271189760e51b14806100f657506301ffc9a760e01b6001600160e01b03198316145b90505b919050565b80356001600160a01b03811681146100f957600080fd5b600082601f830112610125578081fd5b8135602067ffffffffffffffff8211156101415761014161036c565b8160051b61015082820161033b565b83815282810190868401838801850189101561016a578687fd5b8693505b8584101561018c57803583526001939093019291840191840161016e565b50979650505050505050565b600082601f8301126101a8578081fd5b813567ffffffffffffffff8111156101c2576101c261036c565b6101d5601f8201601f191660200161033b565b8181528460208386010111156101e9578283fd5b816020850160208301379081016020019190915292915050565b600080600080600060a0868803121561021a578081fd5b610223866100fe565b9450610231602087016100fe565b9350604086013567ffffffffffffffff8082111561024d578283fd5b61025989838a01610115565b9450606088013591508082111561026e578283fd5b61027a89838a01610115565b9350608088013591508082111561028f578283fd5b5061029c88828901610198565b9150509295509295909350565b600080600080600060a086880312156102c0578081fd5b6102c9866100fe565b94506102d7602087016100fe565b93506040860135925060608601359150608086013567ffffffffffffffff811115610300578182fd5b61029c88828901610198565b60006020828403121561031d578081fd5b81356001600160e01b031981168114610334578182fd5b9392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156103645761036461036c565b604052919050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220c7089a563675685ec683fd12db514d46eb711c3b0cdf61b0863c181eff8fdfde64736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC1155Pausable.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC1155Pausable.json
new file mode 100644
index 0000000..6bc8b62
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC1155Pausable.json
@@ -0,0 +1,362 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC1155Pausable",
+ "sourceName": "contracts/token/ERC1155/extensions/ERC1155Pausable.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "Paused",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "TransferBatch",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "id",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "TransferSingle",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "value",
+ "type": "string"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "id",
+ "type": "uint256"
+ }
+ ],
+ "name": "URI",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "Unpaused",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "id",
+ "type": "uint256"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "accounts",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "balanceOfBatch",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "paused",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "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": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "uri",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC1155PresetMinterPauser.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC1155PresetMinterPauser.json
new file mode 100644
index 0000000..88ab914
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC1155PresetMinterPauser.json
@@ -0,0 +1,743 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC1155PresetMinterPauser",
+ "sourceName": "contracts/token/ERC1155/presets/ERC1155PresetMinterPauser.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "uri",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "Paused",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "previousAdminRole",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "newAdminRole",
+ "type": "bytes32"
+ }
+ ],
+ "name": "RoleAdminChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "RoleGranted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "RoleRevoked",
+ "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": "DEFAULT_ADMIN_ROLE",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "MINTER_ROLE",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "PAUSER_ROLE",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "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": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "id",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "burn",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "burnBatch",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getRoleAdmin",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ }
+ ],
+ "name": "getRoleMember",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getRoleMemberCount",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "grantRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasRole",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "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": "to",
+ "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": "pause",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "paused",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "renounceRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "revokeRole",
+ "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": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "unpause",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "uri",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x60806040523480156200001157600080fd5b5060405162002e4b38038062002e4b8339810160408190526200003491620002d8565b806200004081620000b8565b506005805460ff19169055620000596000335b620000d1565b620000857f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63362000053565b620000b17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3362000053565b5062000401565b8051620000cd90600490602084019062000232565b5050565b620000e882826200011460201b62000b791760201c565b60008281526001602090815260409091206200010f91839062000b8762000120821b17901c565b505050565b620000cd828262000140565b600062000137836001600160a01b038416620001e0565b90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620000cd576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556200019c3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600081815260018301602052604081205462000229575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200013a565b5060006200013a565b8280546200024090620003ae565b90600052602060002090601f016020900481019282620002645760008555620002af565b82601f106200027f57805160ff1916838001178555620002af565b82800160010185558215620002af579182015b82811115620002af57825182559160200191906001019062000292565b50620002bd929150620002c1565b5090565b5b80821115620002bd5760008155600101620002c2565b60006020808385031215620002eb578182fd5b82516001600160401b038082111562000302578384fd5b818501915085601f83011262000316578384fd5b8151818111156200032b576200032b620003eb565b604051601f8201601f19908116603f01168101908382118183101715620003565762000356620003eb565b8160405282815288868487010111156200036e578687fd5b8693505b8284101562000391578484018601518185018701529285019262000372565b82841115620003a257868684830101525b98975050505050505050565b600181811c90821680620003c357607f821691505b60208210811415620003e557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612a3a80620004116000396000f3fe608060405234801561001057600080fd5b50600436106101725760003560e01c8063731133e9116100de578063ca15c87311610097578063e63ab1e911610071578063e63ab1e914610355578063e985e9c51461037c578063f242432a146103b8578063f5298aca146103cb57610172565b8063ca15c87314610308578063d53913931461031b578063d547741f1461034257610172565b8063731133e9146102945780638456cb59146102a75780639010d07c146102af57806391d14854146102da578063a217fddf146102ed578063a22cb465146102f557610172565b80632f2ff15d116101305780632f2ff15d1461022b57806336568abe1461023e5780633f4ba83a146102515780634e1273f4146102595780635c975abb146102795780636b20c4541461028157610172565b8062fdd58e1461017757806301ffc9a71461019d5780630e89341c146101c05780631f7fdffa146101e0578063248a9ca3146101f55780632eb2c2d614610218575b600080fd5b61018a610185366004612173565b6103de565b6040519081526020015b60405180910390f35b6101b06101ab366004612347565b61047a565b6040519015158152602001610194565b6101d36101ce3660046122ec565b61048d565b604051610194919061253e565b6101f36101ee3660046120a4565b610521565b005b61018a6102033660046122ec565b60009081526020819052604090206001015490565b6101f3610226366004611f2a565b610579565b6101f3610239366004612304565b610610565b6101f361024c366004612304565b610637565b6101f3610659565b61026c610267366004612221565b6106ff565b60405161019491906124fd565b6101b0610861565b6101f361028f366004612033565b61086b565b6101f36102a23660046121ce565b6108ae565b6101f3610900565b6102c26102bd366004612326565b6109a4565b6040516001600160a01b039091168152602001610194565b6101b06102e8366004612304565b6109c3565b61018a600081565b6101f3610303366004612139565b6109ec565b61018a6103163660046122ec565b610ad0565b61018a7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6101f3610350366004612304565b610ae7565b61018a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6101b061038a366004611ef8565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b6101f36103c6366004611fd0565b610af1565b6101f36103d936600461219c565b610b36565b60006001600160a01b03831661044f5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b5060008181526002602090815260408083206001600160a01b03861684529091529020545b92915050565b600061048582610b9c565b90505b919050565b60606004805461049c90612893565b80601f01602080910402602001604051908101604052809291908181526020018280546104c890612893565b80156105155780601f106104ea57610100808354040283529160200191610515565b820191906000526020600020905b8154815290600101906020018083116104f857829003601f168201915b50505050509050919050565b61054b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336102e8565b6105675760405162461bcd60e51b8152600401610446906126ae565b61057384848484610bdc565b50505050565b6001600160a01b0385163314806105955750610595853361038a565b6105fc5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610446565b6106098585858585610d53565b5050505050565b61061a8282610f1c565b60008281526001602052604090206106329082610b87565b505050565b6106418282610f43565b60008281526001602052604090206106329082610fbd565b6106837f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a336102e8565b6106f55760405162461bcd60e51b815260206004820152603b60248201527f455243313135355072657365744d696e7465725061757365723a206d7573742060448201527f686176652070617573657220726f6c6520746f20756e706175736500000000006064820152608401610446565b6106fd610fd2565b565b606081518351146107645760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610446565b6000835167ffffffffffffffff81111561078e57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156107b7578160200160208202803683370190505b50905060005b84518110156108595761081e8582815181106107e957634e487b7160e01b600052603260045260246000fd5b602002602001015185838151811061081157634e487b7160e01b600052603260045260246000fd5b60200260200101516103de565b82828151811061083e57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152610852816128fb565b90506107bd565b509392505050565b60055460ff165b90565b6001600160a01b0383163314806108875750610887833361038a565b6108a35760405162461bcd60e51b8152600401610446906125dd565b610632838383611067565b6108d87f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336102e8565b6108f45760405162461bcd60e51b8152600401610446906126ae565b61057384848484611214565b61092a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a336102e8565b61099c5760405162461bcd60e51b815260206004820152603960248201527f455243313135355072657365744d696e7465725061757365723a206d7573742060448201527f686176652070617573657220726f6c6520746f207061757365000000000000006064820152608401610446565b6106fd6112ec565b60008281526001602052604081206109bc9083611369565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b336001600160a01b0383161415610a575760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610446565b3360008181526003602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ac4911515815260200190565b60405180910390a35050565b600081815260016020526040812061048590611375565b610641828261137f565b6001600160a01b038516331480610b0d5750610b0d853361038a565b610b295760405162461bcd60e51b8152600401610446906125dd565b61060985858585856113a5565b6001600160a01b038316331480610b525750610b52833361038a565b610b6e5760405162461bcd60e51b8152600401610446906125dd565b6106328383836114c6565b610b8382826115cb565b5050565b60006109bc836001600160a01b03841661164f565b60006001600160e01b03198216636cdb3d1360e11b1480610bcd57506001600160e01b031982166303a24d0760e21b145b8061048557506104858261169e565b6001600160a01b038416610c025760405162461bcd60e51b81526004016104469061279d565b8151835114610c235760405162461bcd60e51b815260040161044690612755565b33610c33816000878787876116c3565b60005b8451811015610ceb57838181518110610c5f57634e487b7160e01b600052603260045260246000fd5b602002602001015160026000878481518110610c8b57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610cd39190612802565b90915550819050610ce3816128fb565b915050610c36565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610d3c929190612510565b60405180910390a4610609816000878787876116d1565b8151835114610d745760405162461bcd60e51b815260040161044690612755565b6001600160a01b038416610d9a5760405162461bcd60e51b815260040161044690612626565b33610da98187878787876116c3565b60005b8451811015610eae576000858281518110610dd757634e487b7160e01b600052603260045260246000fd5b602002602001015190506000858381518110610e0357634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008481526002835260408082206001600160a01b038e168352909352919091205490915081811015610e545760405162461bcd60e51b81526004016104469061270b565b60008381526002602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610e93908490612802565b9250508190555050505080610ea7906128fb565b9050610dac565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610efe929190612510565b60405180910390a4610f148187878787876116d1565b505050505050565b600082815260208190526040902060010154610f3981335b61183c565b61063283836115cb565b6001600160a01b0381163314610fb35760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610446565b610b8382826118a0565b60006109bc836001600160a01b038416611905565b610fda610861565b61101d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610446565b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b03831661108d5760405162461bcd60e51b81526004016104469061266b565b80518251146110ae5760405162461bcd60e51b815260040161044690612755565b60003390506110d1818560008686604051806020016040528060008152506116c3565b60005b83518110156111b55760008482815181106110ff57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600084838151811061112b57634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008481526002835260408082206001600160a01b038c16835290935291909120549091508181101561117c5760405162461bcd60e51b815260040161044690612599565b60009283526002602090815260408085206001600160a01b038b16865290915290922091039055806111ad816128fb565b9150506110d4565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611206929190612510565b60405180910390a450505050565b6001600160a01b03841661123a5760405162461bcd60e51b81526004016104469061279d565b3361125a8160008761124b88611a22565b61125488611a22565b876116c3565b60008481526002602090815260408083206001600160a01b03891684529091528120805485929061128c908490612802565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461060981600087878787611a7b565b6112f4610861565b156113345760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610446565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861104a3390565b60006109bc8383611b45565b6000610485825490565b60008281526020819052604090206001015461139b8133610f34565b61063283836118a0565b6001600160a01b0384166113cb5760405162461bcd60e51b815260040161044690612626565b336113db81878761124b88611a22565b60008481526002602090815260408083206001600160a01b038a1684529091529020548381101561141e5760405162461bcd60e51b81526004016104469061270b565b60008581526002602090815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061145d908490612802565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46114bd828888888888611a7b565b50505050505050565b6001600160a01b0383166114ec5760405162461bcd60e51b81526004016104469061266b565b3361151b818560006114fd87611a22565b61150687611a22565b604051806020016040528060008152506116c3565b60008381526002602090815260408083206001600160a01b03881684529091529020548281101561155e5760405162461bcd60e51b815260040161044690612599565b60008481526002602090815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6115d582826109c3565b610b83576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561160b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600081815260018301602052604081205461169657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610474565b506000610474565b60006001600160e01b03198216635a05180f60e01b1480610485575061048582611b7d565b610f14868686868686611bb2565b6001600160a01b0384163b15610f145760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611715908990899088908890889060040161245a565b602060405180830381600087803b15801561172f57600080fd5b505af192505050801561175f575060408051601f3d908101601f1916820190925261175c91810190612363565b60015b61180c5761176b612942565b806308c379a014156117a55750611780612959565b8061178b57506117a7565b8060405162461bcd60e51b8152600401610446919061253e565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610446565b6001600160e01b0319811663bc197c8160e01b146114bd5760405162461bcd60e51b815260040161044690612551565b61184682826109c3565b610b835761185e816001600160a01b03166014611c1c565b611869836020611c1c565b60405160200161187a9291906123e5565b60408051601f198184030181529082905262461bcd60e51b82526104469160040161253e565b6118aa82826109c3565b15610b83576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008181526001830160205260408120548015611a18576000611929600183612839565b855490915060009061193d90600190612839565b90508181146119be57600086600001828154811061196b57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061199c57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b85548690806119dd57634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610474565b6000915050610474565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611a6a57634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b15610f145760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611abf90899089908890889088906004016124b8565b602060405180830381600087803b158015611ad957600080fd5b505af1925050508015611b09575060408051601f3d908101601f19168201909252611b0691810190612363565b60015b611b155761176b612942565b6001600160e01b0319811663f23a6e6160e01b146114bd5760405162461bcd60e51b815260040161044690612551565b6000826000018281548110611b6a57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b60006001600160e01b03198216637965db0b60e01b148061048557506301ffc9a760e01b6001600160e01b0319831614610485565b611bba610861565b15610f145760405162461bcd60e51b815260206004820152602c60248201527f455243313135355061757361626c653a20746f6b656e207472616e736665722060448201526b1dda1a5b19481c185d5cd95960a21b6064820152608401610446565b60606000611c2b83600261281a565b611c36906002612802565b67ffffffffffffffff811115611c5c57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c86576020820181803683370190505b509050600360fc1b81600081518110611caf57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611cec57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611d1084600261281a565b611d1b906001612802565b90505b6001811115611daf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611d5d57634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110611d8157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611da88161287c565b9050611d1e565b5083156109bc5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610446565b80356001600160a01b038116811461048857600080fd5b600082601f830112611e25578081fd5b81356020611e32826127de565b604051611e3f82826128ce565b8381528281019150858301600585901b87018401881015611e5e578586fd5b855b85811015611e7c57813584529284019290840190600101611e60565b5090979650505050505050565b600082601f830112611e99578081fd5b813567ffffffffffffffff811115611eb357611eb361292c565b604051611eca601f8301601f1916602001826128ce565b818152846020838601011115611ede578283fd5b816020850160208301379081016020019190915292915050565b60008060408385031215611f0a578182fd5b611f1383611dfe565b9150611f2160208401611dfe565b90509250929050565b600080600080600060a08688031215611f41578081fd5b611f4a86611dfe565b9450611f5860208701611dfe565b9350604086013567ffffffffffffffff80821115611f74578283fd5b611f8089838a01611e15565b94506060880135915080821115611f95578283fd5b611fa189838a01611e15565b93506080880135915080821115611fb6578283fd5b50611fc388828901611e89565b9150509295509295909350565b600080600080600060a08688031215611fe7578081fd5b611ff086611dfe565b9450611ffe60208701611dfe565b93506040860135925060608601359150608086013567ffffffffffffffff811115612027578182fd5b611fc388828901611e89565b600080600060608486031215612047578283fd5b61205084611dfe565b9250602084013567ffffffffffffffff8082111561206c578384fd5b61207887838801611e15565b9350604086013591508082111561208d578283fd5b5061209a86828701611e15565b9150509250925092565b600080600080608085870312156120b9578384fd5b6120c285611dfe565b9350602085013567ffffffffffffffff808211156120de578485fd5b6120ea88838901611e15565b945060408701359150808211156120ff578384fd5b61210b88838901611e15565b93506060870135915080821115612120578283fd5b5061212d87828801611e89565b91505092959194509250565b6000806040838503121561214b578182fd5b61215483611dfe565b915060208301358015158114612168578182fd5b809150509250929050565b60008060408385031215612185578182fd5b61218e83611dfe565b946020939093013593505050565b6000806000606084860312156121b0578081fd5b6121b984611dfe565b95602085013595506040909401359392505050565b600080600080608085870312156121e3578182fd5b6121ec85611dfe565b93506020850135925060408501359150606085013567ffffffffffffffff811115612215578182fd5b61212d87828801611e89565b60008060408385031215612233578182fd5b823567ffffffffffffffff8082111561224a578384fd5b818501915085601f83011261225d578384fd5b8135602061226a826127de565b60405161227782826128ce565b8381528281019150858301600585901b870184018b1015612296578889fd5b8896505b848710156122bf576122ab81611dfe565b83526001969096019591830191830161229a565b50965050860135925050808211156122d5578283fd5b506122e285828601611e15565b9150509250929050565b6000602082840312156122fd578081fd5b5035919050565b60008060408385031215612316578182fd5b82359150611f2160208401611dfe565b60008060408385031215612338578182fd5b50508035926020909101359150565b600060208284031215612358578081fd5b81356109bc816129eb565b600060208284031215612374578081fd5b81516109bc816129eb565b6000815180845260208085019450808401835b838110156123ae57815187529582019590820190600101612392565b509495945050505050565b600081518084526123d1816020860160208601612850565b601f01601f19169290920160200192915050565b60007f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008252835161241d816017850160208801612850565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161244e816028840160208801612850565b01602801949350505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906124869083018661237f565b8281036060840152612498818661237f565b905082810360808401526124ac81856123b9565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906124f2908301846123b9565b979650505050505050565b6000602082526109bc602083018461237f565b600060408252612523604083018561237f565b8281036020840152612535818561237f565b95945050505050565b6000602082526109bc60208301846123b9565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526038908201527f455243313135355072657365744d696e7465725061757365723a206d7573742060408201527f68617665206d696e74657220726f6c6520746f206d696e740000000000000000606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b600067ffffffffffffffff8211156127f8576127f861292c565b5060051b60200190565b6000821982111561281557612815612916565b500190565b600081600019048311821515161561283457612834612916565b500290565b60008282101561284b5761284b612916565b500390565b60005b8381101561286b578181015183820152602001612853565b838111156105735750506000910152565b60008161288b5761288b612916565b506000190190565b600181811c908216806128a757607f821691505b602082108114156128c857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff811182821017156128f4576128f461292c565b6040525050565b600060001982141561290f5761290f612916565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561086857600481823e5160e01c90565b600060443d101561296957610868565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561299b575050505050610868565b82850191508151818111156129b557505050505050610868565b843d87010160208285010111156129d157505050505050610868565b6129e0602082860101876128ce565b509094505050505090565b6001600160e01b031981168114612a0157600080fd5b5056fea2646970667358221220060dba8a5818696e0f5d911225cc590120dc203aec666c59c2a67d5b30ecb68464736f6c63430008030033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101725760003560e01c8063731133e9116100de578063ca15c87311610097578063e63ab1e911610071578063e63ab1e914610355578063e985e9c51461037c578063f242432a146103b8578063f5298aca146103cb57610172565b8063ca15c87314610308578063d53913931461031b578063d547741f1461034257610172565b8063731133e9146102945780638456cb59146102a75780639010d07c146102af57806391d14854146102da578063a217fddf146102ed578063a22cb465146102f557610172565b80632f2ff15d116101305780632f2ff15d1461022b57806336568abe1461023e5780633f4ba83a146102515780634e1273f4146102595780635c975abb146102795780636b20c4541461028157610172565b8062fdd58e1461017757806301ffc9a71461019d5780630e89341c146101c05780631f7fdffa146101e0578063248a9ca3146101f55780632eb2c2d614610218575b600080fd5b61018a610185366004612173565b6103de565b6040519081526020015b60405180910390f35b6101b06101ab366004612347565b61047a565b6040519015158152602001610194565b6101d36101ce3660046122ec565b61048d565b604051610194919061253e565b6101f36101ee3660046120a4565b610521565b005b61018a6102033660046122ec565b60009081526020819052604090206001015490565b6101f3610226366004611f2a565b610579565b6101f3610239366004612304565b610610565b6101f361024c366004612304565b610637565b6101f3610659565b61026c610267366004612221565b6106ff565b60405161019491906124fd565b6101b0610861565b6101f361028f366004612033565b61086b565b6101f36102a23660046121ce565b6108ae565b6101f3610900565b6102c26102bd366004612326565b6109a4565b6040516001600160a01b039091168152602001610194565b6101b06102e8366004612304565b6109c3565b61018a600081565b6101f3610303366004612139565b6109ec565b61018a6103163660046122ec565b610ad0565b61018a7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6101f3610350366004612304565b610ae7565b61018a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6101b061038a366004611ef8565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b6101f36103c6366004611fd0565b610af1565b6101f36103d936600461219c565b610b36565b60006001600160a01b03831661044f5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b5060008181526002602090815260408083206001600160a01b03861684529091529020545b92915050565b600061048582610b9c565b90505b919050565b60606004805461049c90612893565b80601f01602080910402602001604051908101604052809291908181526020018280546104c890612893565b80156105155780601f106104ea57610100808354040283529160200191610515565b820191906000526020600020905b8154815290600101906020018083116104f857829003601f168201915b50505050509050919050565b61054b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336102e8565b6105675760405162461bcd60e51b8152600401610446906126ae565b61057384848484610bdc565b50505050565b6001600160a01b0385163314806105955750610595853361038a565b6105fc5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610446565b6106098585858585610d53565b5050505050565b61061a8282610f1c565b60008281526001602052604090206106329082610b87565b505050565b6106418282610f43565b60008281526001602052604090206106329082610fbd565b6106837f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a336102e8565b6106f55760405162461bcd60e51b815260206004820152603b60248201527f455243313135355072657365744d696e7465725061757365723a206d7573742060448201527f686176652070617573657220726f6c6520746f20756e706175736500000000006064820152608401610446565b6106fd610fd2565b565b606081518351146107645760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610446565b6000835167ffffffffffffffff81111561078e57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156107b7578160200160208202803683370190505b50905060005b84518110156108595761081e8582815181106107e957634e487b7160e01b600052603260045260246000fd5b602002602001015185838151811061081157634e487b7160e01b600052603260045260246000fd5b60200260200101516103de565b82828151811061083e57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152610852816128fb565b90506107bd565b509392505050565b60055460ff165b90565b6001600160a01b0383163314806108875750610887833361038a565b6108a35760405162461bcd60e51b8152600401610446906125dd565b610632838383611067565b6108d87f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336102e8565b6108f45760405162461bcd60e51b8152600401610446906126ae565b61057384848484611214565b61092a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a336102e8565b61099c5760405162461bcd60e51b815260206004820152603960248201527f455243313135355072657365744d696e7465725061757365723a206d7573742060448201527f686176652070617573657220726f6c6520746f207061757365000000000000006064820152608401610446565b6106fd6112ec565b60008281526001602052604081206109bc9083611369565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b336001600160a01b0383161415610a575760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610446565b3360008181526003602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ac4911515815260200190565b60405180910390a35050565b600081815260016020526040812061048590611375565b610641828261137f565b6001600160a01b038516331480610b0d5750610b0d853361038a565b610b295760405162461bcd60e51b8152600401610446906125dd565b61060985858585856113a5565b6001600160a01b038316331480610b525750610b52833361038a565b610b6e5760405162461bcd60e51b8152600401610446906125dd565b6106328383836114c6565b610b8382826115cb565b5050565b60006109bc836001600160a01b03841661164f565b60006001600160e01b03198216636cdb3d1360e11b1480610bcd57506001600160e01b031982166303a24d0760e21b145b8061048557506104858261169e565b6001600160a01b038416610c025760405162461bcd60e51b81526004016104469061279d565b8151835114610c235760405162461bcd60e51b815260040161044690612755565b33610c33816000878787876116c3565b60005b8451811015610ceb57838181518110610c5f57634e487b7160e01b600052603260045260246000fd5b602002602001015160026000878481518110610c8b57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610cd39190612802565b90915550819050610ce3816128fb565b915050610c36565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610d3c929190612510565b60405180910390a4610609816000878787876116d1565b8151835114610d745760405162461bcd60e51b815260040161044690612755565b6001600160a01b038416610d9a5760405162461bcd60e51b815260040161044690612626565b33610da98187878787876116c3565b60005b8451811015610eae576000858281518110610dd757634e487b7160e01b600052603260045260246000fd5b602002602001015190506000858381518110610e0357634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008481526002835260408082206001600160a01b038e168352909352919091205490915081811015610e545760405162461bcd60e51b81526004016104469061270b565b60008381526002602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610e93908490612802565b9250508190555050505080610ea7906128fb565b9050610dac565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610efe929190612510565b60405180910390a4610f148187878787876116d1565b505050505050565b600082815260208190526040902060010154610f3981335b61183c565b61063283836115cb565b6001600160a01b0381163314610fb35760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610446565b610b8382826118a0565b60006109bc836001600160a01b038416611905565b610fda610861565b61101d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610446565b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b03831661108d5760405162461bcd60e51b81526004016104469061266b565b80518251146110ae5760405162461bcd60e51b815260040161044690612755565b60003390506110d1818560008686604051806020016040528060008152506116c3565b60005b83518110156111b55760008482815181106110ff57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600084838151811061112b57634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008481526002835260408082206001600160a01b038c16835290935291909120549091508181101561117c5760405162461bcd60e51b815260040161044690612599565b60009283526002602090815260408085206001600160a01b038b16865290915290922091039055806111ad816128fb565b9150506110d4565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611206929190612510565b60405180910390a450505050565b6001600160a01b03841661123a5760405162461bcd60e51b81526004016104469061279d565b3361125a8160008761124b88611a22565b61125488611a22565b876116c3565b60008481526002602090815260408083206001600160a01b03891684529091528120805485929061128c908490612802565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461060981600087878787611a7b565b6112f4610861565b156113345760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610446565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861104a3390565b60006109bc8383611b45565b6000610485825490565b60008281526020819052604090206001015461139b8133610f34565b61063283836118a0565b6001600160a01b0384166113cb5760405162461bcd60e51b815260040161044690612626565b336113db81878761124b88611a22565b60008481526002602090815260408083206001600160a01b038a1684529091529020548381101561141e5760405162461bcd60e51b81526004016104469061270b565b60008581526002602090815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061145d908490612802565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46114bd828888888888611a7b565b50505050505050565b6001600160a01b0383166114ec5760405162461bcd60e51b81526004016104469061266b565b3361151b818560006114fd87611a22565b61150687611a22565b604051806020016040528060008152506116c3565b60008381526002602090815260408083206001600160a01b03881684529091529020548281101561155e5760405162461bcd60e51b815260040161044690612599565b60008481526002602090815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6115d582826109c3565b610b83576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561160b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600081815260018301602052604081205461169657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610474565b506000610474565b60006001600160e01b03198216635a05180f60e01b1480610485575061048582611b7d565b610f14868686868686611bb2565b6001600160a01b0384163b15610f145760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611715908990899088908890889060040161245a565b602060405180830381600087803b15801561172f57600080fd5b505af192505050801561175f575060408051601f3d908101601f1916820190925261175c91810190612363565b60015b61180c5761176b612942565b806308c379a014156117a55750611780612959565b8061178b57506117a7565b8060405162461bcd60e51b8152600401610446919061253e565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610446565b6001600160e01b0319811663bc197c8160e01b146114bd5760405162461bcd60e51b815260040161044690612551565b61184682826109c3565b610b835761185e816001600160a01b03166014611c1c565b611869836020611c1c565b60405160200161187a9291906123e5565b60408051601f198184030181529082905262461bcd60e51b82526104469160040161253e565b6118aa82826109c3565b15610b83576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008181526001830160205260408120548015611a18576000611929600183612839565b855490915060009061193d90600190612839565b90508181146119be57600086600001828154811061196b57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061199c57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b85548690806119dd57634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610474565b6000915050610474565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611a6a57634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b15610f145760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611abf90899089908890889088906004016124b8565b602060405180830381600087803b158015611ad957600080fd5b505af1925050508015611b09575060408051601f3d908101601f19168201909252611b0691810190612363565b60015b611b155761176b612942565b6001600160e01b0319811663f23a6e6160e01b146114bd5760405162461bcd60e51b815260040161044690612551565b6000826000018281548110611b6a57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b60006001600160e01b03198216637965db0b60e01b148061048557506301ffc9a760e01b6001600160e01b0319831614610485565b611bba610861565b15610f145760405162461bcd60e51b815260206004820152602c60248201527f455243313135355061757361626c653a20746f6b656e207472616e736665722060448201526b1dda1a5b19481c185d5cd95960a21b6064820152608401610446565b60606000611c2b83600261281a565b611c36906002612802565b67ffffffffffffffff811115611c5c57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c86576020820181803683370190505b509050600360fc1b81600081518110611caf57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611cec57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611d1084600261281a565b611d1b906001612802565b90505b6001811115611daf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611d5d57634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110611d8157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611da88161287c565b9050611d1e565b5083156109bc5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610446565b80356001600160a01b038116811461048857600080fd5b600082601f830112611e25578081fd5b81356020611e32826127de565b604051611e3f82826128ce565b8381528281019150858301600585901b87018401881015611e5e578586fd5b855b85811015611e7c57813584529284019290840190600101611e60565b5090979650505050505050565b600082601f830112611e99578081fd5b813567ffffffffffffffff811115611eb357611eb361292c565b604051611eca601f8301601f1916602001826128ce565b818152846020838601011115611ede578283fd5b816020850160208301379081016020019190915292915050565b60008060408385031215611f0a578182fd5b611f1383611dfe565b9150611f2160208401611dfe565b90509250929050565b600080600080600060a08688031215611f41578081fd5b611f4a86611dfe565b9450611f5860208701611dfe565b9350604086013567ffffffffffffffff80821115611f74578283fd5b611f8089838a01611e15565b94506060880135915080821115611f95578283fd5b611fa189838a01611e15565b93506080880135915080821115611fb6578283fd5b50611fc388828901611e89565b9150509295509295909350565b600080600080600060a08688031215611fe7578081fd5b611ff086611dfe565b9450611ffe60208701611dfe565b93506040860135925060608601359150608086013567ffffffffffffffff811115612027578182fd5b611fc388828901611e89565b600080600060608486031215612047578283fd5b61205084611dfe565b9250602084013567ffffffffffffffff8082111561206c578384fd5b61207887838801611e15565b9350604086013591508082111561208d578283fd5b5061209a86828701611e15565b9150509250925092565b600080600080608085870312156120b9578384fd5b6120c285611dfe565b9350602085013567ffffffffffffffff808211156120de578485fd5b6120ea88838901611e15565b945060408701359150808211156120ff578384fd5b61210b88838901611e15565b93506060870135915080821115612120578283fd5b5061212d87828801611e89565b91505092959194509250565b6000806040838503121561214b578182fd5b61215483611dfe565b915060208301358015158114612168578182fd5b809150509250929050565b60008060408385031215612185578182fd5b61218e83611dfe565b946020939093013593505050565b6000806000606084860312156121b0578081fd5b6121b984611dfe565b95602085013595506040909401359392505050565b600080600080608085870312156121e3578182fd5b6121ec85611dfe565b93506020850135925060408501359150606085013567ffffffffffffffff811115612215578182fd5b61212d87828801611e89565b60008060408385031215612233578182fd5b823567ffffffffffffffff8082111561224a578384fd5b818501915085601f83011261225d578384fd5b8135602061226a826127de565b60405161227782826128ce565b8381528281019150858301600585901b870184018b1015612296578889fd5b8896505b848710156122bf576122ab81611dfe565b83526001969096019591830191830161229a565b50965050860135925050808211156122d5578283fd5b506122e285828601611e15565b9150509250929050565b6000602082840312156122fd578081fd5b5035919050565b60008060408385031215612316578182fd5b82359150611f2160208401611dfe565b60008060408385031215612338578182fd5b50508035926020909101359150565b600060208284031215612358578081fd5b81356109bc816129eb565b600060208284031215612374578081fd5b81516109bc816129eb565b6000815180845260208085019450808401835b838110156123ae57815187529582019590820190600101612392565b509495945050505050565b600081518084526123d1816020860160208601612850565b601f01601f19169290920160200192915050565b60007f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008252835161241d816017850160208801612850565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161244e816028840160208801612850565b01602801949350505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906124869083018661237f565b8281036060840152612498818661237f565b905082810360808401526124ac81856123b9565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906124f2908301846123b9565b979650505050505050565b6000602082526109bc602083018461237f565b600060408252612523604083018561237f565b8281036020840152612535818561237f565b95945050505050565b6000602082526109bc60208301846123b9565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526038908201527f455243313135355072657365744d696e7465725061757365723a206d7573742060408201527f68617665206d696e74657220726f6c6520746f206d696e740000000000000000606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b600067ffffffffffffffff8211156127f8576127f861292c565b5060051b60200190565b6000821982111561281557612815612916565b500190565b600081600019048311821515161561283457612834612916565b500290565b60008282101561284b5761284b612916565b500390565b60005b8381101561286b578181015183820152602001612853565b838111156105735750506000910152565b60008161288b5761288b612916565b506000190190565b600181811c908216806128a757607f821691505b602082108114156128c857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff811182821017156128f4576128f461292c565b6040525050565b600060001982141561290f5761290f612916565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561086857600481823e5160e01c90565b600060443d101561296957610868565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561299b575050505050610868565b82850191508151818111156129b557505050505050610868565b843d87010160208285010111156129d157505050505050610868565b6129e0602082860101876128ce565b509094505050505090565b6001600160e01b031981168114612a0157600080fd5b5056fea2646970667358221220060dba8a5818696e0f5d911225cc590120dc203aec666c59c2a67d5b30ecb68464736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC1155Receiver.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC1155Receiver.json
new file mode 100644
index 0000000..06e7d48
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC1155Receiver.json
@@ -0,0 +1,108 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC1155Receiver",
+ "sourceName": "contracts/token/ERC1155/utils/ERC1155Receiver.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "onERC1155BatchReceived",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "",
+ "type": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "id",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "onERC1155Received",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "",
+ "type": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC1155Supply.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC1155Supply.json
new file mode 100644
index 0000000..fae95c6
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC1155Supply.json
@@ -0,0 +1,361 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC1155Supply",
+ "sourceName": "contracts/token/ERC1155/extensions/ERC1155Supply.sol",
+ "abi": [
+ {
+ "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": "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"
+ },
+ {
+ "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": [
+ {
+ "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": "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": "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": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "uri",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC165.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC165.json
new file mode 100644
index 0000000..e1bfd6b
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC165.json
@@ -0,0 +1,30 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC165",
+ "sourceName": "contracts/utils/introspection/ERC165.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC165Checker.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC165Checker.json
new file mode 100644
index 0000000..dfb891a
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC165Checker.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC165Checker",
+ "sourceName": "contracts/utils/introspection/ERC165Checker.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b16df9544b1b49a0e0005585f40edd90ad0aba9b56b18712e63d5f4566ccba1a64736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b16df9544b1b49a0e0005585f40edd90ad0aba9b56b18712e63d5f4566ccba1a64736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC165Storage.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC165Storage.json
new file mode 100644
index 0000000..73e465a
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC165Storage.json
@@ -0,0 +1,30 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC165Storage",
+ "sourceName": "contracts/utils/introspection/ERC165Storage.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC1820Implementer.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC1820Implementer.json
new file mode 100644
index 0000000..c4cb99a
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC1820Implementer.json
@@ -0,0 +1,35 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC1820Implementer",
+ "sourceName": "contracts/utils/introspection/ERC1820Implementer.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "interfaceHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "canImplementInterfaceForAddress",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x608060405234801561001057600080fd5b50610112806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063249cb3fa14602d575b600080fd5b603c603836600460a4565b604e565b60405190815260200160405180910390f35b6000828152602081815260408083206001600160a01b038516845290915281205460ff16607b576000609d565b7fa2ef4600d742022d532d4747cb3547474667d6f13804902513b2ec01c848f4b45b9392505050565b6000806040838503121560b5578182fd5b8235915060208301356001600160a01b038116811460d1578182fd5b80915050925092905056fea26469706673582212204632c1ec3802d05d61ae8523ec72aef2d74c909d2807e5511841a201a52fc3b864736f6c63430008030033",
+ "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063249cb3fa14602d575b600080fd5b603c603836600460a4565b604e565b60405190815260200160405180910390f35b6000828152602081815260408083206001600160a01b038516845290915281205460ff16607b576000609d565b7fa2ef4600d742022d532d4747cb3547474667d6f13804902513b2ec01c848f4b45b9392505050565b6000806040838503121560b5578182fd5b8235915060208301356001600160a01b038116811460d1578182fd5b80915050925092905056fea26469706673582212204632c1ec3802d05d61ae8523ec72aef2d74c909d2807e5511841a201a52fc3b864736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC1967Proxy.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC1967Proxy.json
new file mode 100644
index 0000000..0197773
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC1967Proxy.json
@@ -0,0 +1,80 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC1967Proxy",
+ "sourceName": "contracts/proxy/ERC1967/ERC1967Proxy.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_logic",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "previousAdmin",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "newAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "AdminChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "beacon",
+ "type": "address"
+ }
+ ],
+ "name": "BeaconUpgraded",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "implementation",
+ "type": "address"
+ }
+ ],
+ "name": "Upgraded",
+ "type": "event"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "fallback"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "receive"
+ }
+ ],
+ "bytecode": "0x608060405260405161077e38038061077e83398101604081905261002291610303565b61004d60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61041b565b6000805160206107378339815191521461007757634e487b7160e01b600052600160045260246000fd5b6100838282600061008a565b5050610480565b610093836100c0565b6000825111806100a05750805b156100bb576100b9838361010060201b6100291760201c565b505b505050565b6100c98161012c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606101258383604051806060016040528060278152602001610757602791396101ec565b9392505050565b61013f816102c160201b6100551760201c565b6101a65760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101cb60008051602061073783398151915260001b6102c760201b61005b1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060833b61024b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161019d565b600080856001600160a01b03168560405161026691906103cc565b600060405180830381855af49150503d80600081146102a1576040519150601f19603f3d011682016040523d82523d6000602084013e6102a6565b606091505b5090925090506102b78282866102ca565b9695505050505050565b3b151590565b90565b606083156102d9575081610125565b8251156102e95782518084602001fd5b8160405162461bcd60e51b815260040161019d91906103e8565b60008060408385031215610315578182fd5b82516001600160a01b038116811461032b578283fd5b60208401519092506001600160401b0380821115610347578283fd5b818501915085601f83011261035a578283fd5b81518181111561036c5761036c61046a565b604051601f8201601f19908116603f011681019083821181831017156103945761039461046a565b816040528281528860208487010111156103ac578586fd5b6103bd83602083016020880161043e565b80955050505050509250929050565b600082516103de81846020870161043e565b9190910192915050565b600060208252825180602084015261040781604085016020870161043e565b601f01601f19169190910160400192915050565b60008282101561043957634e487b7160e01b81526011600452602481fd5b500390565b60005b83811015610459578181015183820152602001610441565b838111156100b95750506000910152565b634e487b7160e01b600052604160045260246000fd5b6102a88061048f6000396000f3fe60806040523661001357610011610017565b005b6100115b61002761002261005e565b610096565b565b606061004e838360405180606001604052806027815260200161024c602791396100ba565b9392505050565b3b151590565b90565b60006100917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100b5573d6000f35b3d6000fd5b6060833b61011e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b03168560405161013991906101cc565b600060405180830381855af49150503d8060008114610174576040519150601f19603f3d011682016040523d82523d6000602084013e610179565b606091505b5091509150610189828286610193565b9695505050505050565b606083156101a257508161004e565b8251156101b25782518084602001fd5b8160405162461bcd60e51b815260040161011591906101e8565b600082516101de81846020870161021b565b9190910192915050565b600060208252825180602084015261020781604085016020870161021b565b601f01601f19169190910160400192915050565b60005b8381101561023657818101518382015260200161021e565b83811115610245576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122045a655e4377b466c772d0002c84619390141d500175e10ed25cf2bf57537dfc564736f6c63430008030033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564",
+ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b61002761002261005e565b610096565b565b606061004e838360405180606001604052806027815260200161024c602791396100ba565b9392505050565b3b151590565b90565b60006100917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100b5573d6000f35b3d6000fd5b6060833b61011e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b03168560405161013991906101cc565b600060405180830381855af49150503d8060008114610174576040519150601f19603f3d011682016040523d82523d6000602084013e610179565b606091505b5091509150610189828286610193565b9695505050505050565b606083156101a257508161004e565b8251156101b25782518084602001fd5b8160405162461bcd60e51b815260040161011591906101e8565b600082516101de81846020870161021b565b9190910192915050565b600060208252825180602084015261020781604085016020870161021b565b601f01601f19169190910160400192915050565b60005b8381101561023657818101518382015260200161021e565b83811115610245576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122045a655e4377b466c772d0002c84619390141d500175e10ed25cf2bf57537dfc564736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC1967Upgrade.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC1967Upgrade.json
new file mode 100644
index 0000000..b827aab
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC1967Upgrade.json
@@ -0,0 +1,56 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC1967Upgrade",
+ "sourceName": "contracts/proxy/ERC1967/ERC1967Upgrade.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "previousAdmin",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "newAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "AdminChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "beacon",
+ "type": "address"
+ }
+ ],
+ "name": "BeaconUpgraded",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "implementation",
+ "type": "address"
+ }
+ ],
+ "name": "Upgraded",
+ "type": "event"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC20.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC20.json
new file mode 100644
index 0000000..1c0372d
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC20.json
@@ -0,0 +1,297 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC20",
+ "sourceName": "contracts/token/ERC20/ERC20.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name_",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol_",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "addedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "increaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x60806040523480156200001157600080fd5b5060405162000b4b38038062000b4b8339810160408190526200003491620001c1565b81516200004990600390602085019062000068565b5080516200005f90600490602084019062000068565b5050506200027b565b828054620000769062000228565b90600052602060002090601f0160209004810192826200009a5760008555620000e5565b82601f10620000b557805160ff1916838001178555620000e5565b82800160010185558215620000e5579182015b82811115620000e5578251825591602001919060010190620000c8565b50620000f3929150620000f7565b5090565b5b80821115620000f35760008155600101620000f8565b600082601f8301126200011f578081fd5b81516001600160401b03808211156200013c576200013c62000265565b604051601f8301601f19908116603f0116810190828211818310171562000167576200016762000265565b8160405283815260209250868385880101111562000183578485fd5b8491505b83821015620001a6578582018301518183018401529082019062000187565b83821115620001b757848385830101525b9695505050505050565b60008060408385031215620001d4578182fd5b82516001600160401b0380821115620001eb578384fd5b620001f9868387016200010e565b935060208501519150808211156200020f578283fd5b506200021e858286016200010e565b9150509250929050565b600181811c908216806200023d57607f821691505b602082108114156200025f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6108c0806200028b6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b4114610149578063a457c2d714610151578063a9059cbb14610164578063dd62ed3e14610177576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101b0565b6040516100c391906107d8565b60405180910390f35b6100df6100da3660046107af565b610242565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610774565b610258565b604051601281526020016100c3565b6100df6101313660046107af565b610307565b6100f3610144366004610721565b610343565b6100b6610362565b6100df61015f3660046107af565b610371565b6100df6101723660046107af565b61040a565b6100f3610185366004610742565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101bf9061084f565b80601f01602080910402602001604051908101604052809291908181526020018280546101eb9061084f565b80156102385780601f1061020d57610100808354040283529160200191610238565b820191906000526020600020905b81548152906001019060200180831161021b57829003601f168201915b5050505050905090565b600061024f338484610417565b50600192915050565b600061026584848461053b565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156102ef5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6102fc8533858403610417565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161024f91859061033e90869061082b565b610417565b6001600160a01b0381166000908152602081905260409020545b919050565b6060600480546101bf9061084f565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156103f35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016102e6565b6104003385858403610417565b5060019392505050565b600061024f33848461053b565b6001600160a01b0383166104795760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016102e6565b6001600160a01b0382166104da5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016102e6565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016102e6565b6001600160a01b0382166106015760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016102e6565b6001600160a01b038316600090815260208190526040902054818110156106795760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016102e6565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906106b090849061082b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106fc91815260200190565b60405180910390a350505050565b80356001600160a01b038116811461035d57600080fd5b600060208284031215610732578081fd5b61073b8261070a565b9392505050565b60008060408385031215610754578081fd5b61075d8361070a565b915061076b6020840161070a565b90509250929050565b600080600060608486031215610788578081fd5b6107918461070a565b925061079f6020850161070a565b9150604084013590509250925092565b600080604083850312156107c1578182fd5b6107ca8361070a565b946020939093013593505050565b6000602080835283518082850152825b81811015610804578581018301518582016040015282016107e8565b818111156108155783604083870101525b50601f01601f1916929092016040019392505050565b6000821982111561084a57634e487b7160e01b81526011600452602481fd5b500190565b600181811c9082168061086357607f821691505b6020821081141561088457634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220d5fe2a4e17ce9d022007f408350bf2342a192449074b95d77ad2ccae63966f1064736f6c63430008030033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b4114610149578063a457c2d714610151578063a9059cbb14610164578063dd62ed3e14610177576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101b0565b6040516100c391906107d8565b60405180910390f35b6100df6100da3660046107af565b610242565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610774565b610258565b604051601281526020016100c3565b6100df6101313660046107af565b610307565b6100f3610144366004610721565b610343565b6100b6610362565b6100df61015f3660046107af565b610371565b6100df6101723660046107af565b61040a565b6100f3610185366004610742565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101bf9061084f565b80601f01602080910402602001604051908101604052809291908181526020018280546101eb9061084f565b80156102385780601f1061020d57610100808354040283529160200191610238565b820191906000526020600020905b81548152906001019060200180831161021b57829003601f168201915b5050505050905090565b600061024f338484610417565b50600192915050565b600061026584848461053b565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156102ef5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6102fc8533858403610417565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161024f91859061033e90869061082b565b610417565b6001600160a01b0381166000908152602081905260409020545b919050565b6060600480546101bf9061084f565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156103f35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016102e6565b6104003385858403610417565b5060019392505050565b600061024f33848461053b565b6001600160a01b0383166104795760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016102e6565b6001600160a01b0382166104da5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016102e6565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016102e6565b6001600160a01b0382166106015760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016102e6565b6001600160a01b038316600090815260208190526040902054818110156106795760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016102e6565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906106b090849061082b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106fc91815260200190565b60405180910390a350505050565b80356001600160a01b038116811461035d57600080fd5b600060208284031215610732578081fd5b61073b8261070a565b9392505050565b60008060408385031215610754578081fd5b61075d8361070a565b915061076b6020840161070a565b90509250929050565b600080600060608486031215610788578081fd5b6107918461070a565b925061079f6020850161070a565b9150604084013590509250925092565b600080604083850312156107c1578182fd5b6107ca8361070a565b946020939093013593505050565b6000602080835283518082850152825b81811015610804578581018301518582016040015282016107e8565b818111156108155783604083870101525b50601f01601f1916929092016040019392505050565b6000821982111561084a57634e487b7160e01b81526011600452602481fd5b500190565b600181811c9082168061086357607f821691505b6020821081141561088457634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220d5fe2a4e17ce9d022007f408350bf2342a192449074b95d77ad2ccae63966f1064736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC20Burnable.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC20Burnable.json
new file mode 100644
index 0000000..49d2977
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC20Burnable.json
@@ -0,0 +1,312 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC20Burnable",
+ "sourceName": "contracts/token/ERC20/extensions/ERC20Burnable.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "burn",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "burnFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "addedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "increaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC20Capped.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC20Capped.json
new file mode 100644
index 0000000..6fb66c7
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC20Capped.json
@@ -0,0 +1,294 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC20Capped",
+ "sourceName": "contracts/token/ERC20/extensions/ERC20Capped.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "cap",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "addedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "increaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC20FlashMint.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC20FlashMint.json
new file mode 100644
index 0000000..0e9d871
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC20FlashMint.json
@@ -0,0 +1,358 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC20FlashMint",
+ "sourceName": "contracts/token/ERC20/extensions/ERC20FlashMint.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "flashFee",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC3156FlashBorrower",
+ "name": "receiver",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "flashLoan",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "addedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "increaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ }
+ ],
+ "name": "maxFlashLoan",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC20Pausable.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC20Pausable.json
new file mode 100644
index 0000000..5c4f6c6
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC20Pausable.json
@@ -0,0 +1,320 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC20Pausable",
+ "sourceName": "contracts/token/ERC20/extensions/ERC20Pausable.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "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": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "Unpaused",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "addedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "increaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "paused",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC20Permit.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC20Permit.json
new file mode 100644
index 0000000..02badac
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC20Permit.json
@@ -0,0 +1,356 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC20Permit",
+ "sourceName": "contracts/token/ERC20/extensions/draft-ERC20Permit.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "DOMAIN_SEPARATOR",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "addedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "increaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "nonces",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "permit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC20PresetFixedSupply.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC20PresetFixedSupply.json
new file mode 100644
index 0000000..fc507bf
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC20PresetFixedSupply.json
@@ -0,0 +1,338 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC20PresetFixedSupply",
+ "sourceName": "contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol",
+ "type": "string"
+ },
+ {
+ "internalType": "uint256",
+ "name": "initialSupply",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "burn",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "burnFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "addedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "increaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x60806040523480156200001157600080fd5b5060405162000f0438038062000f048339810160408190526200003491620002c3565b8351849084906200004d9060039060208501906200016a565b508051620000639060049060208401906200016a565b5050506200007881836200008260201b60201c565b50505050620003cc565b6001600160a01b038216620000dd5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000f1919062000354565b90915550506001600160a01b038216600090815260208190526040812080548392906200012090849062000354565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620001789062000379565b90600052602060002090601f0160209004810192826200019c5760008555620001e7565b82601f10620001b757805160ff1916838001178555620001e7565b82800160010185558215620001e7579182015b82811115620001e7578251825591602001919060010190620001ca565b50620001f5929150620001f9565b5090565b5b80821115620001f55760008155600101620001fa565b600082601f83011262000221578081fd5b81516001600160401b03808211156200023e576200023e620003b6565b604051601f8301601f19908116603f01168101908282118183101715620002695762000269620003b6565b8160405283815260209250868385880101111562000285578485fd5b8491505b83821015620002a8578582018301518183018401529082019062000289565b83821115620002b957848385830101525b9695505050505050565b60008060008060808587031215620002d9578384fd5b84516001600160401b0380821115620002f0578586fd5b620002fe8883890162000210565b9550602087015191508082111562000314578485fd5b50620003238782880162000210565b60408701516060880151919550935090506001600160a01b038116811462000349578182fd5b939692955090935050565b600082198211156200037457634e487b7160e01b81526011600452602481fd5b500190565b600181811c908216806200038e57607f821691505b60208210811415620003b057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b610b2880620003dc6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806342966c681161008c57806395d89b411161006657806395d89b4114610197578063a457c2d71461019f578063a9059cbb146101b2578063dd62ed3e146101c5576100cf565b806342966c681461015c57806370a082311461017157806379cc679014610184576100cf565b806306fdde03146100d4578063095ea7b3146100f257806318160ddd1461011557806323b872dd14610127578063313ce5671461013a5780633950935114610149575b600080fd5b6100dc6101fe565b6040516100e99190610a1f565b60405180910390f35b6101056101003660046109de565b610290565b60405190151581526020016100e9565b6002545b6040519081526020016100e9565b6101056101353660046109a3565b6102a6565b604051601281526020016100e9565b6101056101573660046109de565b610355565b61016f61016a366004610a07565b610391565b005b61011961017f366004610950565b61039e565b61016f6101923660046109de565b6103bd565b6100dc610443565b6101056101ad3660046109de565b610452565b6101056101c03660046109de565b6104eb565b6101196101d3366004610971565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606003805461020d90610aa1565b80601f016020809104026020016040519081016040528092919081815260200182805461023990610aa1565b80156102865780601f1061025b57610100808354040283529160200191610286565b820191906000526020600020905b81548152906001019060200180831161026957829003601f168201915b5050505050905090565b600061029d3384846104f8565b50600192915050565b60006102b384848461061c565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561033d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61034a85338584036104f8565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161029d91859061038c908690610a72565b6104f8565b61039b33826107eb565b50565b6001600160a01b0381166000908152602081905260409020545b919050565b60006103c983336101d3565b9050818110156104275760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604482015263616e636560e01b6064820152608401610334565b61043483338484036104f8565b61043e83836107eb565b505050565b60606004805461020d90610aa1565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156104d45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610334565b6104e133858584036104f8565b5060019392505050565b600061029d33848461061c565b6001600160a01b03831661055a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610334565b6001600160a01b0382166105bb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610334565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166106805760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610334565b6001600160a01b0382166106e25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610334565b6001600160a01b0383166000908152602081905260409020548181101561075a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610334565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610791908490610a72565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107dd91815260200190565b60405180910390a350505050565b6001600160a01b03821661084b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610334565b6001600160a01b038216600090815260208190526040902054818110156108bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610334565b6001600160a01b03831660009081526020819052604081208383039055600280548492906108ee908490610a8a565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361043e565b80356001600160a01b03811681146103b857600080fd5b600060208284031215610961578081fd5b61096a82610939565b9392505050565b60008060408385031215610983578081fd5b61098c83610939565b915061099a60208401610939565b90509250929050565b6000806000606084860312156109b7578081fd5b6109c084610939565b92506109ce60208501610939565b9150604084013590509250925092565b600080604083850312156109f0578182fd5b6109f983610939565b946020939093013593505050565b600060208284031215610a18578081fd5b5035919050565b6000602080835283518082850152825b81811015610a4b57858101830151858201604001528201610a2f565b81811115610a5c5783604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610a8557610a85610adc565b500190565b600082821015610a9c57610a9c610adc565b500390565b600181811c90821680610ab557607f821691505b60208210811415610ad657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea26469706673582212200c78bc7e539580fb43b4dda3de1c552a8b022d52444f540f93aaf59495067d5e64736f6c63430008030033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c806342966c681161008c57806395d89b411161006657806395d89b4114610197578063a457c2d71461019f578063a9059cbb146101b2578063dd62ed3e146101c5576100cf565b806342966c681461015c57806370a082311461017157806379cc679014610184576100cf565b806306fdde03146100d4578063095ea7b3146100f257806318160ddd1461011557806323b872dd14610127578063313ce5671461013a5780633950935114610149575b600080fd5b6100dc6101fe565b6040516100e99190610a1f565b60405180910390f35b6101056101003660046109de565b610290565b60405190151581526020016100e9565b6002545b6040519081526020016100e9565b6101056101353660046109a3565b6102a6565b604051601281526020016100e9565b6101056101573660046109de565b610355565b61016f61016a366004610a07565b610391565b005b61011961017f366004610950565b61039e565b61016f6101923660046109de565b6103bd565b6100dc610443565b6101056101ad3660046109de565b610452565b6101056101c03660046109de565b6104eb565b6101196101d3366004610971565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606003805461020d90610aa1565b80601f016020809104026020016040519081016040528092919081815260200182805461023990610aa1565b80156102865780601f1061025b57610100808354040283529160200191610286565b820191906000526020600020905b81548152906001019060200180831161026957829003601f168201915b5050505050905090565b600061029d3384846104f8565b50600192915050565b60006102b384848461061c565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561033d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61034a85338584036104f8565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161029d91859061038c908690610a72565b6104f8565b61039b33826107eb565b50565b6001600160a01b0381166000908152602081905260409020545b919050565b60006103c983336101d3565b9050818110156104275760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604482015263616e636560e01b6064820152608401610334565b61043483338484036104f8565b61043e83836107eb565b505050565b60606004805461020d90610aa1565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156104d45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610334565b6104e133858584036104f8565b5060019392505050565b600061029d33848461061c565b6001600160a01b03831661055a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610334565b6001600160a01b0382166105bb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610334565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166106805760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610334565b6001600160a01b0382166106e25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610334565b6001600160a01b0383166000908152602081905260409020548181101561075a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610334565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610791908490610a72565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107dd91815260200190565b60405180910390a350505050565b6001600160a01b03821661084b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610334565b6001600160a01b038216600090815260208190526040902054818110156108bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610334565b6001600160a01b03831660009081526020819052604081208383039055600280548492906108ee908490610a8a565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361043e565b80356001600160a01b03811681146103b857600080fd5b600060208284031215610961578081fd5b61096a82610939565b9392505050565b60008060408385031215610983578081fd5b61098c83610939565b915061099a60208401610939565b90509250929050565b6000806000606084860312156109b7578081fd5b6109c084610939565b92506109ce60208501610939565b9150604084013590509250925092565b600080604083850312156109f0578182fd5b6109f983610939565b946020939093013593505050565b600060208284031215610a18578081fd5b5035919050565b6000602080835283518082850152825b81811015610a4b57858101830151858201604001528201610a2f565b81811115610a5c5783604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610a8557610a85610adc565b500190565b600082821015610a9c57610a9c610adc565b500390565b600181811c90821680610ab557607f821691505b60208210811415610ad657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea26469706673582212200c78bc7e539580fb43b4dda3de1c552a8b022d52444f540f93aaf59495067d5e64736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC20PresetMinterPauser.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC20PresetMinterPauser.json
new file mode 100644
index 0000000..cf311d9
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC20PresetMinterPauser.json
@@ -0,0 +1,672 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC20PresetMinterPauser",
+ "sourceName": "contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "Paused",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "previousAdminRole",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "newAdminRole",
+ "type": "bytes32"
+ }
+ ],
+ "name": "RoleAdminChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "RoleGranted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "RoleRevoked",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "Unpaused",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "DEFAULT_ADMIN_ROLE",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "MINTER_ROLE",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "PAUSER_ROLE",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "burn",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "burnFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getRoleAdmin",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ }
+ ],
+ "name": "getRoleMember",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getRoleMemberCount",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "grantRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasRole",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "addedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "increaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "mint",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "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": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "renounceRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "revokeRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "unpause",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x60806040523480156200001157600080fd5b5060405162001e3938038062001e3983398101604081905262000034916200039c565b8151829082906200004d90600590602085019062000243565b5080516200006390600690602084019062000243565b50506007805460ff19169055506200007e6000335b620000de565b620000aa7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63362000078565b620000d67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3362000078565b505062000456565b620000f582826200012160201b620009ec1760201c565b60008281526001602090815260409091206200011c918390620009f662000131821b17901c565b505050565b6200012d828262000151565b5050565b600062000148836001600160a01b038416620001f1565b90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200012d576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001ad3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008181526001830160205260408120546200023a575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200014b565b5060006200014b565b828054620002519062000403565b90600052602060002090601f016020900481019282620002755760008555620002c0565b82601f106200029057805160ff1916838001178555620002c0565b82800160010185558215620002c0579182015b82811115620002c0578251825591602001919060010190620002a3565b50620002ce929150620002d2565b5090565b5b80821115620002ce5760008155600101620002d3565b600082601f830112620002fa578081fd5b81516001600160401b038082111562000317576200031762000440565b604051601f8301601f19908116603f0116810190828211818310171562000342576200034262000440565b816040528381526020925086838588010111156200035e578485fd5b8491505b8382101562000381578582018301518183018401529082019062000362565b838211156200039257848385830101525b9695505050505050565b60008060408385031215620003af578182fd5b82516001600160401b0380821115620003c6578384fd5b620003d486838701620002e9565b93506020850151915080821115620003ea578283fd5b50620003f985828601620002e9565b9150509250929050565b600181811c908216806200041857607f821691505b602082108114156200043a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6119d380620004666000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063a457c2d711610097578063d539139311610071578063d5391393146103af578063d547741f146103d6578063dd62ed3e146103e9578063e63ab1e914610422576101c4565b8063a457c2d714610376578063a9059cbb14610389578063ca15c8731461039c576101c4565b80639010d07c116100d35780639010d07c1461032857806391d148541461035357806395d89b4114610366578063a217fddf1461036e576101c4565b806370a08231146102e457806379cc67901461030d5780638456cb5914610320576101c4565b8063313ce567116101665780633f4ba83a116101405780633f4ba83a146102ab57806340c10f19146102b357806342966c68146102c65780635c975abb146102d9576101c4565b8063313ce5671461027657806336568abe146102855780633950935114610298576101c4565b806318160ddd116101a257806318160ddd1461021957806323b872dd1461022b578063248a9ca31461023e5780632f2ff15d14610261576101c4565b806301ffc9a7146101c957806306fdde03146101f1578063095ea7b314610206575b600080fd5b6101dc6101d73660046117eb565b610449565b60405190151581526020015b60405180910390f35b6101f9610476565b6040516101e89190611888565b6101dc610214366004611767565b610508565b6004545b6040519081526020016101e8565b6101dc61023936600461172c565b61051f565b61021d61024c366004611790565b60009081526020819052604090206001015490565b61027461026f3660046117a8565b6105ce565b005b604051601281526020016101e8565b6102746102933660046117a8565b6105f5565b6101dc6102a6366004611767565b610617565b610274610653565b6102746102c1366004611767565b6106f9565b6102746102d4366004611790565b61079c565b60075460ff166101dc565b61021d6102f23660046116e0565b6001600160a01b031660009081526002602052604090205490565b61027461031b366004611767565b6107a9565b61027461082a565b61033b6103363660046117ca565b6108ce565b6040516001600160a01b0390911681526020016101e8565b6101dc6103613660046117a8565b6108ed565b6101f9610916565b61021d600081565b6101dc610384366004611767565b610925565b6101dc610397366004611767565b6109be565b61021d6103aa366004611790565b6109cb565b61021d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102746103e43660046117a8565b6109e2565b61021d6103f73660046116fa565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61021d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60006001600160e01b03198216635a05180f60e01b148061046e575061046e82610a0b565b90505b919050565b6060600580546104859061194c565b80601f01602080910402602001604051908101604052809291908181526020018280546104b19061194c565b80156104fe5780601f106104d3576101008083540402835291602001916104fe565b820191906000526020600020905b8154815290600101906020018083116104e157829003601f168201915b5050505050905090565b6000610515338484610a40565b5060015b92915050565b600061052c848484610b64565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156105b65760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6105c38533858403610a40565b506001949350505050565b6105d88282610d3f565b60008281526001602052604090206105f090826109f6565b505050565b6105ff8282610d66565b60008281526001602052604090206105f09082610de0565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161051591859061064e9086906118bb565b610a40565b61067d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610361565b6106ef5760405162461bcd60e51b815260206004820152603960248201527f45524332305072657365744d696e7465725061757365723a206d75737420686160448201527f76652070617573657220726f6c6520746f20756e70617573650000000000000060648201526084016105ad565b6106f7610df5565b565b6107237f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610361565b61078e5760405162461bcd60e51b815260206004820152603660248201527f45524332305072657365744d696e7465725061757365723a206d7573742068616044820152751d99481b5a5b9d195c881c9bdb19481d1bc81b5a5b9d60521b60648201526084016105ad565b6107988282610e88565b5050565b6107a63382610f74565b50565b60006107b583336103f7565b9050818110156108135760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604482015263616e636560e01b60648201526084016105ad565b6108208333848403610a40565b6105f08383610f74565b6108547f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610361565b6108c65760405162461bcd60e51b815260206004820152603760248201527f45524332305072657365744d696e7465725061757365723a206d75737420686160448201527f76652070617573657220726f6c6520746f20706175736500000000000000000060648201526084016105ad565b6106f76110ce565b60008281526001602052604081206108e69083611149565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600680546104859061194c565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156109a75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105ad565b6109b43385858403610a40565b5060019392505050565b6000610515338484610b64565b600081815260016020526040812061046e90611155565b6105ff828261115f565b6107988282611185565b60006108e6836001600160a01b038416611209565b60006001600160e01b03198216637965db0b60e01b148061046e57506301ffc9a760e01b6001600160e01b031983161461046e565b6001600160a01b038316610aa25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105ad565b6001600160a01b038216610b035760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105ad565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610bc85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105ad565b6001600160a01b038216610c2a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105ad565b610c35838383611258565b6001600160a01b03831660009081526002602052604090205481811015610cad5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105ad565b6001600160a01b03808516600090815260026020526040808220858503905591851681529081208054849290610ce49084906118bb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d3091815260200190565b60405180910390a35b50505050565b600082815260208190526040902060010154610d5c81335b611263565b6105f08383611185565b6001600160a01b0381163314610dd65760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016105ad565b61079882826112c7565b60006108e6836001600160a01b03841661132c565b60075460ff16610e3e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016105ad565b6007805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038216610ede5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105ad565b610eea60008383611258565b8060046000828254610efc91906118bb565b90915550506001600160a01b03821660009081526002602052604081208054839290610f299084906118bb565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610798565b6001600160a01b038216610fd45760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105ad565b610fe082600083611258565b6001600160a01b038216600090815260026020526040902054818110156110545760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105ad565b6001600160a01b03831660009081526002602052604081208383039055600480548492906110839084906118f2565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36105f0565b60075460ff16156111145760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105ad565b6007805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e6b3390565b60006108e68383611449565b600061046e825490565b60008281526020819052604090206001015461117b8133610d57565b6105f083836112c7565b61118f82826108ed565b610798576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556111c53390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600081815260018301602052604081205461125057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610519565b506000610519565b6105f0838383611481565b61126d82826108ed565b61079857611285816001600160a01b031660146114e7565b6112908360206114e7565b6040516020016112a1929190611813565b60408051601f198184030181529082905262461bcd60e51b82526105ad91600401611888565b6112d182826108ed565b15610798576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000818152600183016020526040812054801561143f5760006113506001836118f2565b8554909150600090611364906001906118f2565b90508181146113e557600086600001828154811061139257634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050808760000184815481106113c357634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b855486908061140457634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610519565b6000915050610519565b600082600001828154811061146e57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b60075460ff16156105f05760405162461bcd60e51b815260206004820152602a60248201527f45524332305061757361626c653a20746f6b656e207472616e736665722077686044820152691a5b19481c185d5cd95960b21b60648201526084016105ad565b606060006114f68360026118d3565b6115019060026118bb565b67ffffffffffffffff81111561152757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611551576020820181803683370190505b509050600360fc1b8160008151811061157a57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106115b757634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006115db8460026118d3565b6115e69060016118bb565b90505b600181111561167a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061162857634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061164c57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c9361167381611935565b90506115e9565b5083156108e65760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105ad565b80356001600160a01b038116811461047157600080fd5b6000602082840312156116f1578081fd5b6108e6826116c9565b6000806040838503121561170c578081fd5b611715836116c9565b9150611723602084016116c9565b90509250929050565b600080600060608486031215611740578081fd5b611749846116c9565b9250611757602085016116c9565b9150604084013590509250925092565b60008060408385031215611779578182fd5b611782836116c9565b946020939093013593505050565b6000602082840312156117a1578081fd5b5035919050565b600080604083850312156117ba578182fd5b82359150611723602084016116c9565b600080604083850312156117dc578182fd5b50508035926020909101359150565b6000602082840312156117fc578081fd5b81356001600160e01b0319811681146108e6578182fd5b60007f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008252835161184b816017850160208801611909565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161187c816028840160208801611909565b01602801949350505050565b60006020825282518060208401526118a7816040850160208701611909565b601f01601f19169190910160400192915050565b600082198211156118ce576118ce611987565b500190565b60008160001904831182151516156118ed576118ed611987565b500290565b60008282101561190457611904611987565b500390565b60005b8381101561192457818101518382015260200161190c565b83811115610d395750506000910152565b60008161194457611944611987565b506000190190565b600181811c9082168061196057607f821691505b6020821081141561198157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220ae386b40d9bc06b6d5a7d9610f6825fc91bf0484da9d4a0f3bb5474557c2aa4864736f6c63430008030033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063a457c2d711610097578063d539139311610071578063d5391393146103af578063d547741f146103d6578063dd62ed3e146103e9578063e63ab1e914610422576101c4565b8063a457c2d714610376578063a9059cbb14610389578063ca15c8731461039c576101c4565b80639010d07c116100d35780639010d07c1461032857806391d148541461035357806395d89b4114610366578063a217fddf1461036e576101c4565b806370a08231146102e457806379cc67901461030d5780638456cb5914610320576101c4565b8063313ce567116101665780633f4ba83a116101405780633f4ba83a146102ab57806340c10f19146102b357806342966c68146102c65780635c975abb146102d9576101c4565b8063313ce5671461027657806336568abe146102855780633950935114610298576101c4565b806318160ddd116101a257806318160ddd1461021957806323b872dd1461022b578063248a9ca31461023e5780632f2ff15d14610261576101c4565b806301ffc9a7146101c957806306fdde03146101f1578063095ea7b314610206575b600080fd5b6101dc6101d73660046117eb565b610449565b60405190151581526020015b60405180910390f35b6101f9610476565b6040516101e89190611888565b6101dc610214366004611767565b610508565b6004545b6040519081526020016101e8565b6101dc61023936600461172c565b61051f565b61021d61024c366004611790565b60009081526020819052604090206001015490565b61027461026f3660046117a8565b6105ce565b005b604051601281526020016101e8565b6102746102933660046117a8565b6105f5565b6101dc6102a6366004611767565b610617565b610274610653565b6102746102c1366004611767565b6106f9565b6102746102d4366004611790565b61079c565b60075460ff166101dc565b61021d6102f23660046116e0565b6001600160a01b031660009081526002602052604090205490565b61027461031b366004611767565b6107a9565b61027461082a565b61033b6103363660046117ca565b6108ce565b6040516001600160a01b0390911681526020016101e8565b6101dc6103613660046117a8565b6108ed565b6101f9610916565b61021d600081565b6101dc610384366004611767565b610925565b6101dc610397366004611767565b6109be565b61021d6103aa366004611790565b6109cb565b61021d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102746103e43660046117a8565b6109e2565b61021d6103f73660046116fa565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61021d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60006001600160e01b03198216635a05180f60e01b148061046e575061046e82610a0b565b90505b919050565b6060600580546104859061194c565b80601f01602080910402602001604051908101604052809291908181526020018280546104b19061194c565b80156104fe5780601f106104d3576101008083540402835291602001916104fe565b820191906000526020600020905b8154815290600101906020018083116104e157829003601f168201915b5050505050905090565b6000610515338484610a40565b5060015b92915050565b600061052c848484610b64565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156105b65760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6105c38533858403610a40565b506001949350505050565b6105d88282610d3f565b60008281526001602052604090206105f090826109f6565b505050565b6105ff8282610d66565b60008281526001602052604090206105f09082610de0565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161051591859061064e9086906118bb565b610a40565b61067d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610361565b6106ef5760405162461bcd60e51b815260206004820152603960248201527f45524332305072657365744d696e7465725061757365723a206d75737420686160448201527f76652070617573657220726f6c6520746f20756e70617573650000000000000060648201526084016105ad565b6106f7610df5565b565b6107237f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610361565b61078e5760405162461bcd60e51b815260206004820152603660248201527f45524332305072657365744d696e7465725061757365723a206d7573742068616044820152751d99481b5a5b9d195c881c9bdb19481d1bc81b5a5b9d60521b60648201526084016105ad565b6107988282610e88565b5050565b6107a63382610f74565b50565b60006107b583336103f7565b9050818110156108135760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604482015263616e636560e01b60648201526084016105ad565b6108208333848403610a40565b6105f08383610f74565b6108547f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610361565b6108c65760405162461bcd60e51b815260206004820152603760248201527f45524332305072657365744d696e7465725061757365723a206d75737420686160448201527f76652070617573657220726f6c6520746f20706175736500000000000000000060648201526084016105ad565b6106f76110ce565b60008281526001602052604081206108e69083611149565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600680546104859061194c565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156109a75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105ad565b6109b43385858403610a40565b5060019392505050565b6000610515338484610b64565b600081815260016020526040812061046e90611155565b6105ff828261115f565b6107988282611185565b60006108e6836001600160a01b038416611209565b60006001600160e01b03198216637965db0b60e01b148061046e57506301ffc9a760e01b6001600160e01b031983161461046e565b6001600160a01b038316610aa25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105ad565b6001600160a01b038216610b035760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105ad565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610bc85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105ad565b6001600160a01b038216610c2a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105ad565b610c35838383611258565b6001600160a01b03831660009081526002602052604090205481811015610cad5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105ad565b6001600160a01b03808516600090815260026020526040808220858503905591851681529081208054849290610ce49084906118bb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d3091815260200190565b60405180910390a35b50505050565b600082815260208190526040902060010154610d5c81335b611263565b6105f08383611185565b6001600160a01b0381163314610dd65760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016105ad565b61079882826112c7565b60006108e6836001600160a01b03841661132c565b60075460ff16610e3e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016105ad565b6007805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038216610ede5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105ad565b610eea60008383611258565b8060046000828254610efc91906118bb565b90915550506001600160a01b03821660009081526002602052604081208054839290610f299084906118bb565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610798565b6001600160a01b038216610fd45760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105ad565b610fe082600083611258565b6001600160a01b038216600090815260026020526040902054818110156110545760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105ad565b6001600160a01b03831660009081526002602052604081208383039055600480548492906110839084906118f2565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36105f0565b60075460ff16156111145760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105ad565b6007805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e6b3390565b60006108e68383611449565b600061046e825490565b60008281526020819052604090206001015461117b8133610d57565b6105f083836112c7565b61118f82826108ed565b610798576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556111c53390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600081815260018301602052604081205461125057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610519565b506000610519565b6105f0838383611481565b61126d82826108ed565b61079857611285816001600160a01b031660146114e7565b6112908360206114e7565b6040516020016112a1929190611813565b60408051601f198184030181529082905262461bcd60e51b82526105ad91600401611888565b6112d182826108ed565b15610798576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000818152600183016020526040812054801561143f5760006113506001836118f2565b8554909150600090611364906001906118f2565b90508181146113e557600086600001828154811061139257634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050808760000184815481106113c357634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b855486908061140457634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610519565b6000915050610519565b600082600001828154811061146e57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b60075460ff16156105f05760405162461bcd60e51b815260206004820152602a60248201527f45524332305061757361626c653a20746f6b656e207472616e736665722077686044820152691a5b19481c185d5cd95960b21b60648201526084016105ad565b606060006114f68360026118d3565b6115019060026118bb565b67ffffffffffffffff81111561152757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611551576020820181803683370190505b509050600360fc1b8160008151811061157a57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106115b757634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006115db8460026118d3565b6115e69060016118bb565b90505b600181111561167a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061162857634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061164c57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c9361167381611935565b90506115e9565b5083156108e65760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105ad565b80356001600160a01b038116811461047157600080fd5b6000602082840312156116f1578081fd5b6108e6826116c9565b6000806040838503121561170c578081fd5b611715836116c9565b9150611723602084016116c9565b90509250929050565b600080600060608486031215611740578081fd5b611749846116c9565b9250611757602085016116c9565b9150604084013590509250925092565b60008060408385031215611779578182fd5b611782836116c9565b946020939093013593505050565b6000602082840312156117a1578081fd5b5035919050565b600080604083850312156117ba578182fd5b82359150611723602084016116c9565b600080604083850312156117dc578182fd5b50508035926020909101359150565b6000602082840312156117fc578081fd5b81356001600160e01b0319811681146108e6578182fd5b60007f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008252835161184b816017850160208801611909565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161187c816028840160208801611909565b01602801949350505050565b60006020825282518060208401526118a7816040850160208701611909565b601f01601f19169190910160400192915050565b600082198211156118ce576118ce611987565b500190565b60008160001904831182151516156118ed576118ed611987565b500290565b60008282101561190457611904611987565b500390565b60005b8381101561192457818101518382015260200161190c565b83811115610d395750506000910152565b60008161194457611944611987565b506000190190565b600181811c9082168061196057607f821691505b6020821081141561198157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220ae386b40d9bc06b6d5a7d9610f6825fc91bf0484da9d4a0f3bb5474557c2aa4864736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC20Snapshot.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC20Snapshot.json
new file mode 100644
index 0000000..7f30dcd
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC20Snapshot.json
@@ -0,0 +1,337 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC20Snapshot",
+ "sourceName": "contracts/token/ERC20/extensions/ERC20Snapshot.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "id",
+ "type": "uint256"
+ }
+ ],
+ "name": "Snapshot",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "snapshotId",
+ "type": "uint256"
+ }
+ ],
+ "name": "balanceOfAt",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "addedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "increaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "snapshotId",
+ "type": "uint256"
+ }
+ ],
+ "name": "totalSupplyAt",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC20Votes.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC20Votes.json
new file mode 100644
index 0000000..89333fc
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC20Votes.json
@@ -0,0 +1,593 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC20Votes",
+ "sourceName": "contracts/token/ERC20/extensions/ERC20Votes.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "delegator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "fromDelegate",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "toDelegate",
+ "type": "address"
+ }
+ ],
+ "name": "DelegateChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "delegate",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "previousBalance",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "newBalance",
+ "type": "uint256"
+ }
+ ],
+ "name": "DelegateVotesChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "DOMAIN_SEPARATOR",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint32",
+ "name": "pos",
+ "type": "uint32"
+ }
+ ],
+ "name": "checkpoints",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint32",
+ "name": "fromBlock",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint224",
+ "name": "votes",
+ "type": "uint224"
+ }
+ ],
+ "internalType": "struct ERC20Votes.Checkpoint",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "delegatee",
+ "type": "address"
+ }
+ ],
+ "name": "delegate",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "delegatee",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "expiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "delegateBySig",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "delegates",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getPastTotalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getPastVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "getVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "addedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "increaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "nonces",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "numCheckpoints",
+ "outputs": [
+ {
+ "internalType": "uint32",
+ "name": "",
+ "type": "uint32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "permit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC20VotesComp.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC20VotesComp.json
new file mode 100644
index 0000000..71c4ae6
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC20VotesComp.json
@@ -0,0 +1,636 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC20VotesComp",
+ "sourceName": "contracts/token/ERC20/extensions/ERC20VotesComp.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "delegator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "fromDelegate",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "toDelegate",
+ "type": "address"
+ }
+ ],
+ "name": "DelegateChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "delegate",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "previousBalance",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "newBalance",
+ "type": "uint256"
+ }
+ ],
+ "name": "DelegateVotesChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "DOMAIN_SEPARATOR",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint32",
+ "name": "pos",
+ "type": "uint32"
+ }
+ ],
+ "name": "checkpoints",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint32",
+ "name": "fromBlock",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint224",
+ "name": "votes",
+ "type": "uint224"
+ }
+ ],
+ "internalType": "struct ERC20Votes.Checkpoint",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "delegatee",
+ "type": "address"
+ }
+ ],
+ "name": "delegate",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "delegatee",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "expiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "delegateBySig",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "delegates",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "getCurrentVotes",
+ "outputs": [
+ {
+ "internalType": "uint96",
+ "name": "",
+ "type": "uint96"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getPastTotalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getPastVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getPriorVotes",
+ "outputs": [
+ {
+ "internalType": "uint96",
+ "name": "",
+ "type": "uint96"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "getVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "addedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "increaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "nonces",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "numCheckpoints",
+ "outputs": [
+ {
+ "internalType": "uint32",
+ "name": "",
+ "type": "uint32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "permit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC20Wrapper.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC20Wrapper.json
new file mode 100644
index 0000000..bdfda9c
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC20Wrapper.json
@@ -0,0 +1,342 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC20Wrapper",
+ "sourceName": "contracts/token/ERC20/extensions/ERC20Wrapper.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "depositFor",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "addedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "increaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "underlying",
+ "outputs": [
+ {
+ "internalType": "contract IERC20",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "withdrawTo",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC2771Context.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC2771Context.json
new file mode 100644
index 0000000..4adaab0
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC2771Context.json
@@ -0,0 +1,30 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC2771Context",
+ "sourceName": "contracts/metatx/ERC2771Context.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "forwarder",
+ "type": "address"
+ }
+ ],
+ "name": "isTrustedForwarder",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC721.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC721.json
new file mode 100644
index 0000000..51df039
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC721.json
@@ -0,0 +1,357 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC721",
+ "sourceName": "contracts/token/ERC721/ERC721.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name_",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol_",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "approved",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenURI",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x60806040523480156200001157600080fd5b50604051620014d2380380620014d28339810160408190526200003491620001c1565b81516200004990600090602085019062000068565b5080516200005f90600190602084019062000068565b5050506200027b565b828054620000769062000228565b90600052602060002090601f0160209004810192826200009a5760008555620000e5565b82601f10620000b557805160ff1916838001178555620000e5565b82800160010185558215620000e5579182015b82811115620000e5578251825591602001919060010190620000c8565b50620000f3929150620000f7565b5090565b5b80821115620000f35760008155600101620000f8565b600082601f8301126200011f578081fd5b81516001600160401b03808211156200013c576200013c62000265565b604051601f8301601f19908116603f0116810190828211818310171562000167576200016762000265565b8160405283815260209250868385880101111562000183578485fd5b8491505b83821015620001a6578582018301518183018401529082019062000187565b83821115620001b757848385830101525b9695505050505050565b60008060408385031215620001d4578182fd5b82516001600160401b0380821115620001eb578384fd5b620001f9868387016200010e565b935060208501519150808211156200020f578283fd5b506200021e858286016200010e565b9150509250929050565b600181811c908216806200023d57607f821691505b602082108114156200025f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b611247806200028b6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb465146101b3578063b88d4fde146101c6578063c87b56dd146101d9578063e985e9c5146101ec576100cf565b80636352211e1461017757806370a082311461018a57806395d89b41146101ab576100cf565b806301ffc9a7146100d457806306fdde03146100fc578063081812fc14610111578063095ea7b31461013c57806323b872dd1461015157806342842e0e14610164575b600080fd5b6100e76100e2366004610f3f565b610228565b60405190151581526020015b60405180910390f35b61010461027c565b6040516100f39190611027565b61012461011f366004610f77565b61030e565b6040516001600160a01b0390911681526020016100f3565b61014f61014a366004610f16565b6103a8565b005b61014f61015f366004610dcc565b6104be565b61014f610172366004610dcc565b6104ef565b610124610185366004610f77565b61050a565b61019d610198366004610d80565b610581565b6040519081526020016100f3565b610104610608565b61014f6101c1366004610edc565b610617565b61014f6101d4366004610e07565b6106e9565b6101046101e7366004610f77565b610721565b6100e76101fa366004610d9a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061025957506001600160e01b03198216635b5e139f60e01b145b8061027457506301ffc9a760e01b6001600160e01b03198316145b90505b919050565b60606000805461028b9061114c565b80601f01602080910402602001604051908101604052809291908181526020018280546102b79061114c565b80156103045780601f106102d957610100808354040283529160200191610304565b820191906000526020600020905b8154815290600101906020018083116102e757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661038c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006103b38261050a565b9050806001600160a01b0316836001600160a01b031614156104215760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610383565b336001600160a01b038216148061043d575061043d81336101fa565b6104af5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610383565b6104b98383610809565b505050565b6104c83382610877565b6104e45760405162461bcd60e51b81526004016103839061108c565b6104b983838361096e565b6104b9838383604051806020016040528060008152506106e9565b6000818152600260205260408120546001600160a01b0316806102745760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610383565b60006001600160a01b0382166105ec5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610383565b506001600160a01b031660009081526003602052604090205490565b60606001805461028b9061114c565b6001600160a01b0382163314156106705760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610383565b3360008181526005602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516106dd911515815260200190565b60405180910390a35050565b6106f33383610877565b61070f5760405162461bcd60e51b81526004016103839061108c565b61071b84848484610b0e565b50505050565b6000818152600260205260409020546060906001600160a01b03166107a05760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610383565b60006107b760408051602081019091526000815290565b905060008151116107d75760405180602001604052806000815250610802565b806107e184610b41565b6040516020016107f2929190610fbb565b6040516020818303038152906040525b9392505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061083e8261050a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166108f05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610383565b60006108fb8361050a565b9050806001600160a01b0316846001600160a01b031614806109365750836001600160a01b031661092b8461030e565b6001600160a01b0316145b8061096657506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166109818261050a565b6001600160a01b0316146109e95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610383565b6001600160a01b038216610a4b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610383565b610a56600082610809565b6001600160a01b0383166000908152600360205260408120805460019290610a7f908490611109565b90915550506001600160a01b0382166000908152600360205260408120805460019290610aad9084906110dd565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610b1984848461096e565b610b2584848484610c5c565b61071b5760405162461bcd60e51b81526004016103839061103a565b606081610b6657506040805180820190915260018152600360fc1b6020820152610277565b8160005b8115610b905780610b7a81611187565b9150610b899050600a836110f5565b9150610b6a565b60008167ffffffffffffffff811115610bb957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610be3576020820181803683370190505b5090505b841561096657610bf8600183611109565b9150610c05600a866111a2565b610c109060306110dd565b60f81b818381518110610c3357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350610c55600a866110f5565b9450610be7565b60006001600160a01b0384163b15610d5e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610ca0903390899088908890600401610fea565b602060405180830381600087803b158015610cba57600080fd5b505af1925050508015610cea575060408051601f3d908101601f19168201909252610ce791810190610f5b565b60015b610d44573d808015610d18576040519150601f19603f3d011682016040523d82523d6000602084013e610d1d565b606091505b508051610d3c5760405162461bcd60e51b81526004016103839061103a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610966565b506001949350505050565b80356001600160a01b038116811461027757600080fd5b600060208284031215610d91578081fd5b61080282610d69565b60008060408385031215610dac578081fd5b610db583610d69565b9150610dc360208401610d69565b90509250929050565b600080600060608486031215610de0578081fd5b610de984610d69565b9250610df760208501610d69565b9150604084013590509250925092565b60008060008060808587031215610e1c578081fd5b610e2585610d69565b9350610e3360208601610d69565b925060408501359150606085013567ffffffffffffffff80821115610e56578283fd5b818701915087601f830112610e69578283fd5b813581811115610e7b57610e7b6111e2565b604051601f8201601f19908116603f01168101908382118183101715610ea357610ea36111e2565b816040528281528a6020848701011115610ebb578586fd5b82602086016020830137918201602001949094529598949750929550505050565b60008060408385031215610eee578182fd5b610ef783610d69565b915060208301358015158114610f0b578182fd5b809150509250929050565b60008060408385031215610f28578182fd5b610f3183610d69565b946020939093013593505050565b600060208284031215610f50578081fd5b8135610802816111f8565b600060208284031215610f6c578081fd5b8151610802816111f8565b600060208284031215610f88578081fd5b5035919050565b60008151808452610fa7816020860160208601611120565b601f01601f19169290920160200192915050565b60008351610fcd818460208801611120565b835190830190610fe1818360208801611120565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061101d90830184610f8f565b9695505050505050565b6000602082526108026020830184610f8f565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156110f0576110f06111b6565b500190565b600082611104576111046111cc565b500490565b60008282101561111b5761111b6111b6565b500390565b60005b8381101561113b578181015183820152602001611123565b8381111561071b5750506000910152565b600181811c9082168061116057607f821691505b6020821081141561118157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561119b5761119b6111b6565b5060010190565b6000826111b1576111b16111cc565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461120e57600080fd5b5056fea26469706673582212202d938d3b28324cc89e6d2076ba56ed8ae7428805a112a58e80ba9ad3b13c770964736f6c63430008030033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb465146101b3578063b88d4fde146101c6578063c87b56dd146101d9578063e985e9c5146101ec576100cf565b80636352211e1461017757806370a082311461018a57806395d89b41146101ab576100cf565b806301ffc9a7146100d457806306fdde03146100fc578063081812fc14610111578063095ea7b31461013c57806323b872dd1461015157806342842e0e14610164575b600080fd5b6100e76100e2366004610f3f565b610228565b60405190151581526020015b60405180910390f35b61010461027c565b6040516100f39190611027565b61012461011f366004610f77565b61030e565b6040516001600160a01b0390911681526020016100f3565b61014f61014a366004610f16565b6103a8565b005b61014f61015f366004610dcc565b6104be565b61014f610172366004610dcc565b6104ef565b610124610185366004610f77565b61050a565b61019d610198366004610d80565b610581565b6040519081526020016100f3565b610104610608565b61014f6101c1366004610edc565b610617565b61014f6101d4366004610e07565b6106e9565b6101046101e7366004610f77565b610721565b6100e76101fa366004610d9a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061025957506001600160e01b03198216635b5e139f60e01b145b8061027457506301ffc9a760e01b6001600160e01b03198316145b90505b919050565b60606000805461028b9061114c565b80601f01602080910402602001604051908101604052809291908181526020018280546102b79061114c565b80156103045780601f106102d957610100808354040283529160200191610304565b820191906000526020600020905b8154815290600101906020018083116102e757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661038c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006103b38261050a565b9050806001600160a01b0316836001600160a01b031614156104215760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610383565b336001600160a01b038216148061043d575061043d81336101fa565b6104af5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610383565b6104b98383610809565b505050565b6104c83382610877565b6104e45760405162461bcd60e51b81526004016103839061108c565b6104b983838361096e565b6104b9838383604051806020016040528060008152506106e9565b6000818152600260205260408120546001600160a01b0316806102745760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610383565b60006001600160a01b0382166105ec5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610383565b506001600160a01b031660009081526003602052604090205490565b60606001805461028b9061114c565b6001600160a01b0382163314156106705760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610383565b3360008181526005602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516106dd911515815260200190565b60405180910390a35050565b6106f33383610877565b61070f5760405162461bcd60e51b81526004016103839061108c565b61071b84848484610b0e565b50505050565b6000818152600260205260409020546060906001600160a01b03166107a05760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610383565b60006107b760408051602081019091526000815290565b905060008151116107d75760405180602001604052806000815250610802565b806107e184610b41565b6040516020016107f2929190610fbb565b6040516020818303038152906040525b9392505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061083e8261050a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166108f05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610383565b60006108fb8361050a565b9050806001600160a01b0316846001600160a01b031614806109365750836001600160a01b031661092b8461030e565b6001600160a01b0316145b8061096657506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166109818261050a565b6001600160a01b0316146109e95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610383565b6001600160a01b038216610a4b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610383565b610a56600082610809565b6001600160a01b0383166000908152600360205260408120805460019290610a7f908490611109565b90915550506001600160a01b0382166000908152600360205260408120805460019290610aad9084906110dd565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610b1984848461096e565b610b2584848484610c5c565b61071b5760405162461bcd60e51b81526004016103839061103a565b606081610b6657506040805180820190915260018152600360fc1b6020820152610277565b8160005b8115610b905780610b7a81611187565b9150610b899050600a836110f5565b9150610b6a565b60008167ffffffffffffffff811115610bb957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610be3576020820181803683370190505b5090505b841561096657610bf8600183611109565b9150610c05600a866111a2565b610c109060306110dd565b60f81b818381518110610c3357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350610c55600a866110f5565b9450610be7565b60006001600160a01b0384163b15610d5e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610ca0903390899088908890600401610fea565b602060405180830381600087803b158015610cba57600080fd5b505af1925050508015610cea575060408051601f3d908101601f19168201909252610ce791810190610f5b565b60015b610d44573d808015610d18576040519150601f19603f3d011682016040523d82523d6000602084013e610d1d565b606091505b508051610d3c5760405162461bcd60e51b81526004016103839061103a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610966565b506001949350505050565b80356001600160a01b038116811461027757600080fd5b600060208284031215610d91578081fd5b61080282610d69565b60008060408385031215610dac578081fd5b610db583610d69565b9150610dc360208401610d69565b90509250929050565b600080600060608486031215610de0578081fd5b610de984610d69565b9250610df760208501610d69565b9150604084013590509250925092565b60008060008060808587031215610e1c578081fd5b610e2585610d69565b9350610e3360208601610d69565b925060408501359150606085013567ffffffffffffffff80821115610e56578283fd5b818701915087601f830112610e69578283fd5b813581811115610e7b57610e7b6111e2565b604051601f8201601f19908116603f01168101908382118183101715610ea357610ea36111e2565b816040528281528a6020848701011115610ebb578586fd5b82602086016020830137918201602001949094529598949750929550505050565b60008060408385031215610eee578182fd5b610ef783610d69565b915060208301358015158114610f0b578182fd5b809150509250929050565b60008060408385031215610f28578182fd5b610f3183610d69565b946020939093013593505050565b600060208284031215610f50578081fd5b8135610802816111f8565b600060208284031215610f6c578081fd5b8151610802816111f8565b600060208284031215610f88578081fd5b5035919050565b60008151808452610fa7816020860160208601611120565b601f01601f19169290920160200192915050565b60008351610fcd818460208801611120565b835190830190610fe1818360208801611120565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061101d90830184610f8f565b9695505050505050565b6000602082526108026020830184610f8f565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156110f0576110f06111b6565b500190565b600082611104576111046111cc565b500490565b60008282101561111b5761111b6111b6565b500390565b60005b8381101561113b578181015183820152602001611123565b8381111561071b5750506000910152565b600181811c9082168061116057607f821691505b6020821081141561118157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561119b5761119b6111b6565b5060010190565b6000826111b1576111b16111cc565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461120e57600080fd5b5056fea26469706673582212202d938d3b28324cc89e6d2076ba56ed8ae7428805a112a58e80ba9ad3b13c770964736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC721Burnable.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC721Burnable.json
new file mode 100644
index 0000000..ec50df5
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC721Burnable.json
@@ -0,0 +1,354 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC721Burnable",
+ "sourceName": "contracts/token/ERC721/extensions/ERC721Burnable.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "approved",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "burn",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenURI",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC721Enumerable.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC721Enumerable.json
new file mode 100644
index 0000000..d3b0ea6
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC721Enumerable.json
@@ -0,0 +1,397 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC721Enumerable",
+ "sourceName": "contracts/token/ERC721/extensions/ERC721Enumerable.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "approved",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenByIndex",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenOfOwnerByIndex",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenURI",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC721Holder.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC721Holder.json
new file mode 100644
index 0000000..9dfac98
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC721Holder.json
@@ -0,0 +1,45 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC721Holder",
+ "sourceName": "contracts/token/ERC721/utils/ERC721Holder.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "name": "onERC721Received",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "",
+ "type": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x608060405234801561001057600080fd5b506101a8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063150b7a0214610030575b600080fd5b61004e61003e366004610087565b630a85bd0160e11b949350505050565b6040516001600160e01b0319909116815260200160405180910390f35b80356001600160a01b038116811461008257600080fd5b919050565b6000806000806080858703121561009c578384fd5b6100a58561006b565b93506100b36020860161006b565b925060408501359150606085013567ffffffffffffffff808211156100d6578283fd5b818701915087601f8301126100e9578283fd5b8135818111156100fb576100fb61015c565b604051601f8201601f19908116603f011681019083821181831017156101235761012361015c565b816040528281528a602084870101111561013b578586fd5b82602086016020830137918201602001949094529598949750929550505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220dc27e8fed018fdfacad30c665dc1bdf024b6ef66c2c22fbce4a02747ba89990064736f6c63430008030033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063150b7a0214610030575b600080fd5b61004e61003e366004610087565b630a85bd0160e11b949350505050565b6040516001600160e01b0319909116815260200160405180910390f35b80356001600160a01b038116811461008257600080fd5b919050565b6000806000806080858703121561009c578384fd5b6100a58561006b565b93506100b36020860161006b565b925060408501359150606085013567ffffffffffffffff808211156100d6578283fd5b818701915087601f8301126100e9578283fd5b8135818111156100fb576100fb61015c565b604051601f8201601f19908116603f011681019083821181831017156101235761012361015c565b816040528281528a602084870101111561013b578586fd5b82602086016020830137918201602001949094529598949750929550505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220dc27e8fed018fdfacad30c665dc1bdf024b6ef66c2c22fbce4a02747ba89990064736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC721Pausable.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC721Pausable.json
new file mode 100644
index 0000000..8ffc703
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC721Pausable.json
@@ -0,0 +1,380 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC721Pausable",
+ "sourceName": "contracts/token/ERC721/extensions/ERC721Pausable.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "approved",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "Paused",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "Unpaused",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "paused",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenURI",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC721PresetMinterPauserAutoId.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC721PresetMinterPauserAutoId.json
new file mode 100644
index 0000000..13e13ab
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC721PresetMinterPauserAutoId.json
@@ -0,0 +1,751 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC721PresetMinterPauserAutoId",
+ "sourceName": "contracts/token/ERC721/presets/ERC721PresetMinterPauserAutoId.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "baseTokenURI",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "approved",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "Paused",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "previousAdminRole",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "newAdminRole",
+ "type": "bytes32"
+ }
+ ],
+ "name": "RoleAdminChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "RoleGranted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "RoleRevoked",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "Unpaused",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "DEFAULT_ADMIN_ROLE",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "MINTER_ROLE",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "PAUSER_ROLE",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "burn",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getRoleAdmin",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ }
+ ],
+ "name": "getRoleMember",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getRoleMemberCount",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "grantRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasRole",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ }
+ ],
+ "name": "mint",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "pause",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "paused",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "renounceRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "revokeRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenByIndex",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenOfOwnerByIndex",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenURI",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "unpause",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x60806040523480156200001157600080fd5b5060405162002b1438038062002b148339810160408190526200003491620003b3565b8251839083906200004d9060029060208501906200025a565b508051620000639060039060208401906200025a565b5050600c805460ff191690555080516200008590600e9060208401906200025a565b50620000946000335b620000f5565b620000c07f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336200008e565b620000ec7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a336200008e565b50505062000493565b6200010c82826200013860201b62000e901760201c565b60008281526001602090815260409091206200013391839062000e9e62000148821b17901c565b505050565b62000144828262000168565b5050565b60006200015f836001600160a01b03841662000208565b90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000144576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001c43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000818152600183016020526040812054620002515750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000162565b50600062000162565b828054620002689062000440565b90600052602060002090601f0160209004810192826200028c5760008555620002d7565b82601f10620002a757805160ff1916838001178555620002d7565b82800160010185558215620002d7579182015b82811115620002d7578251825591602001919060010190620002ba565b50620002e5929150620002e9565b5090565b5b80821115620002e55760008155600101620002ea565b600082601f83011262000311578081fd5b81516001600160401b03808211156200032e576200032e6200047d565b604051601f8301601f19908116603f011681019082821181831017156200035957620003596200047d565b8160405283815260209250868385880101111562000375578485fd5b8491505b8382101562000398578582018301518183018401529082019062000379565b83821115620003a957848385830101525b9695505050505050565b600080600060608486031215620003c8578283fd5b83516001600160401b0380821115620003df578485fd5b620003ed8783880162000300565b9450602086015191508082111562000403578384fd5b620004118783880162000300565b9350604086015191508082111562000427578283fd5b50620004368682870162000300565b9150509250925092565b600181811c908216806200045557607f821691505b602082108114156200047757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61267180620004a36000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80636352211e1161010f578063a22cb465116100a2578063d539139311610071578063d5391393146103f7578063d547741f1461041e578063e63ab1e914610431578063e985e9c514610458576101e5565b8063a22cb465146103ab578063b88d4fde146103be578063c87b56dd146103d1578063ca15c873146103e4576101e5565b80639010d07c116100de5780639010d07c1461037557806391d148541461038857806395d89b411461039b578063a217fddf146103a3576101e5565b80636352211e146103345780636a6278421461034757806370a082311461035a5780638456cb591461036d576101e5565b80632f2ff15d1161018757806342842e0e1161015657806342842e0e146102f057806342966c68146103035780634f6ccce7146103165780635c975abb14610329576101e5565b80632f2ff15d146102af5780632f745c59146102c257806336568abe146102d55780633f4ba83a146102e8576101e5565b8063095ea7b3116101c3578063095ea7b31461025257806318160ddd1461026757806323b872dd14610279578063248a9ca31461028c576101e5565b806301ffc9a7146101ea57806306fdde0314610212578063081812fc14610227575b600080fd5b6101fd6101f83660046122d9565b610494565b60405190151581526020015b60405180910390f35b61021a6104a7565b604051610209919061241e565b61023a61023536600461227e565b610539565b6040516001600160a01b039091168152602001610209565b610265610260366004612255565b6105d3565b005b600a545b604051908152602001610209565b61026561028736600461210b565b6106e9565b61026b61029a36600461227e565b60009081526020819052604090206001015490565b6102656102bd366004612296565b61071b565b61026b6102d0366004612255565b61073d565b6102656102e3366004612296565b6107d6565b6102656107f8565b6102656102fe36600461210b565b6108a0565b61026561031136600461227e565b6108bb565b61026b61032436600461227e565b610935565b600c5460ff166101fd565b61023a61034236600461227e565b6109d6565b6102656103553660046120bf565b610a4d565b61026b6103683660046120bf565b610b09565b610265610b90565b61023a6103833660046122b8565b610c34565b6101fd610396366004612296565b610c53565b61021a610c7c565b61026b600081565b6102656103b936600461221b565b610c8b565b6102656103cc366004612146565b610d5d565b61021a6103df36600461227e565b610d95565b61026b6103f236600461227e565b610e6f565b61026b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61026561042c366004612296565b610e86565b61026b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6101fd6104663660046120d9565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b600061049f82610eb3565b90505b919050565b6060600280546104b690612579565b80601f01602080910402602001604051908101604052809291908181526020018280546104e290612579565b801561052f5780601f106105045761010080835404028352916020019161052f565b820191906000526020600020905b81548152906001019060200180831161051257829003601f168201915b5050505050905090565b6000818152600460205260408120546001600160a01b03166105b75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006105de826109d6565b9050806001600160a01b0316836001600160a01b0316141561064c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016105ae565b336001600160a01b038216148061066857506106688133610466565b6106da5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016105ae565b6106e48383610ed8565b505050565b6106f4335b82610f46565b6107105760405162461bcd60e51b81526004016105ae90612483565b6106e483838361103d565b61072582826111e8565b60008281526001602052604090206106e49082610e9e565b600061074883610b09565b82106107aa5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016105ae565b506001600160a01b03821660009081526008602090815260408083208484529091529020545b92915050565b6107e0828261120f565b60008281526001602052604090206106e49082611289565b6108227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610396565b610896576040805162461bcd60e51b81526020600482015260248101919091527f4552433732315072657365744d696e7465725061757365724175746f49643a2060448201527f6d75737420686176652070617573657220726f6c6520746f20756e706175736560648201526084016105ae565b61089e61129e565b565b6106e483838360405180602001604052806000815250610d5d565b6108c4336106ee565b6109295760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b60648201526084016105ae565b61093281611331565b50565b6000610940600a5490565b82106109a35760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016105ae565b600a82815481106109c457634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6000818152600460205260408120546001600160a01b03168061049f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016105ae565b610a777f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610396565b610ae95760405162461bcd60e51b815260206004820152603d60248201527f4552433732315072657365744d696e7465725061757365724175746f49643a2060448201527f6d7573742068617665206d696e74657220726f6c6520746f206d696e7400000060648201526084016105ae565b610afb81610af6600d5490565b6113d8565b610932600d80546001019055565b60006001600160a01b038216610b745760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016105ae565b506001600160a01b031660009081526005602052604090205490565b610bba7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610396565b610c2c5760405162461bcd60e51b815260206004820152603e60248201527f4552433732315072657365744d696e7465725061757365724175746f49643a2060448201527f6d75737420686176652070617573657220726f6c6520746f207061757365000060648201526084016105ae565b61089e611526565b6000828152600160205260408120610c4c90836115a1565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600380546104b690612579565b6001600160a01b038216331415610ce45760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105ae565b3360008181526007602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d51911515815260200190565b60405180910390a35050565b610d673383610f46565b610d835760405162461bcd60e51b81526004016105ae90612483565b610d8f848484846115ad565b50505050565b6000818152600460205260409020546060906001600160a01b0316610e145760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016105ae565b6000610e1e6115e0565b90506000815111610e3e5760405180602001604052806000815250610c4c565b80610e48846115ef565b604051602001610e5992919061233d565b6040516020818303038152906040529392505050565b600081815260016020526040812061049f9061170a565b6107e08282611714565b610e9a828261173a565b5050565b6000610c4c836001600160a01b0384166117be565b60006001600160e01b0319821663780e9d6360e01b148061049f575061049f8261180d565b600081815260066020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610f0d826109d6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600460205260408120546001600160a01b0316610fbf5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016105ae565b6000610fca836109d6565b9050806001600160a01b0316846001600160a01b031614806110055750836001600160a01b0316610ffa84610539565b6001600160a01b0316145b8061103557506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611050826109d6565b6001600160a01b0316146110b85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016105ae565b6001600160a01b03821661111a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105ae565b61112583838361184d565b611130600082610ed8565b6001600160a01b038316600090815260056020526040812080546001929061115990849061251f565b90915550506001600160a01b03821660009081526005602052604081208054600192906111879084906124d4565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008281526020819052604090206001015461120581335b611858565b6106e4838361173a565b6001600160a01b038116331461127f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016105ae565b610e9a82826118bc565b6000610c4c836001600160a01b038416611921565b600c5460ff166112e75760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016105ae565b600c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600061133c826109d6565b905061134a8160008461184d565b611355600083610ed8565b6001600160a01b038116600090815260056020526040812080546001929061137e90849061251f565b909155505060008281526004602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b03821661142e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105ae565b6000818152600460205260409020546001600160a01b0316156114935760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105ae565b61149f6000838361184d565b6001600160a01b03821660009081526005602052604081208054600192906114c89084906124d4565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600c5460ff161561156c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105ae565b600c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113143390565b6000610c4c8383611a3e565b6115b884848461103d565b6115c484848484611a76565b610d8f5760405162461bcd60e51b81526004016105ae90612431565b6060600e80546104b690612579565b60608161161457506040805180820190915260018152600360fc1b60208201526104a2565b8160005b811561163e5780611628816125b4565b91506116379050600a836124ec565b9150611618565b60008167ffffffffffffffff81111561166757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611691576020820181803683370190505b5090505b8415611035576116a660018361251f565b91506116b3600a866125cf565b6116be9060306124d4565b60f81b8183815181106116e157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611703600a866124ec565b9450611695565b600061049f825490565b6000828152602081905260409020600101546117308133611200565b6106e483836118bc565b6117448282610c53565b610e9a576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561177a3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000818152600183016020526040812054611805575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d0565b5060006107d0565b60006001600160e01b031982166380ac58cd60e01b148061183e57506001600160e01b03198216635b5e139f60e01b145b8061049f575061049f82611b83565b6106e4838383611ba8565b6118628282610c53565b610e9a5761187a816001600160a01b03166014611c1a565b611885836020611c1a565b60405160200161189692919061236c565b60408051601f198184030181529082905262461bcd60e51b82526105ae9160040161241e565b6118c68282610c53565b15610e9a576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008181526001830160205260408120548015611a3457600061194560018361251f565b85549091506000906119599060019061251f565b90508181146119da57600086600001828154811061198757634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050808760000184815481106119b857634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b85548690806119f957634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d0565b60009150506107d0565b6000826000018281548110611a6357634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b60006001600160a01b0384163b15611b7857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611aba9033908990889088906004016123e1565b602060405180830381600087803b158015611ad457600080fd5b505af1925050508015611b04575060408051601f3d908101601f19168201909252611b01918101906122f5565b60015b611b5e573d808015611b32576040519150601f19603f3d011682016040523d82523d6000602084013e611b37565b606091505b508051611b565760405162461bcd60e51b81526004016105ae90612431565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611035565b506001949350505050565b60006001600160e01b03198216635a05180f60e01b148061049f575061049f82611dfc565b611bb3838383611e31565b600c5460ff16156106e45760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b60648201526084016105ae565b60606000611c29836002612500565b611c349060026124d4565b67ffffffffffffffff811115611c5a57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c84576020820181803683370190505b509050600360fc1b81600081518110611cad57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611cea57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611d0e846002612500565b611d199060016124d4565b90505b6001811115611dad576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611d5b57634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110611d7f57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611da681612562565b9050611d1c565b508315610c4c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105ae565b60006001600160e01b03198216637965db0b60e01b148061049f57506301ffc9a760e01b6001600160e01b031983161461049f565b6001600160a01b038316611e8c57611e8781600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b611eaf565b816001600160a01b0316836001600160a01b031614611eaf57611eaf8382611eee565b6001600160a01b038216611ecb57611ec681611f8b565b6106e4565b826001600160a01b0316826001600160a01b0316146106e4576106e48282612064565b60006001611efb84610b09565b611f05919061251f565b600083815260096020526040902054909150808214611f58576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600a54600090611f9d9060019061251f565b6000838152600b6020526040812054600a8054939450909284908110611fd357634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600a838154811061200257634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a80548061204857634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061206f83610b09565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b80356001600160a01b03811681146104a257600080fd5b6000602082840312156120d0578081fd5b610c4c826120a8565b600080604083850312156120eb578081fd5b6120f4836120a8565b9150612102602084016120a8565b90509250929050565b60008060006060848603121561211f578081fd5b612128846120a8565b9250612136602085016120a8565b9150604084013590509250925092565b6000806000806080858703121561215b578081fd5b612164856120a8565b9350612172602086016120a8565b925060408501359150606085013567ffffffffffffffff80821115612195578283fd5b818701915087601f8301126121a8578283fd5b8135818111156121ba576121ba61260f565b604051601f8201601f19908116603f011681019083821181831017156121e2576121e261260f565b816040528281528a60208487010111156121fa578586fd5b82602086016020830137918201602001949094529598949750929550505050565b6000806040838503121561222d578182fd5b612236836120a8565b91506020830135801515811461224a578182fd5b809150509250929050565b60008060408385031215612267578182fd5b612270836120a8565b946020939093013593505050565b60006020828403121561228f578081fd5b5035919050565b600080604083850312156122a8578182fd5b82359150612102602084016120a8565b600080604083850312156122ca578182fd5b50508035926020909101359150565b6000602082840312156122ea578081fd5b8135610c4c81612625565b600060208284031215612306578081fd5b8151610c4c81612625565b60008151808452612329816020860160208601612536565b601f01601f19169290920160200192915050565b6000835161234f818460208801612536565b835190830190612363818360208801612536565b01949350505050565b60007f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000825283516123a4816017850160208801612536565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516123d5816028840160208801612536565b01602801949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061241490830184612311565b9695505050505050565b600060208252610c4c6020830184612311565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156124e7576124e76125e3565b500190565b6000826124fb576124fb6125f9565b500490565b600081600019048311821515161561251a5761251a6125e3565b500290565b600082821015612531576125316125e3565b500390565b60005b83811015612551578181015183820152602001612539565b83811115610d8f5750506000910152565b600081612571576125716125e3565b506000190190565b600181811c9082168061258d57607f821691505b602082108114156125ae57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125c8576125c86125e3565b5060010190565b6000826125de576125de6125f9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461093257600080fdfea26469706673582212207c3140b8543572afa84e5729a8fa58be87a95dc18779058077802a524585368b64736f6c63430008030033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80636352211e1161010f578063a22cb465116100a2578063d539139311610071578063d5391393146103f7578063d547741f1461041e578063e63ab1e914610431578063e985e9c514610458576101e5565b8063a22cb465146103ab578063b88d4fde146103be578063c87b56dd146103d1578063ca15c873146103e4576101e5565b80639010d07c116100de5780639010d07c1461037557806391d148541461038857806395d89b411461039b578063a217fddf146103a3576101e5565b80636352211e146103345780636a6278421461034757806370a082311461035a5780638456cb591461036d576101e5565b80632f2ff15d1161018757806342842e0e1161015657806342842e0e146102f057806342966c68146103035780634f6ccce7146103165780635c975abb14610329576101e5565b80632f2ff15d146102af5780632f745c59146102c257806336568abe146102d55780633f4ba83a146102e8576101e5565b8063095ea7b3116101c3578063095ea7b31461025257806318160ddd1461026757806323b872dd14610279578063248a9ca31461028c576101e5565b806301ffc9a7146101ea57806306fdde0314610212578063081812fc14610227575b600080fd5b6101fd6101f83660046122d9565b610494565b60405190151581526020015b60405180910390f35b61021a6104a7565b604051610209919061241e565b61023a61023536600461227e565b610539565b6040516001600160a01b039091168152602001610209565b610265610260366004612255565b6105d3565b005b600a545b604051908152602001610209565b61026561028736600461210b565b6106e9565b61026b61029a36600461227e565b60009081526020819052604090206001015490565b6102656102bd366004612296565b61071b565b61026b6102d0366004612255565b61073d565b6102656102e3366004612296565b6107d6565b6102656107f8565b6102656102fe36600461210b565b6108a0565b61026561031136600461227e565b6108bb565b61026b61032436600461227e565b610935565b600c5460ff166101fd565b61023a61034236600461227e565b6109d6565b6102656103553660046120bf565b610a4d565b61026b6103683660046120bf565b610b09565b610265610b90565b61023a6103833660046122b8565b610c34565b6101fd610396366004612296565b610c53565b61021a610c7c565b61026b600081565b6102656103b936600461221b565b610c8b565b6102656103cc366004612146565b610d5d565b61021a6103df36600461227e565b610d95565b61026b6103f236600461227e565b610e6f565b61026b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61026561042c366004612296565b610e86565b61026b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6101fd6104663660046120d9565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b600061049f82610eb3565b90505b919050565b6060600280546104b690612579565b80601f01602080910402602001604051908101604052809291908181526020018280546104e290612579565b801561052f5780601f106105045761010080835404028352916020019161052f565b820191906000526020600020905b81548152906001019060200180831161051257829003601f168201915b5050505050905090565b6000818152600460205260408120546001600160a01b03166105b75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006105de826109d6565b9050806001600160a01b0316836001600160a01b0316141561064c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016105ae565b336001600160a01b038216148061066857506106688133610466565b6106da5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016105ae565b6106e48383610ed8565b505050565b6106f4335b82610f46565b6107105760405162461bcd60e51b81526004016105ae90612483565b6106e483838361103d565b61072582826111e8565b60008281526001602052604090206106e49082610e9e565b600061074883610b09565b82106107aa5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016105ae565b506001600160a01b03821660009081526008602090815260408083208484529091529020545b92915050565b6107e0828261120f565b60008281526001602052604090206106e49082611289565b6108227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610396565b610896576040805162461bcd60e51b81526020600482015260248101919091527f4552433732315072657365744d696e7465725061757365724175746f49643a2060448201527f6d75737420686176652070617573657220726f6c6520746f20756e706175736560648201526084016105ae565b61089e61129e565b565b6106e483838360405180602001604052806000815250610d5d565b6108c4336106ee565b6109295760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b60648201526084016105ae565b61093281611331565b50565b6000610940600a5490565b82106109a35760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016105ae565b600a82815481106109c457634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6000818152600460205260408120546001600160a01b03168061049f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016105ae565b610a777f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610396565b610ae95760405162461bcd60e51b815260206004820152603d60248201527f4552433732315072657365744d696e7465725061757365724175746f49643a2060448201527f6d7573742068617665206d696e74657220726f6c6520746f206d696e7400000060648201526084016105ae565b610afb81610af6600d5490565b6113d8565b610932600d80546001019055565b60006001600160a01b038216610b745760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016105ae565b506001600160a01b031660009081526005602052604090205490565b610bba7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610396565b610c2c5760405162461bcd60e51b815260206004820152603e60248201527f4552433732315072657365744d696e7465725061757365724175746f49643a2060448201527f6d75737420686176652070617573657220726f6c6520746f207061757365000060648201526084016105ae565b61089e611526565b6000828152600160205260408120610c4c90836115a1565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600380546104b690612579565b6001600160a01b038216331415610ce45760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105ae565b3360008181526007602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d51911515815260200190565b60405180910390a35050565b610d673383610f46565b610d835760405162461bcd60e51b81526004016105ae90612483565b610d8f848484846115ad565b50505050565b6000818152600460205260409020546060906001600160a01b0316610e145760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016105ae565b6000610e1e6115e0565b90506000815111610e3e5760405180602001604052806000815250610c4c565b80610e48846115ef565b604051602001610e5992919061233d565b6040516020818303038152906040529392505050565b600081815260016020526040812061049f9061170a565b6107e08282611714565b610e9a828261173a565b5050565b6000610c4c836001600160a01b0384166117be565b60006001600160e01b0319821663780e9d6360e01b148061049f575061049f8261180d565b600081815260066020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610f0d826109d6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600460205260408120546001600160a01b0316610fbf5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016105ae565b6000610fca836109d6565b9050806001600160a01b0316846001600160a01b031614806110055750836001600160a01b0316610ffa84610539565b6001600160a01b0316145b8061103557506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611050826109d6565b6001600160a01b0316146110b85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016105ae565b6001600160a01b03821661111a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105ae565b61112583838361184d565b611130600082610ed8565b6001600160a01b038316600090815260056020526040812080546001929061115990849061251f565b90915550506001600160a01b03821660009081526005602052604081208054600192906111879084906124d4565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008281526020819052604090206001015461120581335b611858565b6106e4838361173a565b6001600160a01b038116331461127f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016105ae565b610e9a82826118bc565b6000610c4c836001600160a01b038416611921565b600c5460ff166112e75760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016105ae565b600c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600061133c826109d6565b905061134a8160008461184d565b611355600083610ed8565b6001600160a01b038116600090815260056020526040812080546001929061137e90849061251f565b909155505060008281526004602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b03821661142e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105ae565b6000818152600460205260409020546001600160a01b0316156114935760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105ae565b61149f6000838361184d565b6001600160a01b03821660009081526005602052604081208054600192906114c89084906124d4565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600c5460ff161561156c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105ae565b600c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113143390565b6000610c4c8383611a3e565b6115b884848461103d565b6115c484848484611a76565b610d8f5760405162461bcd60e51b81526004016105ae90612431565b6060600e80546104b690612579565b60608161161457506040805180820190915260018152600360fc1b60208201526104a2565b8160005b811561163e5780611628816125b4565b91506116379050600a836124ec565b9150611618565b60008167ffffffffffffffff81111561166757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611691576020820181803683370190505b5090505b8415611035576116a660018361251f565b91506116b3600a866125cf565b6116be9060306124d4565b60f81b8183815181106116e157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611703600a866124ec565b9450611695565b600061049f825490565b6000828152602081905260409020600101546117308133611200565b6106e483836118bc565b6117448282610c53565b610e9a576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561177a3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000818152600183016020526040812054611805575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d0565b5060006107d0565b60006001600160e01b031982166380ac58cd60e01b148061183e57506001600160e01b03198216635b5e139f60e01b145b8061049f575061049f82611b83565b6106e4838383611ba8565b6118628282610c53565b610e9a5761187a816001600160a01b03166014611c1a565b611885836020611c1a565b60405160200161189692919061236c565b60408051601f198184030181529082905262461bcd60e51b82526105ae9160040161241e565b6118c68282610c53565b15610e9a576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008181526001830160205260408120548015611a3457600061194560018361251f565b85549091506000906119599060019061251f565b90508181146119da57600086600001828154811061198757634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050808760000184815481106119b857634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b85548690806119f957634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d0565b60009150506107d0565b6000826000018281548110611a6357634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b60006001600160a01b0384163b15611b7857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611aba9033908990889088906004016123e1565b602060405180830381600087803b158015611ad457600080fd5b505af1925050508015611b04575060408051601f3d908101601f19168201909252611b01918101906122f5565b60015b611b5e573d808015611b32576040519150601f19603f3d011682016040523d82523d6000602084013e611b37565b606091505b508051611b565760405162461bcd60e51b81526004016105ae90612431565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611035565b506001949350505050565b60006001600160e01b03198216635a05180f60e01b148061049f575061049f82611dfc565b611bb3838383611e31565b600c5460ff16156106e45760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b60648201526084016105ae565b60606000611c29836002612500565b611c349060026124d4565b67ffffffffffffffff811115611c5a57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c84576020820181803683370190505b509050600360fc1b81600081518110611cad57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611cea57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611d0e846002612500565b611d199060016124d4565b90505b6001811115611dad576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611d5b57634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110611d7f57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611da681612562565b9050611d1c565b508315610c4c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105ae565b60006001600160e01b03198216637965db0b60e01b148061049f57506301ffc9a760e01b6001600160e01b031983161461049f565b6001600160a01b038316611e8c57611e8781600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b611eaf565b816001600160a01b0316836001600160a01b031614611eaf57611eaf8382611eee565b6001600160a01b038216611ecb57611ec681611f8b565b6106e4565b826001600160a01b0316826001600160a01b0316146106e4576106e48282612064565b60006001611efb84610b09565b611f05919061251f565b600083815260096020526040902054909150808214611f58576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600a54600090611f9d9060019061251f565b6000838152600b6020526040812054600a8054939450909284908110611fd357634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600a838154811061200257634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a80548061204857634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061206f83610b09565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b80356001600160a01b03811681146104a257600080fd5b6000602082840312156120d0578081fd5b610c4c826120a8565b600080604083850312156120eb578081fd5b6120f4836120a8565b9150612102602084016120a8565b90509250929050565b60008060006060848603121561211f578081fd5b612128846120a8565b9250612136602085016120a8565b9150604084013590509250925092565b6000806000806080858703121561215b578081fd5b612164856120a8565b9350612172602086016120a8565b925060408501359150606085013567ffffffffffffffff80821115612195578283fd5b818701915087601f8301126121a8578283fd5b8135818111156121ba576121ba61260f565b604051601f8201601f19908116603f011681019083821181831017156121e2576121e261260f565b816040528281528a60208487010111156121fa578586fd5b82602086016020830137918201602001949094529598949750929550505050565b6000806040838503121561222d578182fd5b612236836120a8565b91506020830135801515811461224a578182fd5b809150509250929050565b60008060408385031215612267578182fd5b612270836120a8565b946020939093013593505050565b60006020828403121561228f578081fd5b5035919050565b600080604083850312156122a8578182fd5b82359150612102602084016120a8565b600080604083850312156122ca578182fd5b50508035926020909101359150565b6000602082840312156122ea578081fd5b8135610c4c81612625565b600060208284031215612306578081fd5b8151610c4c81612625565b60008151808452612329816020860160208601612536565b601f01601f19169290920160200192915050565b6000835161234f818460208801612536565b835190830190612363818360208801612536565b01949350505050565b60007f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000825283516123a4816017850160208801612536565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516123d5816028840160208801612536565b01602801949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061241490830184612311565b9695505050505050565b600060208252610c4c6020830184612311565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156124e7576124e76125e3565b500190565b6000826124fb576124fb6125f9565b500490565b600081600019048311821515161561251a5761251a6125e3565b500290565b600082821015612531576125316125e3565b500390565b60005b83811015612551578181015183820152602001612539565b83811115610d8f5750506000910152565b600081612571576125716125e3565b506000190190565b600181811c9082168061258d57607f821691505b602082108114156125ae57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125c8576125c86125e3565b5060010190565b6000826125de576125de6125f9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461093257600080fdfea26469706673582212207c3140b8543572afa84e5729a8fa58be87a95dc18779058077802a524585368b64736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC721URIStorage.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC721URIStorage.json
new file mode 100644
index 0000000..21eb130
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC721URIStorage.json
@@ -0,0 +1,341 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC721URIStorage",
+ "sourceName": "contracts/token/ERC721/extensions/ERC721URIStorage.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "approved",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenURI",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC777.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC777.json
new file mode 100644
index 0000000..d319de2
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC777.json
@@ -0,0 +1,587 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC777",
+ "sourceName": "contracts/token/ERC777/ERC777.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name_",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol_",
+ "type": "string"
+ },
+ {
+ "internalType": "address[]",
+ "name": "defaultOperators_",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "tokenHolder",
+ "type": "address"
+ }
+ ],
+ "name": "AuthorizedOperator",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "Burned",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "Minted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "tokenHolder",
+ "type": "address"
+ }
+ ],
+ "name": "RevokedOperator",
+ "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": "amount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "Sent",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "holder",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "authorizeOperator",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenHolder",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "burn",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "defaultOperators",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "granularity",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenHolder",
+ "type": "address"
+ }
+ ],
+ "name": "isOperatorFor",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "operatorBurn",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "operatorSend",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "revokeOperator",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "send",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "holder",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x60806040523480156200001157600080fd5b5060405162001d3b38038062001d3b8339810160408190526200003491620003b0565b82516200004990600290602086019062000221565b5081516200005f90600390602085019062000221565b50805162000075906004906020840190620002b0565b5060005b8151811015620000f157600160056000848481518110620000aa57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580620000e88162000535565b91505062000079565b506040516329965a1d60e01b815230600482018190527fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce217705460248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b1580156200016c57600080fd5b505af115801562000181573d6000803e3d6000fd5b50506040516329965a1d60e01b815230600482018190527faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a60248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad2492506329965a1d9150606401600060405180830381600087803b158015620001ff57600080fd5b505af115801562000214573d6000803e3d6000fd5b5050505050505062000573565b8280546200022f90620004f8565b90600052602060002090601f0160209004810192826200025357600085556200029e565b82601f106200026e57805160ff19168380011785556200029e565b828001600101855582156200029e579182015b828111156200029e57825182559160200191906001019062000281565b50620002ac92915062000308565b5090565b8280548282559060005260206000209081019282156200029e579160200282015b828111156200029e57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620002d1565b5b80821115620002ac576000815560010162000309565b600082601f83011262000330578081fd5b81516001600160401b038111156200034c576200034c6200055d565b602062000362601f8301601f19168201620004c5565b828152858284870101111562000376578384fd5b835b838110156200039557858101830151828201840152820162000378565b83811115620003a657848385840101525b5095945050505050565b600080600060608486031215620003c5578283fd5b83516001600160401b0380821115620003dc578485fd5b620003ea878388016200031f565b945060209150818601518181111562000401578485fd5b6200040f888289016200031f565b94505060408601518181111562000424578384fd5b8601601f8101881362000435578384fd5b8051828111156200044a576200044a6200055d565b8060051b92506200045d848401620004c5565b8181528481019083860185850187018c101562000478578788fd5b8795505b83861015620004b457805194506001600160a01b03851685146200049e578788fd5b848352600195909501949186019186016200047c565b508096505050505050509250925092565b604051601f8201601f191681016001600160401b0381118282101715620004f057620004f06200055d565b604052919050565b600181811c908216806200050d57607f821691505b602082108114156200052f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156200055657634e487b7160e01b81526011600452602481fd5b5060010190565b634e487b7160e01b600052604160045260246000fd5b6117b880620005836000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063959b8c3f116100a2578063d95b637111610071578063d95b63711461022b578063dd62ed3e1461023e578063fad8b32a14610277578063fc673c4f1461028a578063fe9d93031461029d57610116565b8063959b8c3f146101ea57806395d89b41146101fd5780639bd9bbc614610205578063a9059cbb1461021857610116565b806323b872dd116100e957806323b872dd14610183578063313ce56714610196578063556f0dc7146101a557806362ad1b83146101ac57806370a08231146101c157610116565b806306e485381461011b57806306fdde0314610139578063095ea7b31461014e57806318160ddd14610171575b600080fd5b6101236102b0565b60405161013091906115af565b60405180910390f35b610141610312565b60405161013091906115fc565b61016161015c3660046113c6565b61039b565b6040519015158152602001610130565b6001545b604051908152602001610130565b6101616101913660046112f6565b6103b3565b60405160128152602001610130565b6001610175565b6101bf6101ba366004611336565b61057c565b005b6101756101cf366004611286565b6001600160a01b031660009081526020819052604090205490565b6101bf6101f8366004611286565b6105b8565b6101416106d6565b6101bf6102133660046113f1565b6106e5565b6101616102263660046113c6565b610708565b6101616102393660046112be565b6107bb565b61017561024c3660046112be565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6101bf610285366004611286565b61085d565b6101bf610298366004611448565b610979565b6101bf6102ab3660046114c5565b6109b1565b6060600480548060200260200160405190810160405280929190818152602001828054801561030857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102ea575b5050505050905090565b60606002805461032190611703565b80601f016020809104026020016040519081016040528092919081815260200182805461034d90611703565b80156103085780601f1061036f57610100808354040283529160200191610308565b820191906000526020600020905b81548152906001019060200180831161037d57509395945050505050565b6000336103a98185856109d0565b5060019392505050565b60006001600160a01b0383166103e45760405162461bcd60e51b81526004016103db9061160f565b60405180910390fd5b6001600160a01b0384166104495760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016103db565b600033905061047a818686866040518060200160405280600081525060405180602001604052806000815250610af7565b6104a6818686866040518060200160405280600081525060405180602001604052806000815250610c2e565b6001600160a01b038086166000908152600860209081526040808320938516835292905220548381101561052e5760405162461bcd60e51b815260206004820152602960248201527f4552433737373a207472616e7366657220616d6f756e74206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016103db565b610542868361053d87856116ec565b6109d0565b6105708287878760405180602001604052806000815250604051806020016040528060008152506000610d94565b50600195945050505050565b61058633866107bb565b6105a25760405162461bcd60e51b81526004016103db90611653565b6105b185858585856001610f68565b5050505050565b336001600160a01b038216141561061d5760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b60648201526084016103db565b6001600160a01b03811660009081526005602052604090205460ff161561066e573360009081526007602090815260408083206001600160a01b03851684529091529020805460ff1916905561069d565b3360009081526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b60606003805461032190611703565b61070333848484604051806020016040528060008152506001610f68565b505050565b60006001600160a01b0383166107305760405162461bcd60e51b81526004016103db9061160f565b6000339050610761818286866040518060200160405280600081525060405180602001604052806000815250610af7565b61078d818286866040518060200160405280600081525060405180602001604052806000815250610c2e565b6103a98182868660405180602001604052806000815250604051806020016040528060008152506000610d94565b6000816001600160a01b0316836001600160a01b0316148061082657506001600160a01b03831660009081526005602052604090205460ff16801561082657506001600160a01b0380831660009081526007602090815260408083209387168352929052205460ff16155b8061085657506001600160a01b0380831660009081526006602090815260408083209387168352929052205460ff165b9392505050565b6001600160a01b0381163314156108c05760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b60648201526084016103db565b6001600160a01b03811660009081526005602052604090205460ff1615610914573360009081526007602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610940565b3360009081526006602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b61098333856107bb565b61099f5760405162461bcd60e51b81526004016103db90611653565b6109ab8484848461104b565b50505050565b6109cc3383836040518060200160405280600081525061104b565b5050565b6001600160a01b038316610a345760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103db565b6001600160a01b038216610a965760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103db565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca9060440160206040518083038186803b158015610b7357600080fd5b505afa158015610b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bab91906112a2565b90506001600160a01b03811615610c2557604051633ad5cbc160e11b81526001600160a01b038216906375ab978290610bf2908a908a908a908a908a908a90600401611555565b600060405180830381600087803b158015610c0c57600080fd5b505af1158015610c20573d6000803e3d6000fd5b505050505b50505050505050565b6001600160a01b03851660009081526020819052604090205483811015610ca75760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b60648201526084016103db565b6001600160a01b03808716600090815260208190526040808220878503905591871681529081208054869290610cde9084906116d4565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987878787604051610d369392919061169f565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610d8391815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca9060440160206040518083038186803b158015610e1057600080fd5b505afa158015610e24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4891906112a2565b90506001600160a01b03811615610ec4576040516223de2960e01b81526001600160a01b038216906223de2990610e8d908b908b908b908b908b908b90600401611555565b600060405180830381600087803b158015610ea757600080fd5b505af1158015610ebb573d6000803e3d6000fd5b50505050610f5e565b8115610f5e576001600160a01b0386163b15610f5e5760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a4016103db565b5050505050505050565b6001600160a01b038616610fc95760405162461bcd60e51b815260206004820152602260248201527f4552433737373a2073656e642066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016103db565b6001600160a01b03851661101f5760405162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f206164647265737360448201526064016103db565b3361102e818888888888610af7565b61103c818888888888610c2e565b610c2581888888888888610d94565b6001600160a01b0384166110ac5760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016103db565b336110bc81866000878787610af7565b6001600160a01b038516600090815260208190526040902054848110156111315760405162461bcd60e51b815260206004820152602360248201527f4552433737373a206275726e20616d6f756e7420657863656564732062616c616044820152626e636560e81b60648201526084016103db565b6001600160a01b03861660009081526020819052604081208683039055600180548792906111609084906116ec565b92505081905550856001600160a01b0316826001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a40988787876040516111ae9392919061169f565b60405180910390a36040518581526000906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050565b600082601f83011261120f578081fd5b813567ffffffffffffffff8082111561122a5761122a611754565b604051601f8301601f19908116603f0116810190828211818310171561125257611252611754565b8160405283815286602085880101111561126a578485fd5b8360208701602083013792830160200193909352509392505050565b600060208284031215611297578081fd5b81356108568161176a565b6000602082840312156112b3578081fd5b81516108568161176a565b600080604083850312156112d0578081fd5b82356112db8161176a565b915060208301356112eb8161176a565b809150509250929050565b60008060006060848603121561130a578081fd5b83356113158161176a565b925060208401356113258161176a565b929592945050506040919091013590565b600080600080600060a0868803121561134d578081fd5b85356113588161176a565b945060208601356113688161176a565b935060408601359250606086013567ffffffffffffffff8082111561138b578283fd5b61139789838a016111ff565b935060808801359150808211156113ac578283fd5b506113b9888289016111ff565b9150509295509295909350565b600080604083850312156113d8578182fd5b82356113e38161176a565b946020939093013593505050565b600080600060608486031215611405578283fd5b83356114108161176a565b925060208401359150604084013567ffffffffffffffff811115611432578182fd5b61143e868287016111ff565b9150509250925092565b6000806000806080858703121561145d578384fd5b84356114688161176a565b935060208501359250604085013567ffffffffffffffff8082111561148b578384fd5b611497888389016111ff565b935060608701359150808211156114ac578283fd5b506114b9878288016111ff565b91505092959194509250565b600080604083850312156114d7578182fd5b82359150602083013567ffffffffffffffff8111156114f4578182fd5b611500858286016111ff565b9150509250929050565b60008151808452815b8181101561152f57602081850181015186830182015201611513565b818111156115405782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c0608082018190526000906115909083018561150a565b82810360a08401526115a2818561150a565b9998505050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156115f05783516001600160a01b0316835292840192918401916001016115cb565b50909695505050505050565b600060208252610856602083018461150a565b60208082526024908201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b6000848252606060208301526116b8606083018561150a565b82810360408401526116ca818561150a565b9695505050505050565b600082198211156116e7576116e761173e565b500190565b6000828210156116fe576116fe61173e565b500390565b600181811c9082168061171757607f821691505b6020821081141561173857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461177f57600080fd5b5056fea26469706673582212208c42e235847878fc7d8ada1e55ed07d1efdb2128f8d741cd4debfe867146b70b64736f6c63430008030033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063959b8c3f116100a2578063d95b637111610071578063d95b63711461022b578063dd62ed3e1461023e578063fad8b32a14610277578063fc673c4f1461028a578063fe9d93031461029d57610116565b8063959b8c3f146101ea57806395d89b41146101fd5780639bd9bbc614610205578063a9059cbb1461021857610116565b806323b872dd116100e957806323b872dd14610183578063313ce56714610196578063556f0dc7146101a557806362ad1b83146101ac57806370a08231146101c157610116565b806306e485381461011b57806306fdde0314610139578063095ea7b31461014e57806318160ddd14610171575b600080fd5b6101236102b0565b60405161013091906115af565b60405180910390f35b610141610312565b60405161013091906115fc565b61016161015c3660046113c6565b61039b565b6040519015158152602001610130565b6001545b604051908152602001610130565b6101616101913660046112f6565b6103b3565b60405160128152602001610130565b6001610175565b6101bf6101ba366004611336565b61057c565b005b6101756101cf366004611286565b6001600160a01b031660009081526020819052604090205490565b6101bf6101f8366004611286565b6105b8565b6101416106d6565b6101bf6102133660046113f1565b6106e5565b6101616102263660046113c6565b610708565b6101616102393660046112be565b6107bb565b61017561024c3660046112be565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6101bf610285366004611286565b61085d565b6101bf610298366004611448565b610979565b6101bf6102ab3660046114c5565b6109b1565b6060600480548060200260200160405190810160405280929190818152602001828054801561030857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102ea575b5050505050905090565b60606002805461032190611703565b80601f016020809104026020016040519081016040528092919081815260200182805461034d90611703565b80156103085780601f1061036f57610100808354040283529160200191610308565b820191906000526020600020905b81548152906001019060200180831161037d57509395945050505050565b6000336103a98185856109d0565b5060019392505050565b60006001600160a01b0383166103e45760405162461bcd60e51b81526004016103db9061160f565b60405180910390fd5b6001600160a01b0384166104495760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016103db565b600033905061047a818686866040518060200160405280600081525060405180602001604052806000815250610af7565b6104a6818686866040518060200160405280600081525060405180602001604052806000815250610c2e565b6001600160a01b038086166000908152600860209081526040808320938516835292905220548381101561052e5760405162461bcd60e51b815260206004820152602960248201527f4552433737373a207472616e7366657220616d6f756e74206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016103db565b610542868361053d87856116ec565b6109d0565b6105708287878760405180602001604052806000815250604051806020016040528060008152506000610d94565b50600195945050505050565b61058633866107bb565b6105a25760405162461bcd60e51b81526004016103db90611653565b6105b185858585856001610f68565b5050505050565b336001600160a01b038216141561061d5760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b60648201526084016103db565b6001600160a01b03811660009081526005602052604090205460ff161561066e573360009081526007602090815260408083206001600160a01b03851684529091529020805460ff1916905561069d565b3360009081526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b60606003805461032190611703565b61070333848484604051806020016040528060008152506001610f68565b505050565b60006001600160a01b0383166107305760405162461bcd60e51b81526004016103db9061160f565b6000339050610761818286866040518060200160405280600081525060405180602001604052806000815250610af7565b61078d818286866040518060200160405280600081525060405180602001604052806000815250610c2e565b6103a98182868660405180602001604052806000815250604051806020016040528060008152506000610d94565b6000816001600160a01b0316836001600160a01b0316148061082657506001600160a01b03831660009081526005602052604090205460ff16801561082657506001600160a01b0380831660009081526007602090815260408083209387168352929052205460ff16155b8061085657506001600160a01b0380831660009081526006602090815260408083209387168352929052205460ff165b9392505050565b6001600160a01b0381163314156108c05760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b60648201526084016103db565b6001600160a01b03811660009081526005602052604090205460ff1615610914573360009081526007602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610940565b3360009081526006602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b61098333856107bb565b61099f5760405162461bcd60e51b81526004016103db90611653565b6109ab8484848461104b565b50505050565b6109cc3383836040518060200160405280600081525061104b565b5050565b6001600160a01b038316610a345760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103db565b6001600160a01b038216610a965760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103db565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca9060440160206040518083038186803b158015610b7357600080fd5b505afa158015610b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bab91906112a2565b90506001600160a01b03811615610c2557604051633ad5cbc160e11b81526001600160a01b038216906375ab978290610bf2908a908a908a908a908a908a90600401611555565b600060405180830381600087803b158015610c0c57600080fd5b505af1158015610c20573d6000803e3d6000fd5b505050505b50505050505050565b6001600160a01b03851660009081526020819052604090205483811015610ca75760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b60648201526084016103db565b6001600160a01b03808716600090815260208190526040808220878503905591871681529081208054869290610cde9084906116d4565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987878787604051610d369392919061169f565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610d8391815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca9060440160206040518083038186803b158015610e1057600080fd5b505afa158015610e24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4891906112a2565b90506001600160a01b03811615610ec4576040516223de2960e01b81526001600160a01b038216906223de2990610e8d908b908b908b908b908b908b90600401611555565b600060405180830381600087803b158015610ea757600080fd5b505af1158015610ebb573d6000803e3d6000fd5b50505050610f5e565b8115610f5e576001600160a01b0386163b15610f5e5760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a4016103db565b5050505050505050565b6001600160a01b038616610fc95760405162461bcd60e51b815260206004820152602260248201527f4552433737373a2073656e642066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016103db565b6001600160a01b03851661101f5760405162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f206164647265737360448201526064016103db565b3361102e818888888888610af7565b61103c818888888888610c2e565b610c2581888888888888610d94565b6001600160a01b0384166110ac5760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016103db565b336110bc81866000878787610af7565b6001600160a01b038516600090815260208190526040902054848110156111315760405162461bcd60e51b815260206004820152602360248201527f4552433737373a206275726e20616d6f756e7420657863656564732062616c616044820152626e636560e81b60648201526084016103db565b6001600160a01b03861660009081526020819052604081208683039055600180548792906111609084906116ec565b92505081905550856001600160a01b0316826001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a40988787876040516111ae9392919061169f565b60405180910390a36040518581526000906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050565b600082601f83011261120f578081fd5b813567ffffffffffffffff8082111561122a5761122a611754565b604051601f8301601f19908116603f0116810190828211818310171561125257611252611754565b8160405283815286602085880101111561126a578485fd5b8360208701602083013792830160200193909352509392505050565b600060208284031215611297578081fd5b81356108568161176a565b6000602082840312156112b3578081fd5b81516108568161176a565b600080604083850312156112d0578081fd5b82356112db8161176a565b915060208301356112eb8161176a565b809150509250929050565b60008060006060848603121561130a578081fd5b83356113158161176a565b925060208401356113258161176a565b929592945050506040919091013590565b600080600080600060a0868803121561134d578081fd5b85356113588161176a565b945060208601356113688161176a565b935060408601359250606086013567ffffffffffffffff8082111561138b578283fd5b61139789838a016111ff565b935060808801359150808211156113ac578283fd5b506113b9888289016111ff565b9150509295509295909350565b600080604083850312156113d8578182fd5b82356113e38161176a565b946020939093013593505050565b600080600060608486031215611405578283fd5b83356114108161176a565b925060208401359150604084013567ffffffffffffffff811115611432578182fd5b61143e868287016111ff565b9150509250925092565b6000806000806080858703121561145d578384fd5b84356114688161176a565b935060208501359250604085013567ffffffffffffffff8082111561148b578384fd5b611497888389016111ff565b935060608701359150808211156114ac578283fd5b506114b9878288016111ff565b91505092959194509250565b600080604083850312156114d7578182fd5b82359150602083013567ffffffffffffffff8111156114f4578182fd5b611500858286016111ff565b9150509250929050565b60008151808452815b8181101561152f57602081850181015186830182015201611513565b818111156115405782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c0608082018190526000906115909083018561150a565b82810360a08401526115a2818561150a565b9998505050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156115f05783516001600160a01b0316835292840192918401916001016115cb565b50909695505050505050565b600060208252610856602083018461150a565b60208082526024908201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b6000848252606060208301526116b8606083018561150a565b82810360408401526116ca818561150a565b9695505050505050565b600082198211156116e7576116e761173e565b500190565b6000828210156116fe576116fe61173e565b500390565b600181811c9082168061171757607f821691505b6020821081141561173857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461177f57600080fd5b5056fea26469706673582212208c42e235847878fc7d8ada1e55ed07d1efdb2128f8d741cd4debfe867146b70b64736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ERC777PresetFixedSupply.json b/node_modules/@openzeppelin/contracts/build/contracts/ERC777PresetFixedSupply.json
new file mode 100644
index 0000000..87e44b3
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ERC777PresetFixedSupply.json
@@ -0,0 +1,597 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ERC777PresetFixedSupply",
+ "sourceName": "contracts/token/ERC777/presets/ERC777PresetFixedSupply.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol",
+ "type": "string"
+ },
+ {
+ "internalType": "address[]",
+ "name": "defaultOperators",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "initialSupply",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "tokenHolder",
+ "type": "address"
+ }
+ ],
+ "name": "AuthorizedOperator",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "Burned",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "Minted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "tokenHolder",
+ "type": "address"
+ }
+ ],
+ "name": "RevokedOperator",
+ "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": "amount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "Sent",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "holder",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "authorizeOperator",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenHolder",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "burn",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "defaultOperators",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "granularity",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenHolder",
+ "type": "address"
+ }
+ ],
+ "name": "isOperatorFor",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "operatorBurn",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "operatorSend",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "revokeOperator",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "send",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "holder",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x60806040523480156200001157600080fd5b506040516200222f3803806200222f833981016040819052620000349162000775565b84848482600290805190602001906200004f929190620005c9565b50815162000065906003906020850190620005c9565b5080516200007b90600490602084019062000658565b5060005b8151811015620000f757600160056000848481518110620000b057634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580620000ee8162000a17565b9150506200007f565b506040516329965a1d60e01b815230600482018190527fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce217705460248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b1580156200017257600080fd5b505af115801562000187573d6000803e3d6000fd5b50506040516329965a1d60e01b815230600482018190527faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a60248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad2492506329965a1d9150606401600060405180830381600087803b1580156200020557600080fd5b505af11580156200021a573d6000803e3d6000fd5b5050505050505062000253818360405180602001604052806000815250604051806020016040528060008152506200025e60201b60201c565b505050505062000a61565b6200026e84848484600162000274565b50505050565b6001600160a01b038516620002d05760405162461bcd60e51b815260206004820181905260248201527f4552433737373a206d696e7420746f20746865207a65726f206164647265737360448201526064015b60405180910390fd5b60003390508460016000828254620002e9919062000990565b90915550506001600160a01b038616600090815260208190526040812080548792906200031890849062000990565b909155506200033090508160008888888888620003ca565b856001600160a01b0316816001600160a01b03167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d878787604051620003799392919062000924565b60405180910390a36040518581526001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca9060440160206040518083038186803b1580156200044757600080fd5b505afa1580156200045c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000482919062000751565b90506001600160a01b0381161562000504576040516223de2960e01b81526001600160a01b038216906223de2990620004ca908b908b908b908b908b908b90600401620008c6565b600060405180830381600087803b158015620004e557600080fd5b505af1158015620004fa573d6000803e3d6000fd5b50505050620005b5565b8115620005b5576200052a866001600160a01b0316620005bf60201b620009d01760201c565b15620005b55760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a401620002c7565b5050505050505050565b803b15155b919050565b828054620005d790620009da565b90600052602060002090601f016020900481019282620005fb576000855562000646565b82601f106200061657805160ff191683800117855562000646565b8280016001018555821562000646579182015b828111156200064657825182559160200191906001019062000629565b5062000654929150620006b0565b5090565b82805482825590600052602060002090810192821562000646579160200282015b828111156200064657825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000679565b5b80821115620006545760008155600101620006b1565b80516001600160a01b0381168114620005c457600080fd5b600082601f830112620006f0578081fd5b81516001600160401b038111156200070c576200070c62000a4b565b62000721601f8201601f19166020016200095d565b81815284602083860101111562000736578283fd5b62000749826020830160208701620009ab565b949350505050565b60006020828403121562000763578081fd5b6200076e82620006c7565b9392505050565b600080600080600060a086880312156200078d578081fd5b85516001600160401b0380821115620007a4578283fd5b620007b289838a01620006df565b9650602091508188015181811115620007c9578384fd5b620007d78a828b01620006df565b965050604088015181811115620007ec578384fd5b8801601f81018a13620007fd578384fd5b80518281111562000812576200081262000a4b565b8060051b9250620008258484016200095d565b8181528481019083860185850187018e101562000840578788fd5b8795505b838610156200086d576200085881620006c7565b83526001959095019491860191860162000844565b50809850505050505050606086015191506200088c60808701620006c7565b90509295509295909350565b60008151808452620008b2816020860160208601620009ab565b601f01601f19169290920160200192915050565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c060808201819052600090620009039083018562000898565b82810360a084015262000917818562000898565b9998505050505050505050565b6000848252606060208301526200093f606083018562000898565b828103604084015262000953818562000898565b9695505050505050565b604051601f8201601f191681016001600160401b038111828210171562000988576200098862000a4b565b604052919050565b60008219821115620009a657620009a662000a35565b500190565b60005b83811015620009c8578181015183820152602001620009ae565b838111156200026e5750506000910152565b600181811c90821680620009ef57607f821691505b6020821081141562000a1157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000a2e5762000a2e62000a35565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6117be8062000a716000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063959b8c3f116100a2578063d95b637111610071578063d95b63711461022b578063dd62ed3e1461023e578063fad8b32a14610277578063fc673c4f1461028a578063fe9d93031461029d57610116565b8063959b8c3f146101ea57806395d89b41146101fd5780639bd9bbc614610205578063a9059cbb1461021857610116565b806323b872dd116100e957806323b872dd14610183578063313ce56714610196578063556f0dc7146101a557806362ad1b83146101ac57806370a08231146101c157610116565b806306e485381461011b57806306fdde0314610139578063095ea7b31461014e57806318160ddd14610171575b600080fd5b6101236102b0565b60405161013091906115b5565b60405180910390f35b610141610312565b6040516101309190611602565b61016161015c3660046113cc565b61039b565b6040519015158152602001610130565b6001545b604051908152602001610130565b6101616101913660046112fc565b6103b3565b60405160128152602001610130565b6001610175565b6101bf6101ba36600461133c565b61057c565b005b6101756101cf36600461128c565b6001600160a01b031660009081526020819052604090205490565b6101bf6101f836600461128c565b6105b8565b6101416106d6565b6101bf6102133660046113f7565b6106e5565b6101616102263660046113cc565b610708565b6101616102393660046112c4565b6107bb565b61017561024c3660046112c4565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6101bf61028536600461128c565b61085d565b6101bf61029836600461144e565b610979565b6101bf6102ab3660046114cb565b6109b1565b6060600480548060200260200160405190810160405280929190818152602001828054801561030857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102ea575b5050505050905090565b60606002805461032190611709565b80601f016020809104026020016040519081016040528092919081815260200182805461034d90611709565b80156103085780601f1061036f57610100808354040283529160200191610308565b820191906000526020600020905b81548152906001019060200180831161037d57509395945050505050565b6000336103a98185856109d6565b5060019392505050565b60006001600160a01b0383166103e45760405162461bcd60e51b81526004016103db90611615565b60405180910390fd5b6001600160a01b0384166104495760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016103db565b600033905061047a818686866040518060200160405280600081525060405180602001604052806000815250610afd565b6104a6818686866040518060200160405280600081525060405180602001604052806000815250610c34565b6001600160a01b038086166000908152600860209081526040808320938516835292905220548381101561052e5760405162461bcd60e51b815260206004820152602960248201527f4552433737373a207472616e7366657220616d6f756e74206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016103db565b610542868361053d87856116f2565b6109d6565b6105708287878760405180602001604052806000815250604051806020016040528060008152506000610d9a565b50600195945050505050565b61058633866107bb565b6105a25760405162461bcd60e51b81526004016103db90611659565b6105b185858585856001610f6e565b5050505050565b336001600160a01b038216141561061d5760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b60648201526084016103db565b6001600160a01b03811660009081526005602052604090205460ff161561066e573360009081526007602090815260408083206001600160a01b03851684529091529020805460ff1916905561069d565b3360009081526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b60606003805461032190611709565b61070333848484604051806020016040528060008152506001610f6e565b505050565b60006001600160a01b0383166107305760405162461bcd60e51b81526004016103db90611615565b6000339050610761818286866040518060200160405280600081525060405180602001604052806000815250610afd565b61078d818286866040518060200160405280600081525060405180602001604052806000815250610c34565b6103a98182868660405180602001604052806000815250604051806020016040528060008152506000610d9a565b6000816001600160a01b0316836001600160a01b0316148061082657506001600160a01b03831660009081526005602052604090205460ff16801561082657506001600160a01b0380831660009081526007602090815260408083209387168352929052205460ff16155b8061085657506001600160a01b0380831660009081526006602090815260408083209387168352929052205460ff165b9392505050565b6001600160a01b0381163314156108c05760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b60648201526084016103db565b6001600160a01b03811660009081526005602052604090205460ff1615610914573360009081526007602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610940565b3360009081526006602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b61098333856107bb565b61099f5760405162461bcd60e51b81526004016103db90611659565b6109ab84848484611051565b50505050565b6109cc33838360405180602001604052806000815250611051565b5050565b3b151590565b6001600160a01b038316610a3a5760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103db565b6001600160a01b038216610a9c5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103db565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca9060440160206040518083038186803b158015610b7957600080fd5b505afa158015610b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb191906112a8565b90506001600160a01b03811615610c2b57604051633ad5cbc160e11b81526001600160a01b038216906375ab978290610bf8908a908a908a908a908a908a9060040161155b565b600060405180830381600087803b158015610c1257600080fd5b505af1158015610c26573d6000803e3d6000fd5b505050505b50505050505050565b6001600160a01b03851660009081526020819052604090205483811015610cad5760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b60648201526084016103db565b6001600160a01b03808716600090815260208190526040808220878503905591871681529081208054869290610ce49084906116da565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987878787604051610d3c939291906116a5565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610d8991815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca9060440160206040518083038186803b158015610e1657600080fd5b505afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e91906112a8565b90506001600160a01b03811615610eca576040516223de2960e01b81526001600160a01b038216906223de2990610e93908b908b908b908b908b908b9060040161155b565b600060405180830381600087803b158015610ead57600080fd5b505af1158015610ec1573d6000803e3d6000fd5b50505050610f64565b8115610f64576001600160a01b0386163b15610f645760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a4016103db565b5050505050505050565b6001600160a01b038616610fcf5760405162461bcd60e51b815260206004820152602260248201527f4552433737373a2073656e642066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016103db565b6001600160a01b0385166110255760405162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f206164647265737360448201526064016103db565b33611034818888888888610afd565b611042818888888888610c34565b610c2b81888888888888610d9a565b6001600160a01b0384166110b25760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016103db565b336110c281866000878787610afd565b6001600160a01b038516600090815260208190526040902054848110156111375760405162461bcd60e51b815260206004820152602360248201527f4552433737373a206275726e20616d6f756e7420657863656564732062616c616044820152626e636560e81b60648201526084016103db565b6001600160a01b03861660009081526020819052604081208683039055600180548792906111669084906116f2565b92505081905550856001600160a01b0316826001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a40988787876040516111b4939291906116a5565b60405180910390a36040518581526000906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050565b600082601f830112611215578081fd5b813567ffffffffffffffff808211156112305761123061175a565b604051601f8301601f19908116603f011681019082821181831017156112585761125861175a565b81604052838152866020858801011115611270578485fd5b8360208701602083013792830160200193909352509392505050565b60006020828403121561129d578081fd5b813561085681611770565b6000602082840312156112b9578081fd5b815161085681611770565b600080604083850312156112d6578081fd5b82356112e181611770565b915060208301356112f181611770565b809150509250929050565b600080600060608486031215611310578081fd5b833561131b81611770565b9250602084013561132b81611770565b929592945050506040919091013590565b600080600080600060a08688031215611353578081fd5b853561135e81611770565b9450602086013561136e81611770565b935060408601359250606086013567ffffffffffffffff80821115611391578283fd5b61139d89838a01611205565b935060808801359150808211156113b2578283fd5b506113bf88828901611205565b9150509295509295909350565b600080604083850312156113de578182fd5b82356113e981611770565b946020939093013593505050565b60008060006060848603121561140b578283fd5b833561141681611770565b925060208401359150604084013567ffffffffffffffff811115611438578182fd5b61144486828701611205565b9150509250925092565b60008060008060808587031215611463578384fd5b843561146e81611770565b935060208501359250604085013567ffffffffffffffff80821115611491578384fd5b61149d88838901611205565b935060608701359150808211156114b2578283fd5b506114bf87828801611205565b91505092959194509250565b600080604083850312156114dd578182fd5b82359150602083013567ffffffffffffffff8111156114fa578182fd5b61150685828601611205565b9150509250929050565b60008151808452815b8181101561153557602081850181015186830182015201611519565b818111156115465782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c06080820181905260009061159690830185611510565b82810360a08401526115a88185611510565b9998505050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156115f65783516001600160a01b0316835292840192918401916001016115d1565b50909695505050505050565b6000602082526108566020830184611510565b60208082526024908201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b6000848252606060208301526116be6060830185611510565b82810360408401526116d08185611510565b9695505050505050565b600082198211156116ed576116ed611744565b500190565b60008282101561170457611704611744565b500390565b600181811c9082168061171d57607f821691505b6020821081141561173e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461178557600080fd5b5056fea2646970667358221220a087bebce295c54528d46a529b236de0c8206d5e357ef6a1a716cef58739474f64736f6c63430008030033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063959b8c3f116100a2578063d95b637111610071578063d95b63711461022b578063dd62ed3e1461023e578063fad8b32a14610277578063fc673c4f1461028a578063fe9d93031461029d57610116565b8063959b8c3f146101ea57806395d89b41146101fd5780639bd9bbc614610205578063a9059cbb1461021857610116565b806323b872dd116100e957806323b872dd14610183578063313ce56714610196578063556f0dc7146101a557806362ad1b83146101ac57806370a08231146101c157610116565b806306e485381461011b57806306fdde0314610139578063095ea7b31461014e57806318160ddd14610171575b600080fd5b6101236102b0565b60405161013091906115b5565b60405180910390f35b610141610312565b6040516101309190611602565b61016161015c3660046113cc565b61039b565b6040519015158152602001610130565b6001545b604051908152602001610130565b6101616101913660046112fc565b6103b3565b60405160128152602001610130565b6001610175565b6101bf6101ba36600461133c565b61057c565b005b6101756101cf36600461128c565b6001600160a01b031660009081526020819052604090205490565b6101bf6101f836600461128c565b6105b8565b6101416106d6565b6101bf6102133660046113f7565b6106e5565b6101616102263660046113cc565b610708565b6101616102393660046112c4565b6107bb565b61017561024c3660046112c4565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6101bf61028536600461128c565b61085d565b6101bf61029836600461144e565b610979565b6101bf6102ab3660046114cb565b6109b1565b6060600480548060200260200160405190810160405280929190818152602001828054801561030857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102ea575b5050505050905090565b60606002805461032190611709565b80601f016020809104026020016040519081016040528092919081815260200182805461034d90611709565b80156103085780601f1061036f57610100808354040283529160200191610308565b820191906000526020600020905b81548152906001019060200180831161037d57509395945050505050565b6000336103a98185856109d6565b5060019392505050565b60006001600160a01b0383166103e45760405162461bcd60e51b81526004016103db90611615565b60405180910390fd5b6001600160a01b0384166104495760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016103db565b600033905061047a818686866040518060200160405280600081525060405180602001604052806000815250610afd565b6104a6818686866040518060200160405280600081525060405180602001604052806000815250610c34565b6001600160a01b038086166000908152600860209081526040808320938516835292905220548381101561052e5760405162461bcd60e51b815260206004820152602960248201527f4552433737373a207472616e7366657220616d6f756e74206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016103db565b610542868361053d87856116f2565b6109d6565b6105708287878760405180602001604052806000815250604051806020016040528060008152506000610d9a565b50600195945050505050565b61058633866107bb565b6105a25760405162461bcd60e51b81526004016103db90611659565b6105b185858585856001610f6e565b5050505050565b336001600160a01b038216141561061d5760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b60648201526084016103db565b6001600160a01b03811660009081526005602052604090205460ff161561066e573360009081526007602090815260408083206001600160a01b03851684529091529020805460ff1916905561069d565b3360009081526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b60606003805461032190611709565b61070333848484604051806020016040528060008152506001610f6e565b505050565b60006001600160a01b0383166107305760405162461bcd60e51b81526004016103db90611615565b6000339050610761818286866040518060200160405280600081525060405180602001604052806000815250610afd565b61078d818286866040518060200160405280600081525060405180602001604052806000815250610c34565b6103a98182868660405180602001604052806000815250604051806020016040528060008152506000610d9a565b6000816001600160a01b0316836001600160a01b0316148061082657506001600160a01b03831660009081526005602052604090205460ff16801561082657506001600160a01b0380831660009081526007602090815260408083209387168352929052205460ff16155b8061085657506001600160a01b0380831660009081526006602090815260408083209387168352929052205460ff165b9392505050565b6001600160a01b0381163314156108c05760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b60648201526084016103db565b6001600160a01b03811660009081526005602052604090205460ff1615610914573360009081526007602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610940565b3360009081526006602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b61098333856107bb565b61099f5760405162461bcd60e51b81526004016103db90611659565b6109ab84848484611051565b50505050565b6109cc33838360405180602001604052806000815250611051565b5050565b3b151590565b6001600160a01b038316610a3a5760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103db565b6001600160a01b038216610a9c5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103db565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca9060440160206040518083038186803b158015610b7957600080fd5b505afa158015610b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb191906112a8565b90506001600160a01b03811615610c2b57604051633ad5cbc160e11b81526001600160a01b038216906375ab978290610bf8908a908a908a908a908a908a9060040161155b565b600060405180830381600087803b158015610c1257600080fd5b505af1158015610c26573d6000803e3d6000fd5b505050505b50505050505050565b6001600160a01b03851660009081526020819052604090205483811015610cad5760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b60648201526084016103db565b6001600160a01b03808716600090815260208190526040808220878503905591871681529081208054869290610ce49084906116da565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987878787604051610d3c939291906116a5565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610d8991815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca9060440160206040518083038186803b158015610e1657600080fd5b505afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e91906112a8565b90506001600160a01b03811615610eca576040516223de2960e01b81526001600160a01b038216906223de2990610e93908b908b908b908b908b908b9060040161155b565b600060405180830381600087803b158015610ead57600080fd5b505af1158015610ec1573d6000803e3d6000fd5b50505050610f64565b8115610f64576001600160a01b0386163b15610f645760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a4016103db565b5050505050505050565b6001600160a01b038616610fcf5760405162461bcd60e51b815260206004820152602260248201527f4552433737373a2073656e642066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016103db565b6001600160a01b0385166110255760405162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f206164647265737360448201526064016103db565b33611034818888888888610afd565b611042818888888888610c34565b610c2b81888888888888610d9a565b6001600160a01b0384166110b25760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016103db565b336110c281866000878787610afd565b6001600160a01b038516600090815260208190526040902054848110156111375760405162461bcd60e51b815260206004820152602360248201527f4552433737373a206275726e20616d6f756e7420657863656564732062616c616044820152626e636560e81b60648201526084016103db565b6001600160a01b03861660009081526020819052604081208683039055600180548792906111669084906116f2565b92505081905550856001600160a01b0316826001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a40988787876040516111b4939291906116a5565b60405180910390a36040518581526000906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050565b600082601f830112611215578081fd5b813567ffffffffffffffff808211156112305761123061175a565b604051601f8301601f19908116603f011681019082821181831017156112585761125861175a565b81604052838152866020858801011115611270578485fd5b8360208701602083013792830160200193909352509392505050565b60006020828403121561129d578081fd5b813561085681611770565b6000602082840312156112b9578081fd5b815161085681611770565b600080604083850312156112d6578081fd5b82356112e181611770565b915060208301356112f181611770565b809150509250929050565b600080600060608486031215611310578081fd5b833561131b81611770565b9250602084013561132b81611770565b929592945050506040919091013590565b600080600080600060a08688031215611353578081fd5b853561135e81611770565b9450602086013561136e81611770565b935060408601359250606086013567ffffffffffffffff80821115611391578283fd5b61139d89838a01611205565b935060808801359150808211156113b2578283fd5b506113bf88828901611205565b9150509295509295909350565b600080604083850312156113de578182fd5b82356113e981611770565b946020939093013593505050565b60008060006060848603121561140b578283fd5b833561141681611770565b925060208401359150604084013567ffffffffffffffff811115611438578182fd5b61144486828701611205565b9150509250925092565b60008060008060808587031215611463578384fd5b843561146e81611770565b935060208501359250604085013567ffffffffffffffff80821115611491578384fd5b61149d88838901611205565b935060608701359150808211156114b2578283fd5b506114bf87828801611205565b91505092959194509250565b600080604083850312156114dd578182fd5b82359150602083013567ffffffffffffffff8111156114fa578182fd5b61150685828601611205565b9150509250929050565b60008151808452815b8181101561153557602081850181015186830182015201611519565b818111156115465782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c06080820181905260009061159690830185611510565b82810360a08401526115a88185611510565b9998505050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156115f65783516001600160a01b0316835292840192918401916001016115d1565b50909695505050505050565b6000602082526108566020830184611510565b60208082526024908201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b6000848252606060208301526116be6060830185611510565b82810360408401526116d08185611510565b9695505050505050565b600082198211156116ed576116ed611744565b500190565b60008282101561170457611704611744565b500390565b600181811c9082168061171d57607f821691505b6020821081141561173e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461178557600080fd5b5056fea2646970667358221220a087bebce295c54528d46a529b236de0c8206d5e357ef6a1a716cef58739474f64736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/EnumerableMap.json b/node_modules/@openzeppelin/contracts/build/contracts/EnumerableMap.json
new file mode 100644
index 0000000..510b74e
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/EnumerableMap.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "EnumerableMap",
+ "sourceName": "contracts/utils/structs/EnumerableMap.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220876bea9f5ee57b76986922e0bc86d9242a2bd18f71f9dcfe34b608c3a18608c564736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220876bea9f5ee57b76986922e0bc86d9242a2bd18f71f9dcfe34b608c3a18608c564736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/EnumerableSet.json b/node_modules/@openzeppelin/contracts/build/contracts/EnumerableSet.json
new file mode 100644
index 0000000..29ad747
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/EnumerableSet.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "EnumerableSet",
+ "sourceName": "contracts/utils/structs/EnumerableSet.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209f6f77f5fb41613a06651d4d326d291333662cfa605ace53ad32c68e00fead4964736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209f6f77f5fb41613a06651d4d326d291333662cfa605ace53ad32c68e00fead4964736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/Escrow.json b/node_modules/@openzeppelin/contracts/build/contracts/Escrow.json
new file mode 100644
index 0000000..c41118d
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/Escrow.json
@@ -0,0 +1,146 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "Escrow",
+ "sourceName": "contracts/utils/escrow/Escrow.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "payee",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weiAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "Deposited",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "previousOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "OwnershipTransferred",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "payee",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weiAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "Withdrawn",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "payee",
+ "type": "address"
+ }
+ ],
+ "name": "deposit",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "payee",
+ "type": "address"
+ }
+ ],
+ "name": "depositsOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "renounceOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address payable",
+ "name": "payee",
+ "type": "address"
+ }
+ ],
+ "name": "withdraw",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6105718061007e6000396000f3fe6080604052600436106100555760003560e01c806351cff8d91461005a578063715018a61461007c5780638da5cb5b14610091578063e3a9db1a146100be578063f2fde38b14610102578063f340fa0114610122575b600080fd5b34801561006657600080fd5b5061007a6100753660046104aa565b610135565b005b34801561008857600080fd5b5061007a6101d7565b34801561009d57600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b3480156100ca57600080fd5b506100f46100d93660046104aa565b6001600160a01b031660009081526001602052604090205490565b6040519081526020016100b5565b34801561010e57600080fd5b5061007a61011d3660046104aa565b61020d565b61007a6101303660046104aa565b6102a8565b6000546001600160a01b031633146101685760405162461bcd60e51b815260040161015f906104cd565b60405180910390fd5b6001600160a01b0381166000818152600160205260408120805491905590610190908261033c565b816001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040516101cb91815260200190565b60405180910390a25050565b6000546001600160a01b031633146102015760405162461bcd60e51b815260040161015f906104cd565b61020b600061045a565b565b6000546001600160a01b031633146102375760405162461bcd60e51b815260040161015f906104cd565b6001600160a01b03811661029c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161015f565b6102a58161045a565b50565b6000546001600160a01b031633146102d25760405162461bcd60e51b815260040161015f906104cd565b6001600160a01b0381166000908152600160205260408120805434928392916102fc908490610502565b90915550506040518181526001600160a01b038316907f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4906020016101cb565b8047101561038c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161015f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146103d9576040519150601f19603f3d011682016040523d82523d6000602084013e6103de565b606091505b50509050806104555760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161015f565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156104bb578081fd5b81356104c681610526565b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561052157634e487b7160e01b81526011600452602481fd5b500190565b6001600160a01b03811681146102a557600080fdfea2646970667358221220fb80e6f61ed9d07b2715127957616df7a00a176f20e17aebd317ca95eeeb3bd364736f6c63430008030033",
+ "deployedBytecode": "0x6080604052600436106100555760003560e01c806351cff8d91461005a578063715018a61461007c5780638da5cb5b14610091578063e3a9db1a146100be578063f2fde38b14610102578063f340fa0114610122575b600080fd5b34801561006657600080fd5b5061007a6100753660046104aa565b610135565b005b34801561008857600080fd5b5061007a6101d7565b34801561009d57600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b3480156100ca57600080fd5b506100f46100d93660046104aa565b6001600160a01b031660009081526001602052604090205490565b6040519081526020016100b5565b34801561010e57600080fd5b5061007a61011d3660046104aa565b61020d565b61007a6101303660046104aa565b6102a8565b6000546001600160a01b031633146101685760405162461bcd60e51b815260040161015f906104cd565b60405180910390fd5b6001600160a01b0381166000818152600160205260408120805491905590610190908261033c565b816001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040516101cb91815260200190565b60405180910390a25050565b6000546001600160a01b031633146102015760405162461bcd60e51b815260040161015f906104cd565b61020b600061045a565b565b6000546001600160a01b031633146102375760405162461bcd60e51b815260040161015f906104cd565b6001600160a01b03811661029c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161015f565b6102a58161045a565b50565b6000546001600160a01b031633146102d25760405162461bcd60e51b815260040161015f906104cd565b6001600160a01b0381166000908152600160205260408120805434928392916102fc908490610502565b90915550506040518181526001600160a01b038316907f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4906020016101cb565b8047101561038c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161015f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146103d9576040519150601f19603f3d011682016040523d82523d6000602084013e6103de565b606091505b50509050806104555760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161015f565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156104bb578081fd5b81356104c681610526565b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561052157634e487b7160e01b81526011600452602481fd5b500190565b6001600160a01b03811681146102a557600080fdfea2646970667358221220fb80e6f61ed9d07b2715127957616df7a00a176f20e17aebd317ca95eeeb3bd364736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/Governor.json b/node_modules/@openzeppelin/contracts/build/contracts/Governor.json
new file mode 100644
index 0000000..b89f7c6
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/Governor.json
@@ -0,0 +1,550 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "Governor",
+ "sourceName": "contracts/governance/Governor.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalCanceled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "proposer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "string[]",
+ "name": "signatures",
+ "type": "string[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "startBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "endBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "ProposalCreated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalExecuted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "voter",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weight",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "VoteCast",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "BALLOT_TYPEHASH",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "COUNTING_MODE",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ }
+ ],
+ "name": "castVote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "castVoteBySig",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "castVoteWithReason",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "execute",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasVoted",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "hashProposal",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalDeadline",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalSnapshot",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "propose",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "quorum",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "state",
+ "outputs": [
+ {
+ "internalType": "enum IGovernor.ProposalState",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingDelay",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingPeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/GovernorCompatibilityBravo.json b/node_modules/@openzeppelin/contracts/build/contracts/GovernorCompatibilityBravo.json
new file mode 100644
index 0000000..1067a65
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/GovernorCompatibilityBravo.json
@@ -0,0 +1,878 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "GovernorCompatibilityBravo",
+ "sourceName": "contracts/governance/compatibility/GovernorCompatibilityBravo.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalCanceled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "proposer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "string[]",
+ "name": "signatures",
+ "type": "string[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "startBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "endBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "ProposalCreated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalExecuted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "eta",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalQueued",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "voter",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weight",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "VoteCast",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "BALLOT_TYPEHASH",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "COUNTING_MODE",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "cancel",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ }
+ ],
+ "name": "castVote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "castVoteBySig",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "castVoteWithReason",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "execute",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "execute",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getActions",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "string[]",
+ "name": "signatures",
+ "type": "string[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "voter",
+ "type": "address"
+ }
+ ],
+ "name": "getReceipt",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "bool",
+ "name": "hasVoted",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint96",
+ "name": "votes",
+ "type": "uint96"
+ }
+ ],
+ "internalType": "struct IGovernorCompatibilityBravo.Receipt",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasVoted",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "hashProposal",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalDeadline",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalEta",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalSnapshot",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "proposalThreshold",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposals",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "id",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "proposer",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "eta",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "startBlock",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "endBlock",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "forVotes",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "againstVotes",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "abstainVotes",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "canceled",
+ "type": "bool"
+ },
+ {
+ "internalType": "bool",
+ "name": "executed",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "propose",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "string[]",
+ "name": "signatures",
+ "type": "string[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "propose",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "queue",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "queue",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "quorum",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "quorumVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "state",
+ "outputs": [
+ {
+ "internalType": "enum IGovernor.ProposalState",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "timelock",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingDelay",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingPeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/GovernorCountingSimple.json b/node_modules/@openzeppelin/contracts/build/contracts/GovernorCountingSimple.json
new file mode 100644
index 0000000..1e04989
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/GovernorCountingSimple.json
@@ -0,0 +1,579 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "GovernorCountingSimple",
+ "sourceName": "contracts/governance/extensions/GovernorCountingSimple.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalCanceled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "proposer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "string[]",
+ "name": "signatures",
+ "type": "string[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "startBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "endBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "ProposalCreated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalExecuted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "voter",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weight",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "VoteCast",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "BALLOT_TYPEHASH",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "COUNTING_MODE",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ }
+ ],
+ "name": "castVote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "castVoteBySig",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "castVoteWithReason",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "execute",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasVoted",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "hashProposal",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalDeadline",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalSnapshot",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "againstVotes",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "forVotes",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "abstainVotes",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "propose",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "quorum",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "state",
+ "outputs": [
+ {
+ "internalType": "enum IGovernor.ProposalState",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingDelay",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingPeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/GovernorProposalThreshold.json b/node_modules/@openzeppelin/contracts/build/contracts/GovernorProposalThreshold.json
new file mode 100644
index 0000000..638dbbc
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/GovernorProposalThreshold.json
@@ -0,0 +1,563 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "GovernorProposalThreshold",
+ "sourceName": "contracts/governance/extensions/GovernorProposalThreshold.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalCanceled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "proposer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "string[]",
+ "name": "signatures",
+ "type": "string[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "startBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "endBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "ProposalCreated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalExecuted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "voter",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weight",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "VoteCast",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "BALLOT_TYPEHASH",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "COUNTING_MODE",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ }
+ ],
+ "name": "castVote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "castVoteBySig",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "castVoteWithReason",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "execute",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasVoted",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "hashProposal",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalDeadline",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalSnapshot",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "proposalThreshold",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "propose",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "quorum",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "state",
+ "outputs": [
+ {
+ "internalType": "enum IGovernor.ProposalState",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingDelay",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingPeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/GovernorTimelockCompound.json b/node_modules/@openzeppelin/contracts/build/contracts/GovernorTimelockCompound.json
new file mode 100644
index 0000000..f260c31
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/GovernorTimelockCompound.json
@@ -0,0 +1,674 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "GovernorTimelockCompound",
+ "sourceName": "contracts/governance/extensions/GovernorTimelockCompound.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalCanceled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "proposer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "string[]",
+ "name": "signatures",
+ "type": "string[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "startBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "endBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "ProposalCreated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalExecuted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "eta",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalQueued",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "oldTimelock",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "newTimelock",
+ "type": "address"
+ }
+ ],
+ "name": "TimelockChange",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "voter",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weight",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "VoteCast",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "BALLOT_TYPEHASH",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "COUNTING_MODE",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "__acceptAdmin",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ }
+ ],
+ "name": "castVote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "castVoteBySig",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "castVoteWithReason",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "execute",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasVoted",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "hashProposal",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalDeadline",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalEta",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalSnapshot",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "propose",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "queue",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "quorum",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "state",
+ "outputs": [
+ {
+ "internalType": "enum IGovernor.ProposalState",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "timelock",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract ICompoundTimelock",
+ "name": "newTimelock",
+ "type": "address"
+ }
+ ],
+ "name": "updateTimelock",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingDelay",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingPeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/GovernorTimelockControl.json b/node_modules/@openzeppelin/contracts/build/contracts/GovernorTimelockControl.json
new file mode 100644
index 0000000..8c6e70d
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/GovernorTimelockControl.json
@@ -0,0 +1,667 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "GovernorTimelockControl",
+ "sourceName": "contracts/governance/extensions/GovernorTimelockControl.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalCanceled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "proposer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "string[]",
+ "name": "signatures",
+ "type": "string[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "startBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "endBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "ProposalCreated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalExecuted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "eta",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalQueued",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "oldTimelock",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "newTimelock",
+ "type": "address"
+ }
+ ],
+ "name": "TimelockChange",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "voter",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weight",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "VoteCast",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "BALLOT_TYPEHASH",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "COUNTING_MODE",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ }
+ ],
+ "name": "castVote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "castVoteBySig",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "castVoteWithReason",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "execute",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasVoted",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "hashProposal",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalDeadline",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalEta",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalSnapshot",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "propose",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "queue",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "quorum",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "state",
+ "outputs": [
+ {
+ "internalType": "enum IGovernor.ProposalState",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "timelock",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract TimelockController",
+ "name": "newTimelock",
+ "type": "address"
+ }
+ ],
+ "name": "updateTimelock",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingDelay",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingPeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/GovernorVotes.json b/node_modules/@openzeppelin/contracts/build/contracts/GovernorVotes.json
new file mode 100644
index 0000000..617a933
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/GovernorVotes.json
@@ -0,0 +1,563 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "GovernorVotes",
+ "sourceName": "contracts/governance/extensions/GovernorVotes.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalCanceled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "proposer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "string[]",
+ "name": "signatures",
+ "type": "string[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "startBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "endBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "ProposalCreated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalExecuted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "voter",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weight",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "VoteCast",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "BALLOT_TYPEHASH",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "COUNTING_MODE",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ }
+ ],
+ "name": "castVote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "castVoteBySig",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "castVoteWithReason",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "execute",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasVoted",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "hashProposal",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalDeadline",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalSnapshot",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "propose",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "quorum",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "state",
+ "outputs": [
+ {
+ "internalType": "enum IGovernor.ProposalState",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "token",
+ "outputs": [
+ {
+ "internalType": "contract ERC20Votes",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingDelay",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingPeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/GovernorVotesComp.json b/node_modules/@openzeppelin/contracts/build/contracts/GovernorVotesComp.json
new file mode 100644
index 0000000..ef3e712
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/GovernorVotesComp.json
@@ -0,0 +1,563 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "GovernorVotesComp",
+ "sourceName": "contracts/governance/extensions/GovernorVotesComp.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalCanceled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "proposer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "string[]",
+ "name": "signatures",
+ "type": "string[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "startBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "endBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "ProposalCreated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalExecuted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "voter",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weight",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "VoteCast",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "BALLOT_TYPEHASH",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "COUNTING_MODE",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ }
+ ],
+ "name": "castVote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "castVoteBySig",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "castVoteWithReason",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "execute",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasVoted",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "hashProposal",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalDeadline",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalSnapshot",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "propose",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "quorum",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "state",
+ "outputs": [
+ {
+ "internalType": "enum IGovernor.ProposalState",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "token",
+ "outputs": [
+ {
+ "internalType": "contract ERC20VotesComp",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingDelay",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingPeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/GovernorVotesQuorumFraction.json b/node_modules/@openzeppelin/contracts/build/contracts/GovernorVotesQuorumFraction.json
new file mode 100644
index 0000000..f4f8257
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/GovernorVotesQuorumFraction.json
@@ -0,0 +1,621 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "GovernorVotesQuorumFraction",
+ "sourceName": "contracts/governance/extensions/GovernorVotesQuorumFraction.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalCanceled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "proposer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "string[]",
+ "name": "signatures",
+ "type": "string[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "startBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "endBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "ProposalCreated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalExecuted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "oldQuorumNumerator",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "newQuorumNumerator",
+ "type": "uint256"
+ }
+ ],
+ "name": "QuorumNumeratorUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "voter",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weight",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "VoteCast",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "BALLOT_TYPEHASH",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "COUNTING_MODE",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ }
+ ],
+ "name": "castVote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "castVoteBySig",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "castVoteWithReason",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "execute",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasVoted",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "hashProposal",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalDeadline",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalSnapshot",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "propose",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "quorum",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "quorumDenominator",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "quorumNumerator",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "state",
+ "outputs": [
+ {
+ "internalType": "enum IGovernor.ProposalState",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "token",
+ "outputs": [
+ {
+ "internalType": "contract ERC20Votes",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "newQuorumNumerator",
+ "type": "uint256"
+ }
+ ],
+ "name": "updateQuorumNumerator",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingDelay",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingPeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IAccessControl.json b/node_modules/@openzeppelin/contracts/build/contracts/IAccessControl.json
new file mode 100644
index 0000000..dc7348c
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IAccessControl.json
@@ -0,0 +1,183 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IAccessControl",
+ "sourceName": "contracts/access/IAccessControl.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "previousAdminRole",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "newAdminRole",
+ "type": "bytes32"
+ }
+ ],
+ "name": "RoleAdminChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "RoleGranted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "RoleRevoked",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getRoleAdmin",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "grantRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasRole",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "renounceRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "revokeRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IAccessControlEnumerable.json b/node_modules/@openzeppelin/contracts/build/contracts/IAccessControlEnumerable.json
new file mode 100644
index 0000000..3a81d13
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IAccessControlEnumerable.json
@@ -0,0 +1,226 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IAccessControlEnumerable",
+ "sourceName": "contracts/access/IAccessControlEnumerable.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "previousAdminRole",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "newAdminRole",
+ "type": "bytes32"
+ }
+ ],
+ "name": "RoleAdminChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "RoleGranted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "RoleRevoked",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getRoleAdmin",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ }
+ ],
+ "name": "getRoleMember",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getRoleMemberCount",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "grantRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasRole",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "renounceRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "revokeRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IBeacon.json b/node_modules/@openzeppelin/contracts/build/contracts/IBeacon.json
new file mode 100644
index 0000000..6b88dda
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IBeacon.json
@@ -0,0 +1,24 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IBeacon",
+ "sourceName": "contracts/proxy/beacon/IBeacon.sol",
+ "abi": [
+ {
+ "inputs": [],
+ "name": "implementation",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ICompoundTimelock.json b/node_modules/@openzeppelin/contracts/build/contracts/ICompoundTimelock.json
new file mode 100644
index 0000000..c532c0f
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ICompoundTimelock.json
@@ -0,0 +1,256 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ICompoundTimelock",
+ "sourceName": "contracts/governance/extensions/GovernorTimelockCompound.sol",
+ "abi": [
+ {
+ "inputs": [],
+ "name": "GRACE_PERIOD",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "MAXIMUM_DELAY",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "MINIMUM_DELAY",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "acceptAdmin",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "admin",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "signature",
+ "type": "string"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint256",
+ "name": "eta",
+ "type": "uint256"
+ }
+ ],
+ "name": "cancelTransaction",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "delay",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "signature",
+ "type": "string"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint256",
+ "name": "eta",
+ "type": "uint256"
+ }
+ ],
+ "name": "executeTransaction",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "pendingAdmin",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "signature",
+ "type": "string"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint256",
+ "name": "eta",
+ "type": "uint256"
+ }
+ ],
+ "name": "queueTransaction",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "name": "queuedTransactions",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "setDelay",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "name": "setPendingAdmin",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "receive"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC1155.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC1155.json
new file mode 100644
index 0000000..465dfff
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC1155.json
@@ -0,0 +1,304 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC1155",
+ "sourceName": "contracts/token/ERC1155/IERC1155.sol",
+ "abi": [
+ {
+ "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": "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"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "id",
+ "type": "uint256"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "accounts",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "balanceOfBatch",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "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": "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": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC1155MetadataURI.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC1155MetadataURI.json
new file mode 100644
index 0000000..130bd7a
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC1155MetadataURI.json
@@ -0,0 +1,323 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC1155MetadataURI",
+ "sourceName": "contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol",
+ "abi": [
+ {
+ "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": "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"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "id",
+ "type": "uint256"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "accounts",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "balanceOfBatch",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "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": "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": "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": "uri",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC1155Receiver.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC1155Receiver.json
new file mode 100644
index 0000000..e8ab4d5
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC1155Receiver.json
@@ -0,0 +1,108 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC1155Receiver",
+ "sourceName": "contracts/token/ERC1155/IERC1155Receiver.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "onERC1155BatchReceived",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "",
+ "type": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "id",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "onERC1155Received",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "",
+ "type": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC1271.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC1271.json
new file mode 100644
index 0000000..abfe1cc
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC1271.json
@@ -0,0 +1,35 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC1271",
+ "sourceName": "contracts/interfaces/IERC1271.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "hash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signature",
+ "type": "bytes"
+ }
+ ],
+ "name": "isValidSignature",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "magicValue",
+ "type": "bytes4"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC1363.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC1363.json
new file mode 100644
index 0000000..c5b7396
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC1363.json
@@ -0,0 +1,382 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC1363",
+ "sourceName": "contracts/interfaces/IERC1363.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "approveAndCall",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "approveAndCall",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferAndCall",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "transferAndCall",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "transferFromAndCall",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFromAndCall",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC1363Receiver.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC1363Receiver.json
new file mode 100644
index 0000000..13fac20
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC1363Receiver.json
@@ -0,0 +1,45 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC1363Receiver",
+ "sourceName": "contracts/interfaces/IERC1363Receiver.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "onTransferReceived",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "",
+ "type": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC1363Spender.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC1363Spender.json
new file mode 100644
index 0000000..8d15a15
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC1363Spender.json
@@ -0,0 +1,40 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC1363Spender",
+ "sourceName": "contracts/interfaces/IERC1363Spender.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "onApprovalReceived",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "",
+ "type": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC165.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC165.json
new file mode 100644
index 0000000..7152c3e
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC165.json
@@ -0,0 +1,30 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC165",
+ "sourceName": "contracts/utils/introspection/IERC165.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC1820Implementer.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC1820Implementer.json
new file mode 100644
index 0000000..8eb5f6f
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC1820Implementer.json
@@ -0,0 +1,35 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC1820Implementer",
+ "sourceName": "contracts/utils/introspection/IERC1820Implementer.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "interfaceHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "canImplementInterfaceForAddress",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC1820Registry.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC1820Registry.json
new file mode 100644
index 0000000..0adaf5c
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC1820Registry.json
@@ -0,0 +1,224 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC1820Registry",
+ "sourceName": "contracts/utils/introspection/IERC1820Registry.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "interfaceHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "implementer",
+ "type": "address"
+ }
+ ],
+ "name": "InterfaceImplementerSet",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newManager",
+ "type": "address"
+ }
+ ],
+ "name": "ManagerChanged",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "_interfaceHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getInterfaceImplementer",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "getManager",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "implementsERC165Interface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "implementsERC165InterfaceNoCache",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "interfaceName",
+ "type": "string"
+ }
+ ],
+ "name": "interfaceHash",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "_interfaceHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "implementer",
+ "type": "address"
+ }
+ ],
+ "name": "setInterfaceImplementer",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "newManager",
+ "type": "address"
+ }
+ ],
+ "name": "setManager",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "updateERC165Cache",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC20.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC20.json
new file mode 100644
index 0000000..ca55355
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC20.json
@@ -0,0 +1,194 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC20",
+ "sourceName": "contracts/token/ERC20/IERC20.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC20Metadata.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC20Metadata.json
new file mode 100644
index 0000000..62af3f5
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC20Metadata.json
@@ -0,0 +1,233 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC20Metadata",
+ "sourceName": "contracts/token/ERC20/extensions/IERC20Metadata.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC20Permit.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC20Permit.json
new file mode 100644
index 0000000..a36869b
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC20Permit.json
@@ -0,0 +1,86 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC20Permit",
+ "sourceName": "contracts/token/ERC20/extensions/draft-IERC20Permit.sol",
+ "abi": [
+ {
+ "inputs": [],
+ "name": "DOMAIN_SEPARATOR",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "nonces",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "permit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC2612.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC2612.json
new file mode 100644
index 0000000..09367fd
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC2612.json
@@ -0,0 +1,86 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC2612",
+ "sourceName": "contracts/interfaces/draft-IERC2612.sol",
+ "abi": [
+ {
+ "inputs": [],
+ "name": "DOMAIN_SEPARATOR",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "nonces",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "permit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC2981.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC2981.json
new file mode 100644
index 0000000..d4dc531
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC2981.json
@@ -0,0 +1,59 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC2981",
+ "sourceName": "contracts/interfaces/IERC2981.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "salePrice",
+ "type": "uint256"
+ }
+ ],
+ "name": "royaltyInfo",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "receiver",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "royaltyAmount",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC3156FlashBorrower.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC3156FlashBorrower.json
new file mode 100644
index 0000000..170493f
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC3156FlashBorrower.json
@@ -0,0 +1,50 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC3156FlashBorrower",
+ "sourceName": "contracts/interfaces/IERC3156FlashBorrower.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "initiator",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "fee",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "onFlashLoan",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC3156FlashLender.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC3156FlashLender.json
new file mode 100644
index 0000000..d4c75d3
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC3156FlashLender.json
@@ -0,0 +1,88 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC3156FlashLender",
+ "sourceName": "contracts/interfaces/IERC3156FlashLender.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "flashFee",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC3156FlashBorrower",
+ "name": "receiver",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "flashLoan",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ }
+ ],
+ "name": "maxFlashLoan",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC721.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC721.json
new file mode 100644
index 0000000..6d69996
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC721.json
@@ -0,0 +1,296 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC721",
+ "sourceName": "contracts/token/ERC721/IERC721.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "approved",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC721Enumerable.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC721Enumerable.json
new file mode 100644
index 0000000..1ffd17b
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC721Enumerable.json
@@ -0,0 +1,352 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC721Enumerable",
+ "sourceName": "contracts/token/ERC721/extensions/IERC721Enumerable.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "approved",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenByIndex",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenOfOwnerByIndex",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC721Metadata.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC721Metadata.json
new file mode 100644
index 0000000..606da3a
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC721Metadata.json
@@ -0,0 +1,341 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC721Metadata",
+ "sourceName": "contracts/token/ERC721/extensions/IERC721Metadata.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "approved",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenURI",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC721Receiver.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC721Receiver.json
new file mode 100644
index 0000000..d2e10c5
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC721Receiver.json
@@ -0,0 +1,45 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC721Receiver",
+ "sourceName": "contracts/token/ERC721/IERC721Receiver.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "onERC721Received",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "",
+ "type": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC777.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC777.json
new file mode 100644
index 0000000..76bdbdf
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC777.json
@@ -0,0 +1,402 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC777",
+ "sourceName": "contracts/token/ERC777/IERC777.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "tokenHolder",
+ "type": "address"
+ }
+ ],
+ "name": "AuthorizedOperator",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "Burned",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "Minted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "tokenHolder",
+ "type": "address"
+ }
+ ],
+ "name": "RevokedOperator",
+ "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": "amount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "Sent",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "authorizeOperator",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "burn",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "defaultOperators",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "granularity",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenHolder",
+ "type": "address"
+ }
+ ],
+ "name": "isOperatorFor",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "operatorBurn",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "operatorSend",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "revokeOperator",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "send",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC777Recipient.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC777Recipient.json
new file mode 100644
index 0000000..5741c58
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC777Recipient.json
@@ -0,0 +1,49 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC777Recipient",
+ "sourceName": "contracts/token/ERC777/IERC777Recipient.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "userData",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "tokensReceived",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IERC777Sender.json b/node_modules/@openzeppelin/contracts/build/contracts/IERC777Sender.json
new file mode 100644
index 0000000..0419a02
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IERC777Sender.json
@@ -0,0 +1,49 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IERC777Sender",
+ "sourceName": "contracts/token/ERC777/IERC777Sender.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "userData",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "operatorData",
+ "type": "bytes"
+ }
+ ],
+ "name": "tokensToSend",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IGovernor.json b/node_modules/@openzeppelin/contracts/build/contracts/IGovernor.json
new file mode 100644
index 0000000..c110809
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IGovernor.json
@@ -0,0 +1,537 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IGovernor",
+ "sourceName": "contracts/governance/IGovernor.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalCanceled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "proposer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "string[]",
+ "name": "signatures",
+ "type": "string[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "startBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "endBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "ProposalCreated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalExecuted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "voter",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weight",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "VoteCast",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "COUNTING_MODE",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ }
+ ],
+ "name": "castVote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "castVoteBySig",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "castVoteWithReason",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "execute",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasVoted",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "hashProposal",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalDeadline",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalSnapshot",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "propose",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "quorum",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "state",
+ "outputs": [
+ {
+ "internalType": "enum IGovernor.ProposalState",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingDelay",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingPeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IGovernorCompatibilityBravo.json b/node_modules/@openzeppelin/contracts/build/contracts/IGovernorCompatibilityBravo.json
new file mode 100644
index 0000000..115e1ae
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IGovernorCompatibilityBravo.json
@@ -0,0 +1,780 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IGovernorCompatibilityBravo",
+ "sourceName": "contracts/governance/compatibility/IGovernorCompatibilityBravo.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalCanceled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "proposer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "string[]",
+ "name": "signatures",
+ "type": "string[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "startBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "endBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "ProposalCreated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalExecuted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "voter",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weight",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "VoteCast",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "COUNTING_MODE",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "cancel",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ }
+ ],
+ "name": "castVote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "castVoteBySig",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "castVoteWithReason",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "execute",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "execute",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getActions",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "string[]",
+ "name": "signatures",
+ "type": "string[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "voter",
+ "type": "address"
+ }
+ ],
+ "name": "getReceipt",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "bool",
+ "name": "hasVoted",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint96",
+ "name": "votes",
+ "type": "uint96"
+ }
+ ],
+ "internalType": "struct IGovernorCompatibilityBravo.Receipt",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasVoted",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "hashProposal",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalDeadline",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalSnapshot",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "proposalThreshold",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposals",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "id",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "proposer",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "eta",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "startBlock",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "endBlock",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "forVotes",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "againstVotes",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "abstainVotes",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "canceled",
+ "type": "bool"
+ },
+ {
+ "internalType": "bool",
+ "name": "executed",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "propose",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "string[]",
+ "name": "signatures",
+ "type": "string[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "propose",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "queue",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "quorum",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "quorumVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "state",
+ "outputs": [
+ {
+ "internalType": "enum IGovernor.ProposalState",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingDelay",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingPeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/IGovernorTimelock.json b/node_modules/@openzeppelin/contracts/build/contracts/IGovernorTimelock.json
new file mode 100644
index 0000000..07a2ddc
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/IGovernorTimelock.json
@@ -0,0 +1,622 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IGovernorTimelock",
+ "sourceName": "contracts/governance/extensions/IGovernorTimelock.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalCanceled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "proposer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "string[]",
+ "name": "signatures",
+ "type": "string[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "startBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "endBlock",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "ProposalCreated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalExecuted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "eta",
+ "type": "uint256"
+ }
+ ],
+ "name": "ProposalQueued",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "voter",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weight",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "VoteCast",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "COUNTING_MODE",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ }
+ ],
+ "name": "castVote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "castVoteBySig",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "support",
+ "type": "uint8"
+ },
+ {
+ "internalType": "string",
+ "name": "reason",
+ "type": "string"
+ }
+ ],
+ "name": "castVoteWithReason",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "execute",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "getVotes",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasVoted",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "hashProposal",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalDeadline",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalEta",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "proposalSnapshot",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ }
+ ],
+ "name": "propose",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "calldatas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "descriptionHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "queue",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "blockNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "quorum",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ }
+ ],
+ "name": "state",
+ "outputs": [
+ {
+ "internalType": "enum IGovernor.ProposalState",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "timelock",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingDelay",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "votingPeriod",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/Initializable.json b/node_modules/@openzeppelin/contracts/build/contracts/Initializable.json
new file mode 100644
index 0000000..73e4174
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/Initializable.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "Initializable",
+ "sourceName": "contracts/proxy/utils/Initializable.sol",
+ "abi": [],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/Math.json b/node_modules/@openzeppelin/contracts/build/contracts/Math.json
new file mode 100644
index 0000000..84e34a3
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/Math.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "Math",
+ "sourceName": "contracts/utils/math/Math.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c197dd04e81d5f5b8f7425e916cdcd5a0a46e9402ab1e1383e047ecbd0a38ace64736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c197dd04e81d5f5b8f7425e916cdcd5a0a46e9402ab1e1383e047ecbd0a38ace64736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/MerkleProof.json b/node_modules/@openzeppelin/contracts/build/contracts/MerkleProof.json
new file mode 100644
index 0000000..562a71a
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/MerkleProof.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "MerkleProof",
+ "sourceName": "contracts/utils/cryptography/MerkleProof.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d2324771bdd9a795702ace3c783b52b05a6f0516c23f0d6b90f01e96d8ccd83c64736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d2324771bdd9a795702ace3c783b52b05a6f0516c23f0d6b90f01e96d8ccd83c64736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/MinimalForwarder.json b/node_modules/@openzeppelin/contracts/build/contracts/MinimalForwarder.json
new file mode 100644
index 0000000..cb9fe99
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/MinimalForwarder.json
@@ -0,0 +1,152 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "MinimalForwarder",
+ "sourceName": "contracts/metatx/MinimalForwarder.sol",
+ "abi": [
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "gas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct MinimalForwarder.ForwardRequest",
+ "name": "req",
+ "type": "tuple"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signature",
+ "type": "bytes"
+ }
+ ],
+ "name": "execute",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ },
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ }
+ ],
+ "name": "getNonce",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "gas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct MinimalForwarder.ForwardRequest",
+ "name": "req",
+ "type": "tuple"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signature",
+ "type": "bytes"
+ }
+ ],
+ "name": "verify",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x61012060405234801561001157600080fd5b50604080518082018252601081526f26b4b734b6b0b62337b93bb0b93232b960811b6020808301918252835180850185526005815264302e302e3160d81b908201529151902060c08181527fae209a0b48f21c054280f2455d32cf309387644879d9acbd8ffc19916381188560e08190524660a081815286517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801819052818901969096526060810193909352608080840192909252308382015286518084039091018152919092019094528351939092019290922090526101005260805160a05160c05160e05161010051610b4461013360003960006104ce0152600061051d015260006104f80152600061047a015260006104a30152610b446000f3fe6080604052600436106100345760003560e01c80632d0335ab1461003957806347153f8214610082578063bf5d3bdb146100a3575b600080fd5b34801561004557600080fd5b5061006f6100543660046108fe565b6001600160a01b031660009081526020819052604090205490565b6040519081526020015b60405180910390f35b61009561009036600461092c565b6100d3565b604051610079929190610a19565b3480156100af57600080fd5b506100c36100be36600461092c565b610280565b6040519015158152602001610079565b600060606100e2858585610280565b61014e5760405162461bcd60e51b815260206004820152603260248201527f4d696e696d616c466f727761726465723a207369676e617475726520646f6573604482015271081b9bdd081b585d18da081c995c5d595cdd60721b60648201526084015b60405180910390fd5b61015d60808601356001610a9a565b60008061016d60208901896108fe565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000808660200160208101906101a791906108fe565b6001600160a01b0316606088013560408901356101c760a08b018b610a55565b6101d460208d018d6108fe565b6040516020016101e6939291906109d4565b60408051601f1981840301815290829052610200916109fd565b600060405180830381858888f193505050503d806000811461023e576040519150601f19603f3d011682016040523d82523d6000602084013e610243565b606091505b509092509050610258603f6060890135610abe565b5a1161027457634e487b7160e01b600052600160045260246000fd5b90969095509350505050565b60008061039384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038d92507fdd8f4b70b0f4393e889bd39128a30628a78b61816a9eb8199759e7a349657e4891506102f0905060208a018a6108fe565b61030060408b0160208c016108fe565b60408b013560608c013560808d013561031c60a08f018f610a55565b60405161032a9291906109c4565b6040805191829003822060208301989098526001600160a01b0396871690820152949093166060850152608084019190915260a083015260c082015260e081019190915261010001604051602081830303815290604052805190602001206103fe565b90610452565b905060808501356000806103aa60208901896108fe565b6001600160a01b03166001600160a01b03168152602001908152602001600020541480156103f557506103e060208601866108fe565b6001600160a01b0316816001600160a01b0316145b95945050505050565b600061044c61040b610476565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b92915050565b6000806000610461858561056c565b9150915061046e816105dc565b509392505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614156104c757507f0000000000000000000000000000000000000000000000000000000000000000610569565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c090920190925280519101205b90565b6000808251604114156105a35760208301516040840151606085015160001a610597878285856107e2565b945094505050506105d5565b8251604014156105cd57602083015160408401516105c28683836108cf565b9350935050506105d5565b506000905060025b9250929050565b60008160048111156105fe57634e487b7160e01b600052602160045260246000fd5b1415610609576107df565b600181600481111561062b57634e487b7160e01b600052602160045260246000fd5b14156106795760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610145565b600281600481111561069b57634e487b7160e01b600052602160045260246000fd5b14156106e95760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610145565b600381600481111561070b57634e487b7160e01b600052602160045260246000fd5b14156107645760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610145565b600481600481111561078657634e487b7160e01b600052602160045260246000fd5b14156107df5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610145565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561081957506000905060036108c6565b8460ff16601b1415801561083157508460ff16601c14155b1561084257506000905060046108c6565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610896573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166108bf576000600192509250506108c6565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b016108f0878288856107e2565b935093505050935093915050565b60006020828403121561090f578081fd5b81356001600160a01b0381168114610925578182fd5b9392505050565b600080600060408486031215610940578182fd5b833567ffffffffffffffff80821115610957578384fd5b9085019060c0828803121561096a578384fd5b9093506020850135908082111561097f578384fd5b818601915086601f830112610992578384fd5b8135818111156109a0578485fd5b8760208285010111156109b1578485fd5b6020830194508093505050509250925092565b6000828483379101908152919050565b6000838583375060609190911b6bffffffffffffffffffffffff19169101908152601401919050565b60008251610a0f818460208701610ade565b9190910192915050565b60008315158252604060208301528251806040840152610a40816060850160208701610ade565b601f01601f1916919091016060019392505050565b6000808335601e19843603018112610a6b578283fd5b83018035915067ffffffffffffffff821115610a85578283fd5b6020019150368190038213156105d557600080fd5b60008219821115610ab957634e487b7160e01b81526011600452602481fd5b500190565b600082610ad957634e487b7160e01b81526012600452602481fd5b500490565b60005b83811015610af9578181015183820152602001610ae1565b83811115610b08576000848401525b5050505056fea264697066735822122053d18eea9cfddf3496703497ba0711c4caff2d2220280bab4776f1f67731324c64736f6c63430008030033",
+ "deployedBytecode": "0x6080604052600436106100345760003560e01c80632d0335ab1461003957806347153f8214610082578063bf5d3bdb146100a3575b600080fd5b34801561004557600080fd5b5061006f6100543660046108fe565b6001600160a01b031660009081526020819052604090205490565b6040519081526020015b60405180910390f35b61009561009036600461092c565b6100d3565b604051610079929190610a19565b3480156100af57600080fd5b506100c36100be36600461092c565b610280565b6040519015158152602001610079565b600060606100e2858585610280565b61014e5760405162461bcd60e51b815260206004820152603260248201527f4d696e696d616c466f727761726465723a207369676e617475726520646f6573604482015271081b9bdd081b585d18da081c995c5d595cdd60721b60648201526084015b60405180910390fd5b61015d60808601356001610a9a565b60008061016d60208901896108fe565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000808660200160208101906101a791906108fe565b6001600160a01b0316606088013560408901356101c760a08b018b610a55565b6101d460208d018d6108fe565b6040516020016101e6939291906109d4565b60408051601f1981840301815290829052610200916109fd565b600060405180830381858888f193505050503d806000811461023e576040519150601f19603f3d011682016040523d82523d6000602084013e610243565b606091505b509092509050610258603f6060890135610abe565b5a1161027457634e487b7160e01b600052600160045260246000fd5b90969095509350505050565b60008061039384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038d92507fdd8f4b70b0f4393e889bd39128a30628a78b61816a9eb8199759e7a349657e4891506102f0905060208a018a6108fe565b61030060408b0160208c016108fe565b60408b013560608c013560808d013561031c60a08f018f610a55565b60405161032a9291906109c4565b6040805191829003822060208301989098526001600160a01b0396871690820152949093166060850152608084019190915260a083015260c082015260e081019190915261010001604051602081830303815290604052805190602001206103fe565b90610452565b905060808501356000806103aa60208901896108fe565b6001600160a01b03166001600160a01b03168152602001908152602001600020541480156103f557506103e060208601866108fe565b6001600160a01b0316816001600160a01b0316145b95945050505050565b600061044c61040b610476565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b92915050565b6000806000610461858561056c565b9150915061046e816105dc565b509392505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614156104c757507f0000000000000000000000000000000000000000000000000000000000000000610569565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c090920190925280519101205b90565b6000808251604114156105a35760208301516040840151606085015160001a610597878285856107e2565b945094505050506105d5565b8251604014156105cd57602083015160408401516105c28683836108cf565b9350935050506105d5565b506000905060025b9250929050565b60008160048111156105fe57634e487b7160e01b600052602160045260246000fd5b1415610609576107df565b600181600481111561062b57634e487b7160e01b600052602160045260246000fd5b14156106795760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610145565b600281600481111561069b57634e487b7160e01b600052602160045260246000fd5b14156106e95760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610145565b600381600481111561070b57634e487b7160e01b600052602160045260246000fd5b14156107645760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610145565b600481600481111561078657634e487b7160e01b600052602160045260246000fd5b14156107df5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610145565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561081957506000905060036108c6565b8460ff16601b1415801561083157508460ff16601c14155b1561084257506000905060046108c6565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610896573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166108bf576000600192509250506108c6565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b016108f0878288856107e2565b935093505050935093915050565b60006020828403121561090f578081fd5b81356001600160a01b0381168114610925578182fd5b9392505050565b600080600060408486031215610940578182fd5b833567ffffffffffffffff80821115610957578384fd5b9085019060c0828803121561096a578384fd5b9093506020850135908082111561097f578384fd5b818601915086601f830112610992578384fd5b8135818111156109a0578485fd5b8760208285010111156109b1578485fd5b6020830194508093505050509250925092565b6000828483379101908152919050565b6000838583375060609190911b6bffffffffffffffffffffffff19169101908152601401919050565b60008251610a0f818460208701610ade565b9190910192915050565b60008315158252604060208301528251806040840152610a40816060850160208701610ade565b601f01601f1916919091016060019392505050565b6000808335601e19843603018112610a6b578283fd5b83018035915067ffffffffffffffff821115610a85578283fd5b6020019150368190038213156105d557600080fd5b60008219821115610ab957634e487b7160e01b81526011600452602481fd5b500190565b600082610ad957634e487b7160e01b81526012600452602481fd5b500490565b60005b83811015610af9578181015183820152602001610ae1565b83811115610b08576000848401525b5050505056fea264697066735822122053d18eea9cfddf3496703497ba0711c4caff2d2220280bab4776f1f67731324c64736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/Multicall.json b/node_modules/@openzeppelin/contracts/build/contracts/Multicall.json
new file mode 100644
index 0000000..f0f3ba9
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/Multicall.json
@@ -0,0 +1,30 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "Multicall",
+ "sourceName": "contracts/utils/Multicall.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes[]",
+ "name": "data",
+ "type": "bytes[]"
+ }
+ ],
+ "name": "multicall",
+ "outputs": [
+ {
+ "internalType": "bytes[]",
+ "name": "results",
+ "type": "bytes[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/Ownable.json b/node_modules/@openzeppelin/contracts/build/contracts/Ownable.json
new file mode 100644
index 0000000..58c474d
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/Ownable.json
@@ -0,0 +1,63 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "Ownable",
+ "sourceName": "contracts/access/Ownable.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "previousOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "OwnershipTransferred",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "renounceOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/Pausable.json b/node_modules/@openzeppelin/contracts/build/contracts/Pausable.json
new file mode 100644
index 0000000..a9dfd35
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/Pausable.json
@@ -0,0 +1,50 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "Pausable",
+ "sourceName": "contracts/security/Pausable.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "Paused",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "Unpaused",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "paused",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/PaymentSplitter.json b/node_modules/@openzeppelin/contracts/build/contracts/PaymentSplitter.json
new file mode 100644
index 0000000..4d5c902
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/PaymentSplitter.json
@@ -0,0 +1,184 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "PaymentSplitter",
+ "sourceName": "contracts/finance/PaymentSplitter.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "payees",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "shares_",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "shares",
+ "type": "uint256"
+ }
+ ],
+ "name": "PayeeAdded",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "PaymentReceived",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "PaymentReleased",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ }
+ ],
+ "name": "payee",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address payable",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "release",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "released",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "shares",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalReleased",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalShares",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "receive"
+ }
+ ],
+ "bytecode": "0x608060405260405162000b6a38038062000b6a8339810160408190526200002691620003db565b8051825114620000985760405162461bcd60e51b815260206004820152603260248201527f5061796d656e7453706c69747465723a2070617965657320616e6420736861726044820152710cae640d8cadccee8d040dad2e6dac2e8c6d60731b60648201526084015b60405180910390fd5b6000825111620000eb5760405162461bcd60e51b815260206004820152601a60248201527f5061796d656e7453706c69747465723a206e6f2070617965657300000000000060448201526064016200008f565b60005b82518110156200016f576200015a8382815181106200011d57634e487b7160e01b600052603260045260246000fd5b60200260200101518383815181106200014657634e487b7160e01b600052603260045260246000fd5b60200260200101516200017860201b60201c565b8062000166816200052c565b915050620000ee565b50505062000576565b6001600160a01b038216620001e55760405162461bcd60e51b815260206004820152602c60248201527f5061796d656e7453706c69747465723a206163636f756e74206973207468652060448201526b7a65726f206164647265737360a01b60648201526084016200008f565b60008111620002375760405162461bcd60e51b815260206004820152601d60248201527f5061796d656e7453706c69747465723a2073686172657320617265203000000060448201526064016200008f565b6001600160a01b03821660009081526002602052604090205415620002b35760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960448201526a206861732073686172657360a81b60648201526084016200008f565b60048054600181019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0384169081179091556000908152600260205260408120829055546200031b90829062000511565b600055604080516001600160a01b0384168152602081018390527f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac910160405180910390a15050565b600082601f83011262000375578081fd5b815160206200038e6200038883620004eb565b620004b8565b80838252828201915082860187848660051b8901011115620003ae578586fd5b855b85811015620003ce57815184529284019290840190600101620003b0565b5090979650505050505050565b60008060408385031215620003ee578182fd5b82516001600160401b038082111562000405578384fd5b818501915085601f83011262000419578384fd5b815160206200042c6200038883620004eb565b8083825282820191508286018a848660051b89010111156200044c578889fd5b8896505b84871015620004855780516001600160a01b03811681146200047057898afd5b83526001969096019591830191830162000450565b50918801519196509093505050808211156200049f578283fd5b50620004ae8582860162000364565b9150509250929050565b604051601f8201601f191681016001600160401b0381118282101715620004e357620004e362000560565b604052919050565b60006001600160401b0382111562000507576200050762000560565b5060051b60200190565b600082198211156200052757620005276200054a565b500190565b60006000198214156200054357620005436200054a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6105e480620005866000396000f3fe6080604052600436106100595760003560e01c806319165587146100a75780633a98ef39146100c95780638b83209b146100ed5780639852595c14610125578063ce7c2ac21461015b578063e33b7de314610191576100a2565b366100a2577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b3480156100b357600080fd5b506100c76100c23660046104d7565b6101a6565b005b3480156100d557600080fd5b506000545b6040519081526020015b60405180910390f35b3480156100f957600080fd5b5061010d6101083660046104fa565b61037b565b6040516001600160a01b0390911681526020016100e4565b34801561013157600080fd5b506100da6101403660046104d7565b6001600160a01b031660009081526003602052604090205490565b34801561016757600080fd5b506100da6101763660046104d7565b6001600160a01b031660009081526002602052604090205490565b34801561019d57600080fd5b506001546100da565b6001600160a01b03811660009081526002602052604090205461021f5760405162461bcd60e51b815260206004820152602660248201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060448201526573686172657360d01b60648201526084015b60405180910390fd5b60006001544761022f9190610512565b6001600160a01b03831660009081526003602090815260408083205483546002909352908320549394509192610265908561054a565b61026f919061052a565b6102799190610569565b9050806102dc5760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060448201526a191d59481c185e5b595b9d60aa1b6064820152608401610216565b6001600160a01b038316600090815260036020526040902054610300908290610512565b6001600160a01b038416600090815260036020526040902055600154610327908290610512565b60015561033483826103b9565b604080516001600160a01b0385168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a1505050565b60006004828154811061039e57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031692915050565b804710156104095760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610216565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610456576040519150601f19603f3d011682016040523d82523d6000602084013e61045b565b606091505b50509050806104d25760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610216565b505050565b6000602082840312156104e8578081fd5b81356104f381610596565b9392505050565b60006020828403121561050b578081fd5b5035919050565b6000821982111561052557610525610580565b500190565b60008261054557634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561056457610564610580565b500290565b60008282101561057b5761057b610580565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146105ab57600080fd5b5056fea2646970667358221220fd47b4c67cba81d391f2a7510b725d33aab03c0d4da3265f86bffb2017e1ec8c64736f6c63430008030033",
+ "deployedBytecode": "0x6080604052600436106100595760003560e01c806319165587146100a75780633a98ef39146100c95780638b83209b146100ed5780639852595c14610125578063ce7c2ac21461015b578063e33b7de314610191576100a2565b366100a2577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b3480156100b357600080fd5b506100c76100c23660046104d7565b6101a6565b005b3480156100d557600080fd5b506000545b6040519081526020015b60405180910390f35b3480156100f957600080fd5b5061010d6101083660046104fa565b61037b565b6040516001600160a01b0390911681526020016100e4565b34801561013157600080fd5b506100da6101403660046104d7565b6001600160a01b031660009081526003602052604090205490565b34801561016757600080fd5b506100da6101763660046104d7565b6001600160a01b031660009081526002602052604090205490565b34801561019d57600080fd5b506001546100da565b6001600160a01b03811660009081526002602052604090205461021f5760405162461bcd60e51b815260206004820152602660248201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060448201526573686172657360d01b60648201526084015b60405180910390fd5b60006001544761022f9190610512565b6001600160a01b03831660009081526003602090815260408083205483546002909352908320549394509192610265908561054a565b61026f919061052a565b6102799190610569565b9050806102dc5760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060448201526a191d59481c185e5b595b9d60aa1b6064820152608401610216565b6001600160a01b038316600090815260036020526040902054610300908290610512565b6001600160a01b038416600090815260036020526040902055600154610327908290610512565b60015561033483826103b9565b604080516001600160a01b0385168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a1505050565b60006004828154811061039e57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031692915050565b804710156104095760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610216565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610456576040519150601f19603f3d011682016040523d82523d6000602084013e61045b565b606091505b50509050806104d25760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610216565b505050565b6000602082840312156104e8578081fd5b81356104f381610596565b9392505050565b60006020828403121561050b578081fd5b5035919050565b6000821982111561052557610525610580565b500190565b60008261054557634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561056457610564610580565b500290565b60008282101561057b5761057b610580565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146105ab57600080fd5b5056fea2646970667358221220fd47b4c67cba81d391f2a7510b725d33aab03c0d4da3265f86bffb2017e1ec8c64736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/Proxy.json b/node_modules/@openzeppelin/contracts/build/contracts/Proxy.json
new file mode 100644
index 0000000..a2b195d
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/Proxy.json
@@ -0,0 +1,19 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "Proxy",
+ "sourceName": "contracts/proxy/Proxy.sol",
+ "abi": [
+ {
+ "stateMutability": "payable",
+ "type": "fallback"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "receive"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ProxyAdmin.json b/node_modules/@openzeppelin/contracts/build/contracts/ProxyAdmin.json
new file mode 100644
index 0000000..c7f9911
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ProxyAdmin.json
@@ -0,0 +1,160 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ProxyAdmin",
+ "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "previousOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "OwnershipTransferred",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract TransparentUpgradeableProxy",
+ "name": "proxy",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "newAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "changeProxyAdmin",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract TransparentUpgradeableProxy",
+ "name": "proxy",
+ "type": "address"
+ }
+ ],
+ "name": "getProxyAdmin",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract TransparentUpgradeableProxy",
+ "name": "proxy",
+ "type": "address"
+ }
+ ],
+ "name": "getProxyImplementation",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "renounceOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract TransparentUpgradeableProxy",
+ "name": "proxy",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "implementation",
+ "type": "address"
+ }
+ ],
+ "name": "upgrade",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract TransparentUpgradeableProxy",
+ "name": "proxy",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "implementation",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "upgradeAndCall",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107198061007e6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead146101645761007b565b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b3660046104d8565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee366004610517565b610254565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461054f565b6102de565b34801561013057600080fd5b506100d161013f366004610517565b61036f565b34801561015057600080fd5b506100d161015f3660046104d8565b6103c7565b34801561017057600080fd5b506100a061017f3660046104d8565b610462565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906104fb565b949350505050565b6000546001600160a01b031633146102485760405162461bcd60e51b815260040161023f90610683565b60405180910390fd5b6102526000610488565b565b6000546001600160a01b0316331461027e5760405162461bcd60e51b815260040161023f90610683565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b1580156102c257600080fd5b505af11580156102d6573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103085760405162461bcd60e51b815260040161023f90610683565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906103389086908690600401610620565b6000604051808303818588803b15801561035157600080fd5b505af1158015610365573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146103995760405162461bcd60e51b815260040161023f90610683565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe6906024016102a8565b6000546001600160a01b031633146103f15760405162461bcd60e51b815260040161023f90610683565b6001600160a01b0381166104565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161023f565b61045f81610488565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156104e9578081fd5b81356104f4816106ce565b9392505050565b60006020828403121561050c578081fd5b81516104f4816106ce565b60008060408385031215610529578081fd5b8235610534816106ce565b91506020830135610544816106ce565b809150509250929050565b600080600060608486031215610563578081fd5b833561056e816106ce565b9250602084013561057e816106ce565b9150604084013567ffffffffffffffff8082111561059a578283fd5b818601915086601f8301126105ad578283fd5b8135818111156105bf576105bf6106b8565b604051601f8201601f19908116603f011681019083821181831017156105e7576105e76106b8565b816040528281528960208487010111156105ff578586fd5b82602086016020830137856020848301015280955050505050509250925092565b600060018060a01b038416825260206040818401528351806040850152825b8181101561065b5785810183015185820160600152820161063f565b8181111561066c5783606083870101525b50601f01601f191692909201606001949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461045f57600080fdfea264697066735822122055d89c2449fb1dbc93789ed0dbadfb30c56205789c038ea1f880e9dc7291281964736f6c63430008030033",
+ "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead146101645761007b565b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b3660046104d8565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee366004610517565b610254565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461054f565b6102de565b34801561013057600080fd5b506100d161013f366004610517565b61036f565b34801561015057600080fd5b506100d161015f3660046104d8565b6103c7565b34801561017057600080fd5b506100a061017f3660046104d8565b610462565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906104fb565b949350505050565b6000546001600160a01b031633146102485760405162461bcd60e51b815260040161023f90610683565b60405180910390fd5b6102526000610488565b565b6000546001600160a01b0316331461027e5760405162461bcd60e51b815260040161023f90610683565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b1580156102c257600080fd5b505af11580156102d6573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103085760405162461bcd60e51b815260040161023f90610683565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906103389086908690600401610620565b6000604051808303818588803b15801561035157600080fd5b505af1158015610365573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146103995760405162461bcd60e51b815260040161023f90610683565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe6906024016102a8565b6000546001600160a01b031633146103f15760405162461bcd60e51b815260040161023f90610683565b6001600160a01b0381166104565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161023f565b61045f81610488565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156104e9578081fd5b81356104f4816106ce565b9392505050565b60006020828403121561050c578081fd5b81516104f4816106ce565b60008060408385031215610529578081fd5b8235610534816106ce565b91506020830135610544816106ce565b809150509250929050565b600080600060608486031215610563578081fd5b833561056e816106ce565b9250602084013561057e816106ce565b9150604084013567ffffffffffffffff8082111561059a578283fd5b818601915086601f8301126105ad578283fd5b8135818111156105bf576105bf6106b8565b604051601f8201601f19908116603f011681019083821181831017156105e7576105e76106b8565b816040528281528960208487010111156105ff578586fd5b82602086016020830137856020848301015280955050505050509250925092565b600060018060a01b038416825260206040818401528351806040850152825b8181101561065b5785810183015185820160600152820161063f565b8181111561066c5783606083870101525b50601f01601f191692909201606001949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461045f57600080fdfea264697066735822122055d89c2449fb1dbc93789ed0dbadfb30c56205789c038ea1f880e9dc7291281964736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/PullPayment.json b/node_modules/@openzeppelin/contracts/build/contracts/PullPayment.json
new file mode 100644
index 0000000..319480a
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/PullPayment.json
@@ -0,0 +1,43 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "PullPayment",
+ "sourceName": "contracts/security/PullPayment.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "dest",
+ "type": "address"
+ }
+ ],
+ "name": "payments",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address payable",
+ "name": "payee",
+ "type": "address"
+ }
+ ],
+ "name": "withdrawPayments",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/ReentrancyGuard.json b/node_modules/@openzeppelin/contracts/build/contracts/ReentrancyGuard.json
new file mode 100644
index 0000000..0b5c937
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/ReentrancyGuard.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "ReentrancyGuard",
+ "sourceName": "contracts/security/ReentrancyGuard.sol",
+ "abi": [],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/RefundEscrow.json b/node_modules/@openzeppelin/contracts/build/contracts/RefundEscrow.json
new file mode 100644
index 0000000..e0a22eb
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/RefundEscrow.json
@@ -0,0 +1,235 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "RefundEscrow",
+ "sourceName": "contracts/utils/escrow/RefundEscrow.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address payable",
+ "name": "beneficiary_",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "payee",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weiAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "Deposited",
+ "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": [],
+ "name": "RefundsClosed",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [],
+ "name": "RefundsEnabled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "payee",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "weiAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "Withdrawn",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "beneficiary",
+ "outputs": [
+ {
+ "internalType": "address payable",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "beneficiaryWithdraw",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "close",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "refundee",
+ "type": "address"
+ }
+ ],
+ "name": "deposit",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "payee",
+ "type": "address"
+ }
+ ],
+ "name": "depositsOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "enableRefunds",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "renounceOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "state",
+ "outputs": [
+ {
+ "internalType": "enum RefundEscrow.State",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address payable",
+ "name": "payee",
+ "type": "address"
+ }
+ ],
+ "name": "withdraw",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "name": "withdrawalAllowed",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x60a060405234801561001057600080fd5b50604051610c17380380610c1783398101604081905261002f91610117565b610038336100c7565b6001600160a01b0381166100a85760405162461bcd60e51b815260206004820152602d60248201527f526566756e64457363726f773a2062656e65666963696172792069732074686560448201526c207a65726f206164647265737360981b606482015260840160405180910390fd5b60601b6001600160601b0319166080526002805460ff19169055610145565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610128578081fd5b81516001600160a01b038116811461013e578182fd5b9392505050565b60805160601c610aae6101696000396000818160bb01526105cf0152610aae6000f3fe6080604052600436106100a75760003560e01c80638da5cb5b116100645780638da5cb5b146101895780639af6549a146101a7578063c19d93fb146101bc578063e3a9db1a146101dc578063f2fde38b14610220578063f340fa0114610240576100a7565b806338af3eed146100ac57806343d726d6146100f857806351cff8d91461010f578063685ca1941461012f578063715018a61461015f5780638c52dc4114610174575b600080fd5b3480156100b857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020015b60405180910390f35b34801561010457600080fd5b5061010d610253565b005b34801561011b57600080fd5b5061010d61012a3660046109bf565b610349565b34801561013b57600080fd5b5061014f61014a3660046109bf565b6103c6565b60405190151581526020016100ef565b34801561016b57600080fd5b5061010d6103fc565b34801561018057600080fd5b5061010d610432565b34801561019557600080fd5b506000546001600160a01b03166100db565b3480156101b357600080fd5b5061010d610529565b3480156101c857600080fd5b5060025460ff166040516100ef91906109e2565b3480156101e857600080fd5b506102126101f73660046109bf565b6001600160a01b031660009081526001602052604090205490565b6040519081526020016100ef565b34801561022c57600080fd5b5061010d61023b3660046109bf565b6105f5565b61010d61024e3660046109bf565b61068d565b6000546001600160a01b031633146102865760405162461bcd60e51b815260040161027d90610a0a565b60405180910390fd5b600061029460025460ff1690565b60028111156102b357634e487b7160e01b600052602160045260246000fd5b146103125760405162461bcd60e51b815260206004820152602960248201527f526566756e64457363726f773a2063616e206f6e6c7920636c6f7365207768696044820152686c652061637469766560b81b606482015260840161027d565b6002805460ff1916811790556040517f088672c3a6e342f7cd94a65ba63b79df24a8973927b4d05d803c44bbf787d12f90600090a1565b610352816103c6565b6103ba5760405162461bcd60e51b815260206004820152603360248201527f436f6e646974696f6e616c457363726f773a207061796565206973206e6f7420604482015272616c6c6f77656420746f20776974686472617760681b606482015260840161027d565b6103c381610724565b50565b600060016103d660025460ff1690565b60028111156103f557634e487b7160e01b600052602160045260246000fd5b1492915050565b6000546001600160a01b031633146104265760405162461bcd60e51b815260040161027d90610a0a565b61043060006107bd565b565b6000546001600160a01b0316331461045c5760405162461bcd60e51b815260040161027d90610a0a565b600061046a60025460ff1690565b600281111561048957634e487b7160e01b600052602160045260246000fd5b146104f15760405162461bcd60e51b815260206004820152603260248201527f526566756e64457363726f773a2063616e206f6e6c7920656e61626c6520726560448201527166756e6473207768696c652061637469766560701b606482015260840161027d565b6002805460ff191660011790556040517f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8990600090a1565b6002805460ff16600281111561054f57634e487b7160e01b600052602160045260246000fd5b146105c25760405162461bcd60e51b815260206004820152603860248201527f526566756e64457363726f773a2062656e65666963696172792063616e206f6e60448201527f6c79207769746864726177207768696c6520636c6f7365640000000000000000606482015260840161027d565b6104306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000164761080d565b6000546001600160a01b0316331461061f5760405162461bcd60e51b815260040161027d90610a0a565b6001600160a01b0381166106845760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161027d565b6103c3816107bd565b600061069b60025460ff1690565b60028111156106ba57634e487b7160e01b600052602160045260246000fd5b1461071b5760405162461bcd60e51b815260206004820152602b60248201527f526566756e64457363726f773a2063616e206f6e6c79206465706f736974207760448201526a68696c652061637469766560a81b606482015260840161027d565b6103c38161092b565b6000546001600160a01b0316331461074e5760405162461bcd60e51b815260040161027d90610a0a565b6001600160a01b0381166000818152600160205260408120805491905590610776908261080d565b816001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040516107b191815260200190565b60405180910390a25050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8047101561085d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161027d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108aa576040519150601f19603f3d011682016040523d82523d6000602084013e6108af565b606091505b50509050806109265760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161027d565b505050565b6000546001600160a01b031633146109555760405162461bcd60e51b815260040161027d90610a0a565b6001600160a01b03811660009081526001602052604081208054349283929161097f908490610a3f565b90915550506040518181526001600160a01b038316907f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4906020016107b1565b6000602082840312156109d0578081fd5b81356109db81610a63565b9392505050565b6020810160038310610a0457634e487b7160e01b600052602160045260246000fd5b91905290565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115610a5e57634e487b7160e01b81526011600452602481fd5b500190565b6001600160a01b03811681146103c357600080fdfea2646970667358221220fcf0fd8037f372c1eae94dba60e7f9dc6b92aaa5db82e6051e33f045d837612c64736f6c63430008030033",
+ "deployedBytecode": "0x6080604052600436106100a75760003560e01c80638da5cb5b116100645780638da5cb5b146101895780639af6549a146101a7578063c19d93fb146101bc578063e3a9db1a146101dc578063f2fde38b14610220578063f340fa0114610240576100a7565b806338af3eed146100ac57806343d726d6146100f857806351cff8d91461010f578063685ca1941461012f578063715018a61461015f5780638c52dc4114610174575b600080fd5b3480156100b857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020015b60405180910390f35b34801561010457600080fd5b5061010d610253565b005b34801561011b57600080fd5b5061010d61012a3660046109bf565b610349565b34801561013b57600080fd5b5061014f61014a3660046109bf565b6103c6565b60405190151581526020016100ef565b34801561016b57600080fd5b5061010d6103fc565b34801561018057600080fd5b5061010d610432565b34801561019557600080fd5b506000546001600160a01b03166100db565b3480156101b357600080fd5b5061010d610529565b3480156101c857600080fd5b5060025460ff166040516100ef91906109e2565b3480156101e857600080fd5b506102126101f73660046109bf565b6001600160a01b031660009081526001602052604090205490565b6040519081526020016100ef565b34801561022c57600080fd5b5061010d61023b3660046109bf565b6105f5565b61010d61024e3660046109bf565b61068d565b6000546001600160a01b031633146102865760405162461bcd60e51b815260040161027d90610a0a565b60405180910390fd5b600061029460025460ff1690565b60028111156102b357634e487b7160e01b600052602160045260246000fd5b146103125760405162461bcd60e51b815260206004820152602960248201527f526566756e64457363726f773a2063616e206f6e6c7920636c6f7365207768696044820152686c652061637469766560b81b606482015260840161027d565b6002805460ff1916811790556040517f088672c3a6e342f7cd94a65ba63b79df24a8973927b4d05d803c44bbf787d12f90600090a1565b610352816103c6565b6103ba5760405162461bcd60e51b815260206004820152603360248201527f436f6e646974696f6e616c457363726f773a207061796565206973206e6f7420604482015272616c6c6f77656420746f20776974686472617760681b606482015260840161027d565b6103c381610724565b50565b600060016103d660025460ff1690565b60028111156103f557634e487b7160e01b600052602160045260246000fd5b1492915050565b6000546001600160a01b031633146104265760405162461bcd60e51b815260040161027d90610a0a565b61043060006107bd565b565b6000546001600160a01b0316331461045c5760405162461bcd60e51b815260040161027d90610a0a565b600061046a60025460ff1690565b600281111561048957634e487b7160e01b600052602160045260246000fd5b146104f15760405162461bcd60e51b815260206004820152603260248201527f526566756e64457363726f773a2063616e206f6e6c7920656e61626c6520726560448201527166756e6473207768696c652061637469766560701b606482015260840161027d565b6002805460ff191660011790556040517f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8990600090a1565b6002805460ff16600281111561054f57634e487b7160e01b600052602160045260246000fd5b146105c25760405162461bcd60e51b815260206004820152603860248201527f526566756e64457363726f773a2062656e65666963696172792063616e206f6e60448201527f6c79207769746864726177207768696c6520636c6f7365640000000000000000606482015260840161027d565b6104306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000164761080d565b6000546001600160a01b0316331461061f5760405162461bcd60e51b815260040161027d90610a0a565b6001600160a01b0381166106845760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161027d565b6103c3816107bd565b600061069b60025460ff1690565b60028111156106ba57634e487b7160e01b600052602160045260246000fd5b1461071b5760405162461bcd60e51b815260206004820152602b60248201527f526566756e64457363726f773a2063616e206f6e6c79206465706f736974207760448201526a68696c652061637469766560a81b606482015260840161027d565b6103c38161092b565b6000546001600160a01b0316331461074e5760405162461bcd60e51b815260040161027d90610a0a565b6001600160a01b0381166000818152600160205260408120805491905590610776908261080d565b816001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040516107b191815260200190565b60405180910390a25050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8047101561085d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161027d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108aa576040519150601f19603f3d011682016040523d82523d6000602084013e6108af565b606091505b50509050806109265760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161027d565b505050565b6000546001600160a01b031633146109555760405162461bcd60e51b815260040161027d90610a0a565b6001600160a01b03811660009081526001602052604081208054349283929161097f908490610a3f565b90915550506040518181526001600160a01b038316907f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4906020016107b1565b6000602082840312156109d0578081fd5b81356109db81610a63565b9392505050565b6020810160038310610a0457634e487b7160e01b600052602160045260246000fd5b91905290565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115610a5e57634e487b7160e01b81526011600452602481fd5b500190565b6001600160a01b03811681146103c357600080fdfea2646970667358221220fcf0fd8037f372c1eae94dba60e7f9dc6b92aaa5db82e6051e33f045d837612c64736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/SafeCast.json b/node_modules/@openzeppelin/contracts/build/contracts/SafeCast.json
new file mode 100644
index 0000000..fdfa496
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/SafeCast.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "SafeCast",
+ "sourceName": "contracts/utils/math/SafeCast.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b5cfe7f9d14412e1a9a046efbbb15d9413eb64014b5ed9a2f1fb087747e3c31864736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b5cfe7f9d14412e1a9a046efbbb15d9413eb64014b5ed9a2f1fb087747e3c31864736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/SafeERC20.json b/node_modules/@openzeppelin/contracts/build/contracts/SafeERC20.json
new file mode 100644
index 0000000..5ff607a
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/SafeERC20.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "SafeERC20",
+ "sourceName": "contracts/token/ERC20/utils/SafeERC20.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c013fe4570eb30cc1a6432f2f57e4d56eaf67fd154b1e2c5f43fe49d7c5e2b4364736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c013fe4570eb30cc1a6432f2f57e4d56eaf67fd154b1e2c5f43fe49d7c5e2b4364736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/SafeMath.json b/node_modules/@openzeppelin/contracts/build/contracts/SafeMath.json
new file mode 100644
index 0000000..3146fc1
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/SafeMath.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "SafeMath",
+ "sourceName": "contracts/utils/math/SafeMath.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202929a3ce9656e06a8b266f2f10b83ab9b434f09eb5fe65ccbe97cf16ae3275d264736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202929a3ce9656e06a8b266f2f10b83ab9b434f09eb5fe65ccbe97cf16ae3275d264736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/SignatureChecker.json b/node_modules/@openzeppelin/contracts/build/contracts/SignatureChecker.json
new file mode 100644
index 0000000..f775ed9
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/SignatureChecker.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "SignatureChecker",
+ "sourceName": "contracts/utils/cryptography/SignatureChecker.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a1dcb5700d167381f0ff07cd76482ab4efb8236a4343a6c03cf518458acba81864736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a1dcb5700d167381f0ff07cd76482ab4efb8236a4343a6c03cf518458acba81864736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/SignedSafeMath.json b/node_modules/@openzeppelin/contracts/build/contracts/SignedSafeMath.json
new file mode 100644
index 0000000..9eb621f
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/SignedSafeMath.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "SignedSafeMath",
+ "sourceName": "contracts/utils/math/SignedSafeMath.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206f7e60b9087e196250ee5968781223440984d887924ffd060b6d76606db07e7564736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206f7e60b9087e196250ee5968781223440984d887924ffd060b6d76606db07e7564736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/StorageSlot.json b/node_modules/@openzeppelin/contracts/build/contracts/StorageSlot.json
new file mode 100644
index 0000000..7b05879
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/StorageSlot.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "StorageSlot",
+ "sourceName": "contracts/utils/StorageSlot.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b67348f1b60e45326cbe2680dfa6d3f07c0330330a85529d451ac9844b56b6e364736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b67348f1b60e45326cbe2680dfa6d3f07c0330330a85529d451ac9844b56b6e364736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/Strings.json b/node_modules/@openzeppelin/contracts/build/contracts/Strings.json
new file mode 100644
index 0000000..42d5199
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/Strings.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "Strings",
+ "sourceName": "contracts/utils/Strings.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bc3346a4ca06fa391924677f580a635f0230679fb50fadb4bef1319d5d73949764736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bc3346a4ca06fa391924677f580a635f0230679fb50fadb4bef1319d5d73949764736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/TimelockController.json b/node_modules/@openzeppelin/contracts/build/contracts/TimelockController.json
new file mode 100644
index 0000000..8c549d9
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/TimelockController.json
@@ -0,0 +1,751 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "TimelockController",
+ "sourceName": "contracts/governance/TimelockController.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "minDelay",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "proposers",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "executors",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "id",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "CallExecuted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "id",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes32",
+ "name": "predecessor",
+ "type": "bytes32"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "delay",
+ "type": "uint256"
+ }
+ ],
+ "name": "CallScheduled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "id",
+ "type": "bytes32"
+ }
+ ],
+ "name": "Cancelled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "oldDuration",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "newDuration",
+ "type": "uint256"
+ }
+ ],
+ "name": "MinDelayChange",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "previousAdminRole",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "newAdminRole",
+ "type": "bytes32"
+ }
+ ],
+ "name": "RoleAdminChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "RoleGranted",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "RoleRevoked",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "DEFAULT_ADMIN_ROLE",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "EXECUTOR_ROLE",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "PROPOSER_ROLE",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "TIMELOCK_ADMIN_ROLE",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "id",
+ "type": "bytes32"
+ }
+ ],
+ "name": "cancel",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "predecessor",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "salt",
+ "type": "bytes32"
+ }
+ ],
+ "name": "execute",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "datas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "predecessor",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "salt",
+ "type": "bytes32"
+ }
+ ],
+ "name": "executeBatch",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getMinDelay",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "duration",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getRoleAdmin",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "id",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getTimestamp",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "timestamp",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "grantRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "hasRole",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "predecessor",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "salt",
+ "type": "bytes32"
+ }
+ ],
+ "name": "hashOperation",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "hash",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "datas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "predecessor",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "salt",
+ "type": "bytes32"
+ }
+ ],
+ "name": "hashOperationBatch",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "hash",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "id",
+ "type": "bytes32"
+ }
+ ],
+ "name": "isOperation",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "pending",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "id",
+ "type": "bytes32"
+ }
+ ],
+ "name": "isOperationDone",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "done",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "id",
+ "type": "bytes32"
+ }
+ ],
+ "name": "isOperationPending",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "pending",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "id",
+ "type": "bytes32"
+ }
+ ],
+ "name": "isOperationReady",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "ready",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "renounceRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "revokeRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "predecessor",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "salt",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "delay",
+ "type": "uint256"
+ }
+ ],
+ "name": "schedule",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "targets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "datas",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "predecessor",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "salt",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "delay",
+ "type": "uint256"
+ }
+ ],
+ "name": "scheduleBatch",
+ "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": "newDelay",
+ "type": "uint256"
+ }
+ ],
+ "name": "updateDelay",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "receive"
+ }
+ ],
+ "bytecode": "0x60806040523480156200001157600080fd5b5060405162001e8238038062001e828339810160408190526200003491620003c6565b6200004f60008051602062001e2283398151915280620001e1565b6200007960008051602062001e4283398151915260008051602062001e22833981519152620001e1565b620000a360008051602062001e6283398151915260008051602062001e22833981519152620001e1565b620000be60008051602062001e228339815191523362000236565b620000d960008051602062001e228339815191523062000236565b60005b825181101562000142576200012f60008051602062001e428339815191528483815181106200011b57634e487b7160e01b600052603260045260246000fd5b60200260200101516200023660201b60201c565b6200013a8162000437565b9050620000dc565b5060005b815181101562000198576200018560008051602062001e628339815191528383815181106200011b57634e487b7160e01b600052603260045260246000fd5b620001908162000437565b905062000146565b5060028390556040805160008152602081018590527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a150505062000475565b6000620001ee8362000246565b600084815260208190526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6200024282826200025e565b5050565b6000818152602081905260409020600101545b919050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000242576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002ba3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b80516001600160a01b03811681146200025957600080fd5b600082601f83011262000327578081fd5b815160206001600160401b03808311156200034657620003466200045f565b8260051b604051601f19603f830116810181811084821117156200036e576200036e6200045f565b604052848152838101925086840182880185018910156200038d578687fd5b8692505b85831015620003ba57620003a581620002fe565b84529284019260019290920191840162000391565b50979650505050505050565b600080600060608486031215620003db578283fd5b835160208501519093506001600160401b0380821115620003fa578384fd5b620004088783880162000316565b935060408601519150808211156200041e578283fd5b506200042d8682870162000316565b9150509250925092565b60006000198214156200045857634e487b7160e01b81526011600452602481fd5b5060010190565b634e487b7160e01b600052604160045260246000fd5b61199d80620004856000396000f3fe60806040526004361061014f5760003560e01c806364d62353116100b6578063b1c5f4271161006f578063b1c5f427146103f3578063c4d252f514610413578063d45c443514610433578063d547741f14610460578063e38335e514610480578063f27a0c921461049357610156565b806364d623531461033c5780638065657f1461035c5780638f2a0bb01461037c5780638f61f4f51461039c57806391d14854146103be578063a217fddf146103de57610156565b8063248a9ca311610108578063248a9ca31461025b5780632ab0f5291461028b5780632f2ff15d146102bc57806331d50750146102dc57806336568abe146102fc578063584b153e1461031c57610156565b806301d5062a1461015b57806301ffc9a71461017d57806307bd0265146101b25780630d3cf6fc146101f4578063134008d31461022857806313bc9f201461023b57610156565b3661015657005b600080fd5b34801561016757600080fd5b5061017b610176366004611312565b6104a8565b005b34801561018957600080fd5b5061019d61019836600461151b565b61052d565b60405190151581526020015b60405180910390f35b3480156101be57600080fd5b506101e67fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b6040519081526020016101a9565b34801561020057600080fd5b506101e67f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca581565b61017b6102363660046112a8565b610566565b34801561024757600080fd5b5061019d6102563660046114d8565b6105de565b34801561026757600080fd5b506101e66102763660046114d8565b60009081526020819052604090206001015490565b34801561029757600080fd5b5061019d6102a63660046114d8565b6000908152600160208190526040909120541490565b3480156102c857600080fd5b5061017b6102d73660046114f0565b610604565b3480156102e857600080fd5b5061019d6102f73660046114d8565b61062f565b34801561030857600080fd5b5061017b6103173660046114f0565b610648565b34801561032857600080fd5b5061019d6103373660046114d8565b6106cb565b34801561034857600080fd5b5061017b6103573660046114d8565b6106e1565b34801561036857600080fd5b506101e66103773660046112a8565b610785565b34801561038857600080fd5b5061017b61039736600461142a565b6107c4565b3480156103a857600080fd5b506101e660008051602061194883398151915281565b3480156103ca57600080fd5b5061019d6103d93660046114f0565b61092f565b3480156103ea57600080fd5b506101e6600081565b3480156103ff57600080fd5b506101e661040e366004611385565b610958565b34801561041f57600080fd5b5061017b61042e3660046114d8565b61099d565b34801561043f57600080fd5b506101e661044e3660046114d8565b60009081526001602052604090205490565b34801561046c57600080fd5b5061017b61047b3660046114f0565b610a61565b61017b61048e366004611385565b610a87565b34801561049f57600080fd5b506002546101e6565b6000805160206119488339815191526104c281335b610be6565b60006104d2898989898989610785565b90506104de8184610c4a565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a60405161051a969594939291906116b1565b60405180910390a3505050505050505050565b60006001600160e01b03198216637965db0b60e01b148061055e57506301ffc9a760e01b6001600160e01b03198316145b90505b919050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6361059281600061092f565b6105a0576105a081336104bd565b60006105b0888888888888610785565b90506105bc8185610d39565b6105cb8160008a8a8a8a610dd5565b6105d481610ee9565b5050505050505050565b6000818152600160205260408120546001811180156105fd5750428111155b9392505050565b60008281526020819052604090206001015461062081336104bd565b61062a8383610f22565b505050565b60008181526001602052604081205481905b1192915050565b6001600160a01b03811633146106bd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6106c78282610fa6565b5050565b6000818152600160208190526040822054610641565b3330146107445760405162461bcd60e51b815260206004820152602b60248201527f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060448201526a62652074696d656c6f636b60a81b60648201526084016106b4565b60025460408051918252602082018390527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1600255565b60008686868686866040516020016107a2969594939291906116b1565b6040516020818303038152906040528051906020012090509695505050505050565b6000805160206119488339815191526107dd81336104bd565b8887146107fc5760405162461bcd60e51b81526004016106b4906117c6565b88851461081b5760405162461bcd60e51b81526004016106b4906117c6565b600061082d8b8b8b8b8b8b8b8b610958565b90506108398184610c4a565b60005b8a8110156109215780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e8581811061088757634e487b7160e01b600052603260045260246000fd5b905060200201602081019061089c919061128e565b8d8d868181106108bc57634e487b7160e01b600052603260045260246000fd5b905060200201358c8c878181106108e357634e487b7160e01b600052603260045260246000fd5b90506020028101906108f59190611853565b8c8b604051610909969594939291906116b1565b60405180910390a361091a81611916565b905061083c565b505050505050505050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600088888888888888886040516020016109799897969594939291906116ee565b60405160208183030381529060405280519060200120905098975050505050505050565b6000805160206119488339815191526109b681336104bd565b6109bf826106cb565b610a255760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e2063616044820152701b9b9bdd0818994818d85b98d95b1b1959607a1b60648201526084016106b4565b6000828152600160205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b600082815260208190526040902060010154610a7d81336104bd565b61062a8383610fa6565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610ab381600061092f565b610ac157610ac181336104bd565b878614610ae05760405162461bcd60e51b81526004016106b4906117c6565b878414610aff5760405162461bcd60e51b81526004016106b4906117c6565b6000610b118a8a8a8a8a8a8a8a610958565b9050610b1d8185610d39565b60005b89811015610bd057610bc082828d8d85818110610b4d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610b62919061128e565b8c8c86818110610b8257634e487b7160e01b600052603260045260246000fd5b905060200201358b8b87818110610ba957634e487b7160e01b600052603260045260246000fd5b9050602002810190610bbb9190611853565b610dd5565b610bc981611916565b9050610b20565b50610bda81610ee9565b50505050505050505050565b610bf0828261092f565b6106c757610c08816001600160a01b0316601461100b565b610c1383602061100b565b604051602001610c2492919061160a565b60408051601f198184030181529082905262461bcd60e51b82526106b491600401611793565b610c538261062f565b15610cb85760405162461bcd60e51b815260206004820152602f60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60448201526e1c9958591e481cd8da19591d5b1959608a1b60648201526084016106b4565b600254811015610d195760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e746044820152652064656c617960d01b60648201526084016106b4565b610d238142611898565b6000928352600160205260409092209190915550565b610d42826105de565b610d5e5760405162461bcd60e51b81526004016106b490611809565b801580610d7a5750600081815260016020819052604090912054145b6106c75760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e6720646570656044820152656e64656e637960d01b60648201526084016106b4565b6000846001600160a01b0316848484604051610df29291906115fa565b60006040518083038185875af1925050503d8060008114610e2f576040519150601f19603f3d011682016040523d82523d6000602084013e610e34565b606091505b5050905080610ea15760405162461bcd60e51b815260206004820152603360248201527f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e6720746044820152721c985b9cd858dd1a5bdb881c995d995c9d1959606a1b60648201526084016106b4565b85877fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5887878787604051610ed8949392919061167f565b60405180910390a350505050505050565b610ef2816105de565b610f0e5760405162461bcd60e51b81526004016106b490611809565b600090815260016020819052604090912055565b610f2c828261092f565b6106c7576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610f623390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610fb0828261092f565b156106c7576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6060600061101a8360026118b0565b611025906002611898565b67ffffffffffffffff81111561104b57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611075576020820181803683370190505b509050600360fc1b8160008151811061109e57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106110db57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006110ff8460026118b0565b61110a906001611898565b90505b600181111561119e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061114c57634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061117057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611197816118ff565b905061110d565b5083156105fd5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106b4565b80356001600160a01b038116811461056157600080fd5b60008083601f840112611215578182fd5b50813567ffffffffffffffff81111561122c578182fd5b6020830191508360208260051b850101111561124757600080fd5b9250929050565b60008083601f84011261125f578182fd5b50813567ffffffffffffffff811115611276578182fd5b60208301915083602082850101111561124757600080fd5b60006020828403121561129f578081fd5b6105fd826111ed565b60008060008060008060a087890312156112c0578182fd5b6112c9876111ed565b955060208701359450604087013567ffffffffffffffff8111156112eb578283fd5b6112f789828a0161124e565b979a9699509760608101359660809091013595509350505050565b600080600080600080600060c0888a03121561132c578081fd5b611335886111ed565b965060208801359550604088013567ffffffffffffffff811115611357578182fd5b6113638a828b0161124e565b989b979a50986060810135976080820135975060a09091013595509350505050565b60008060008060008060008060a0898b0312156113a0578081fd5b883567ffffffffffffffff808211156113b7578283fd5b6113c38c838d01611204565b909a50985060208b01359150808211156113db578283fd5b6113e78c838d01611204565b909850965060408b01359150808211156113ff578283fd5b5061140c8b828c01611204565b999c989b509699959896976060870135966080013595509350505050565b600080600080600080600080600060c08a8c031215611447578081fd5b893567ffffffffffffffff8082111561145e578283fd5b61146a8d838e01611204565b909b50995060208c0135915080821115611482578283fd5b61148e8d838e01611204565b909950975060408c01359150808211156114a6578283fd5b506114b38c828d01611204565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b6000602082840312156114e9578081fd5b5035919050565b60008060408385031215611502578182fd5b82359150611512602084016111ed565b90509250929050565b60006020828403121561152c578081fd5b81356001600160e01b0319811681146105fd578182fd5b60008284526020808501808196508560051b8101915084845b878110156115c35782840389528135601e1988360301811261157c578687fd5b8701803567ffffffffffffffff811115611594578788fd5b8036038913156115a2578788fd5b6115af86828985016115d0565b9a87019a955050509084019060010161155c565b5091979650505050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6000828483379101908152919050565b60007f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000825283516116428160178501602088016118cf565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516116738160288401602088016118cf565b01602801949350505050565b600060018060a01b0386168252846020830152606060408301526116a76060830184866115d0565b9695505050505050565b600060018060a01b038816825286602083015260a060408301526116d960a0830186886115d0565b60608301949094525060800152949350505050565b60a0808252810188905260008960c08301825b8b81101561172f576001600160a01b0361171a846111ed565b16825260209283019290910190600101611701565b5083810360208501528881526001600160fb1b0389111561174e578283fd5b8860051b9150818a6020830137016020818101838152848303909101604085015261177a81888a611543565b6060850196909652505050608001529695505050505050565b60006020825282518060208401526117b28160408501602087016118cf565b601f01601f19169190910160400192915050565b60208082526023908201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d616040820152620e8c6d60eb1b606082015260800190565b6020808252602a908201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e206973604082015269206e6f7420726561647960b01b606082015260800190565b6000808335601e19843603018112611869578283fd5b83018035915067ffffffffffffffff821115611883578283fd5b60200191503681900382131561124757600080fd5b600082198211156118ab576118ab611931565b500190565b60008160001904831182151516156118ca576118ca611931565b500290565b60005b838110156118ea5781810151838201526020016118d2565b838111156118f9576000848401525b50505050565b60008161190e5761190e611931565b506000190190565b600060001982141561192a5761192a611931565b5060010190565b634e487b7160e01b600052601160045260246000fdfeb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1a2646970667358221220361a1d1e9106ffc77cb76ed529f6648bc4105a53ba3e6687320a78e96c57c24d64736f6c634300080300335f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5b09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1d8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63",
+ "deployedBytecode": "0x60806040526004361061014f5760003560e01c806364d62353116100b6578063b1c5f4271161006f578063b1c5f427146103f3578063c4d252f514610413578063d45c443514610433578063d547741f14610460578063e38335e514610480578063f27a0c921461049357610156565b806364d623531461033c5780638065657f1461035c5780638f2a0bb01461037c5780638f61f4f51461039c57806391d14854146103be578063a217fddf146103de57610156565b8063248a9ca311610108578063248a9ca31461025b5780632ab0f5291461028b5780632f2ff15d146102bc57806331d50750146102dc57806336568abe146102fc578063584b153e1461031c57610156565b806301d5062a1461015b57806301ffc9a71461017d57806307bd0265146101b25780630d3cf6fc146101f4578063134008d31461022857806313bc9f201461023b57610156565b3661015657005b600080fd5b34801561016757600080fd5b5061017b610176366004611312565b6104a8565b005b34801561018957600080fd5b5061019d61019836600461151b565b61052d565b60405190151581526020015b60405180910390f35b3480156101be57600080fd5b506101e67fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b6040519081526020016101a9565b34801561020057600080fd5b506101e67f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca581565b61017b6102363660046112a8565b610566565b34801561024757600080fd5b5061019d6102563660046114d8565b6105de565b34801561026757600080fd5b506101e66102763660046114d8565b60009081526020819052604090206001015490565b34801561029757600080fd5b5061019d6102a63660046114d8565b6000908152600160208190526040909120541490565b3480156102c857600080fd5b5061017b6102d73660046114f0565b610604565b3480156102e857600080fd5b5061019d6102f73660046114d8565b61062f565b34801561030857600080fd5b5061017b6103173660046114f0565b610648565b34801561032857600080fd5b5061019d6103373660046114d8565b6106cb565b34801561034857600080fd5b5061017b6103573660046114d8565b6106e1565b34801561036857600080fd5b506101e66103773660046112a8565b610785565b34801561038857600080fd5b5061017b61039736600461142a565b6107c4565b3480156103a857600080fd5b506101e660008051602061194883398151915281565b3480156103ca57600080fd5b5061019d6103d93660046114f0565b61092f565b3480156103ea57600080fd5b506101e6600081565b3480156103ff57600080fd5b506101e661040e366004611385565b610958565b34801561041f57600080fd5b5061017b61042e3660046114d8565b61099d565b34801561043f57600080fd5b506101e661044e3660046114d8565b60009081526001602052604090205490565b34801561046c57600080fd5b5061017b61047b3660046114f0565b610a61565b61017b61048e366004611385565b610a87565b34801561049f57600080fd5b506002546101e6565b6000805160206119488339815191526104c281335b610be6565b60006104d2898989898989610785565b90506104de8184610c4a565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a60405161051a969594939291906116b1565b60405180910390a3505050505050505050565b60006001600160e01b03198216637965db0b60e01b148061055e57506301ffc9a760e01b6001600160e01b03198316145b90505b919050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6361059281600061092f565b6105a0576105a081336104bd565b60006105b0888888888888610785565b90506105bc8185610d39565b6105cb8160008a8a8a8a610dd5565b6105d481610ee9565b5050505050505050565b6000818152600160205260408120546001811180156105fd5750428111155b9392505050565b60008281526020819052604090206001015461062081336104bd565b61062a8383610f22565b505050565b60008181526001602052604081205481905b1192915050565b6001600160a01b03811633146106bd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6106c78282610fa6565b5050565b6000818152600160208190526040822054610641565b3330146107445760405162461bcd60e51b815260206004820152602b60248201527f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060448201526a62652074696d656c6f636b60a81b60648201526084016106b4565b60025460408051918252602082018390527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1600255565b60008686868686866040516020016107a2969594939291906116b1565b6040516020818303038152906040528051906020012090509695505050505050565b6000805160206119488339815191526107dd81336104bd565b8887146107fc5760405162461bcd60e51b81526004016106b4906117c6565b88851461081b5760405162461bcd60e51b81526004016106b4906117c6565b600061082d8b8b8b8b8b8b8b8b610958565b90506108398184610c4a565b60005b8a8110156109215780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e8581811061088757634e487b7160e01b600052603260045260246000fd5b905060200201602081019061089c919061128e565b8d8d868181106108bc57634e487b7160e01b600052603260045260246000fd5b905060200201358c8c878181106108e357634e487b7160e01b600052603260045260246000fd5b90506020028101906108f59190611853565b8c8b604051610909969594939291906116b1565b60405180910390a361091a81611916565b905061083c565b505050505050505050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600088888888888888886040516020016109799897969594939291906116ee565b60405160208183030381529060405280519060200120905098975050505050505050565b6000805160206119488339815191526109b681336104bd565b6109bf826106cb565b610a255760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e2063616044820152701b9b9bdd0818994818d85b98d95b1b1959607a1b60648201526084016106b4565b6000828152600160205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b600082815260208190526040902060010154610a7d81336104bd565b61062a8383610fa6565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610ab381600061092f565b610ac157610ac181336104bd565b878614610ae05760405162461bcd60e51b81526004016106b4906117c6565b878414610aff5760405162461bcd60e51b81526004016106b4906117c6565b6000610b118a8a8a8a8a8a8a8a610958565b9050610b1d8185610d39565b60005b89811015610bd057610bc082828d8d85818110610b4d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610b62919061128e565b8c8c86818110610b8257634e487b7160e01b600052603260045260246000fd5b905060200201358b8b87818110610ba957634e487b7160e01b600052603260045260246000fd5b9050602002810190610bbb9190611853565b610dd5565b610bc981611916565b9050610b20565b50610bda81610ee9565b50505050505050505050565b610bf0828261092f565b6106c757610c08816001600160a01b0316601461100b565b610c1383602061100b565b604051602001610c2492919061160a565b60408051601f198184030181529082905262461bcd60e51b82526106b491600401611793565b610c538261062f565b15610cb85760405162461bcd60e51b815260206004820152602f60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60448201526e1c9958591e481cd8da19591d5b1959608a1b60648201526084016106b4565b600254811015610d195760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e746044820152652064656c617960d01b60648201526084016106b4565b610d238142611898565b6000928352600160205260409092209190915550565b610d42826105de565b610d5e5760405162461bcd60e51b81526004016106b490611809565b801580610d7a5750600081815260016020819052604090912054145b6106c75760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e6720646570656044820152656e64656e637960d01b60648201526084016106b4565b6000846001600160a01b0316848484604051610df29291906115fa565b60006040518083038185875af1925050503d8060008114610e2f576040519150601f19603f3d011682016040523d82523d6000602084013e610e34565b606091505b5050905080610ea15760405162461bcd60e51b815260206004820152603360248201527f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e6720746044820152721c985b9cd858dd1a5bdb881c995d995c9d1959606a1b60648201526084016106b4565b85877fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5887878787604051610ed8949392919061167f565b60405180910390a350505050505050565b610ef2816105de565b610f0e5760405162461bcd60e51b81526004016106b490611809565b600090815260016020819052604090912055565b610f2c828261092f565b6106c7576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610f623390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610fb0828261092f565b156106c7576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6060600061101a8360026118b0565b611025906002611898565b67ffffffffffffffff81111561104b57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611075576020820181803683370190505b509050600360fc1b8160008151811061109e57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106110db57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006110ff8460026118b0565b61110a906001611898565b90505b600181111561119e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061114c57634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061117057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611197816118ff565b905061110d565b5083156105fd5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106b4565b80356001600160a01b038116811461056157600080fd5b60008083601f840112611215578182fd5b50813567ffffffffffffffff81111561122c578182fd5b6020830191508360208260051b850101111561124757600080fd5b9250929050565b60008083601f84011261125f578182fd5b50813567ffffffffffffffff811115611276578182fd5b60208301915083602082850101111561124757600080fd5b60006020828403121561129f578081fd5b6105fd826111ed565b60008060008060008060a087890312156112c0578182fd5b6112c9876111ed565b955060208701359450604087013567ffffffffffffffff8111156112eb578283fd5b6112f789828a0161124e565b979a9699509760608101359660809091013595509350505050565b600080600080600080600060c0888a03121561132c578081fd5b611335886111ed565b965060208801359550604088013567ffffffffffffffff811115611357578182fd5b6113638a828b0161124e565b989b979a50986060810135976080820135975060a09091013595509350505050565b60008060008060008060008060a0898b0312156113a0578081fd5b883567ffffffffffffffff808211156113b7578283fd5b6113c38c838d01611204565b909a50985060208b01359150808211156113db578283fd5b6113e78c838d01611204565b909850965060408b01359150808211156113ff578283fd5b5061140c8b828c01611204565b999c989b509699959896976060870135966080013595509350505050565b600080600080600080600080600060c08a8c031215611447578081fd5b893567ffffffffffffffff8082111561145e578283fd5b61146a8d838e01611204565b909b50995060208c0135915080821115611482578283fd5b61148e8d838e01611204565b909950975060408c01359150808211156114a6578283fd5b506114b38c828d01611204565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b6000602082840312156114e9578081fd5b5035919050565b60008060408385031215611502578182fd5b82359150611512602084016111ed565b90509250929050565b60006020828403121561152c578081fd5b81356001600160e01b0319811681146105fd578182fd5b60008284526020808501808196508560051b8101915084845b878110156115c35782840389528135601e1988360301811261157c578687fd5b8701803567ffffffffffffffff811115611594578788fd5b8036038913156115a2578788fd5b6115af86828985016115d0565b9a87019a955050509084019060010161155c565b5091979650505050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6000828483379101908152919050565b60007f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000825283516116428160178501602088016118cf565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516116738160288401602088016118cf565b01602801949350505050565b600060018060a01b0386168252846020830152606060408301526116a76060830184866115d0565b9695505050505050565b600060018060a01b038816825286602083015260a060408301526116d960a0830186886115d0565b60608301949094525060800152949350505050565b60a0808252810188905260008960c08301825b8b81101561172f576001600160a01b0361171a846111ed565b16825260209283019290910190600101611701565b5083810360208501528881526001600160fb1b0389111561174e578283fd5b8860051b9150818a6020830137016020818101838152848303909101604085015261177a81888a611543565b6060850196909652505050608001529695505050505050565b60006020825282518060208401526117b28160408501602087016118cf565b601f01601f19169190910160400192915050565b60208082526023908201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d616040820152620e8c6d60eb1b606082015260800190565b6020808252602a908201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e206973604082015269206e6f7420726561647960b01b606082015260800190565b6000808335601e19843603018112611869578283fd5b83018035915067ffffffffffffffff821115611883578283fd5b60200191503681900382131561124757600080fd5b600082198211156118ab576118ab611931565b500190565b60008160001904831182151516156118ca576118ca611931565b500290565b60005b838110156118ea5781810151838201526020016118d2565b838111156118f9576000848401525b50505050565b60008161190e5761190e611931565b506000190190565b600060001982141561192a5761192a611931565b5060010190565b634e487b7160e01b600052601160045260246000fdfeb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1a2646970667358221220361a1d1e9106ffc77cb76ed529f6648bc4105a53ba3e6687320a78e96c57c24d64736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/Timers.json b/node_modules/@openzeppelin/contracts/build/contracts/Timers.json
new file mode 100644
index 0000000..c155eb2
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/Timers.json
@@ -0,0 +1,10 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "Timers",
+ "sourceName": "contracts/utils/Timers.sol",
+ "abi": [],
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e000e9c29388d734bb108a06559e629b9126379339ad3f1f6486a94e58d7dcd264736f6c63430008030033",
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e000e9c29388d734bb108a06559e629b9126379339ad3f1f6486a94e58d7dcd264736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/TokenTimelock.json b/node_modules/@openzeppelin/contracts/build/contracts/TokenTimelock.json
new file mode 100644
index 0000000..4e022d5
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/TokenTimelock.json
@@ -0,0 +1,78 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "TokenTimelock",
+ "sourceName": "contracts/token/ERC20/utils/TokenTimelock.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC20",
+ "name": "token_",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "beneficiary_",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "releaseTime_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [],
+ "name": "beneficiary",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "release",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "releaseTime",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "token",
+ "outputs": [
+ {
+ "internalType": "contract IERC20",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x60e060405234801561001057600080fd5b506040516107c63803806107c683398101604081905261002f916100c0565b42811161009d5760405162461bcd60e51b815260206004820152603260248201527f546f6b656e54696d656c6f636b3a2072656c656173652074696d65206973206260448201527165666f72652063757272656e742074696d6560701b606482015260840160405180910390fd5b6001600160601b0319606093841b81166080529190921b1660a05260c05261011a565b6000806000606084860312156100d4578283fd5b83516100df81610102565b60208501519093506100f081610102565b80925050604084015190509250925092565b6001600160a01b038116811461011757600080fd5b50565b60805160601c60a05160601c60c05161065f61016760003960008181609f015260f0015260008181605301526102a701526000818160ca015281816101820152610285015261065f6000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806338af3eed1461005157806386d1a69f14610090578063b91d40011461009a578063fc0c546a146100c8575b600080fd5b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020015b60405180910390f35b6100986100ee565b005b6040517f00000000000000000000000000000000000000000000000000000000000000008152602001610087565b7f0000000000000000000000000000000000000000000000000000000000000000610073565b7f000000000000000000000000000000000000000000000000000000000000000042101561017e5760405162461bcd60e51b815260206004820152603260248201527f546f6b656e54696d656c6f636b3a2063757272656e742074696d65206973206260448201527165666f72652072656c656173652074696d6560701b60648201526084015b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a082319060240160206040518083038186803b1580156101e257600080fd5b505afa1580156101f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061021a9190610592565b9050600081116102785760405162461bcd60e51b815260206004820152602360248201527f546f6b656e54696d656c6f636b3a206e6f20746f6b656e7320746f2072656c6560448201526261736560e81b6064820152608401610175565b6102cc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000836102cf565b50565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610321908490610326565b505050565b600061037b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166103f89092919063ffffffff16565b80519091501561032157808060200190518101906103999190610572565b6103215760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610175565b60606104078484600085610411565b90505b9392505050565b6060824710156104725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610175565b843b6104c05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610175565b600080866001600160a01b031685876040516104dc91906105aa565b60006040518083038185875af1925050503d8060008114610519576040519150601f19603f3d011682016040523d82523d6000602084013e61051e565b606091505b509150915061052e828286610539565b979650505050505050565b6060831561054857508161040a565b8251156105585782518084602001fd5b8160405162461bcd60e51b815260040161017591906105c6565b600060208284031215610583578081fd5b8151801515811461040a578182fd5b6000602082840312156105a3578081fd5b5051919050565b600082516105bc8184602087016105f9565b9190910192915050565b60006020825282518060208401526105e58160408501602087016105f9565b601f01601f19169190910160400192915050565b60005b838110156106145781810151838201526020016105fc565b83811115610623576000848401525b5050505056fea2646970667358221220a696bd4fbc0c665d610e6795ee54246e0b323242a27ba1351ea2095433e92cba64736f6c63430008030033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806338af3eed1461005157806386d1a69f14610090578063b91d40011461009a578063fc0c546a146100c8575b600080fd5b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020015b60405180910390f35b6100986100ee565b005b6040517f00000000000000000000000000000000000000000000000000000000000000008152602001610087565b7f0000000000000000000000000000000000000000000000000000000000000000610073565b7f000000000000000000000000000000000000000000000000000000000000000042101561017e5760405162461bcd60e51b815260206004820152603260248201527f546f6b656e54696d656c6f636b3a2063757272656e742074696d65206973206260448201527165666f72652072656c656173652074696d6560701b60648201526084015b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a082319060240160206040518083038186803b1580156101e257600080fd5b505afa1580156101f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061021a9190610592565b9050600081116102785760405162461bcd60e51b815260206004820152602360248201527f546f6b656e54696d656c6f636b3a206e6f20746f6b656e7320746f2072656c6560448201526261736560e81b6064820152608401610175565b6102cc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000836102cf565b50565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610321908490610326565b505050565b600061037b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166103f89092919063ffffffff16565b80519091501561032157808060200190518101906103999190610572565b6103215760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610175565b60606104078484600085610411565b90505b9392505050565b6060824710156104725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610175565b843b6104c05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610175565b600080866001600160a01b031685876040516104dc91906105aa565b60006040518083038185875af1925050503d8060008114610519576040519150601f19603f3d011682016040523d82523d6000602084013e61051e565b606091505b509150915061052e828286610539565b979650505050505050565b6060831561054857508161040a565b8251156105585782518084602001fd5b8160405162461bcd60e51b815260040161017591906105c6565b600060208284031215610583578081fd5b8151801515811461040a578182fd5b6000602082840312156105a3578081fd5b5051919050565b600082516105bc8184602087016105f9565b9190910192915050565b60006020825282518060208401526105e58160408501602087016105f9565b601f01601f19169190910160400192915050565b60005b838110156106145781810151838201526020016105fc565b83811115610623576000848401525b5050505056fea2646970667358221220a696bd4fbc0c665d610e6795ee54246e0b323242a27ba1351ea2095433e92cba64736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/TransparentUpgradeableProxy.json b/node_modules/@openzeppelin/contracts/build/contracts/TransparentUpgradeableProxy.json
new file mode 100644
index 0000000..93a04b5
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/TransparentUpgradeableProxy.json
@@ -0,0 +1,155 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "TransparentUpgradeableProxy",
+ "sourceName": "contracts/proxy/transparent/TransparentUpgradeableProxy.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_logic",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "admin_",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "previousAdmin",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "newAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "AdminChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "beacon",
+ "type": "address"
+ }
+ ],
+ "name": "BeaconUpgraded",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "implementation",
+ "type": "address"
+ }
+ ],
+ "name": "Upgraded",
+ "type": "event"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "fallback"
+ },
+ {
+ "inputs": [],
+ "name": "admin",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "admin_",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "changeAdmin",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "implementation",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "implementation_",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newImplementation",
+ "type": "address"
+ }
+ ],
+ "name": "upgradeTo",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newImplementation",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "upgradeToAndCall",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "receive"
+ }
+ ],
+ "bytecode": "0x608060405260405162000f5a38038062000f5a8339810160408190526200002691620004e2565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd62000611565b60008051602062000f13833981519152146200008157634e487b7160e01b600052600160045260246000fd5b6200008f82826000620000ff565b50620000bf905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610462000611565b60008051602062000ef383398151915214620000eb57634e487b7160e01b600052600160045260246000fd5b620000f6826200013c565b5050506200067a565b6200010a8362000197565b600082511180620001185750805b156200013757620001358383620001d960201b6200026c1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200016762000208565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001948162000241565b50565b620001a281620002f6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606062000201838360405180606001604052806027815260200162000f336027913962000399565b9392505050565b60006200023260008051602062000ef383398151915260001b6200047f60201b620002141760201c565b546001600160a01b0316905090565b6001600160a01b038116620002ac5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002d560008051602062000ef383398151915260001b6200047f60201b620002141760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200030c816200048260201b620002981760201c565b620003705760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620002a3565b80620002d560008051602062000f1383398151915260001b6200047f60201b620002141760201c565b6060620003a68462000482565b620004035760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620002a3565b600080856001600160a01b031685604051620004209190620005be565b600060405180830381855af49150503d80600081146200045d576040519150601f19603f3d011682016040523d82523d6000602084013e62000462565b606091505b509092509050620004758282866200048c565b9695505050505050565b90565b803b15155b919050565b606083156200049d57508162000201565b825115620004ae5782518084602001fd5b8160405162461bcd60e51b8152600401620002a39190620005dc565b80516001600160a01b03811681146200048757600080fd5b600080600060608486031215620004f7578283fd5b6200050284620004ca565b92506200051260208501620004ca565b60408501519092506001600160401b03808211156200052f578283fd5b818601915086601f83011262000543578283fd5b81518181111562000558576200055862000664565b604051601f8201601f19908116603f0116810190838211818310171562000583576200058362000664565b816040528281528960208487010111156200059c578586fd5b620005af83602083016020880162000635565b80955050505050509250925092565b60008251620005d281846020870162000635565b9190910192915050565b6000602082528251806020840152620005fd81604085016020870162000635565b601f01601f19169190910160400192915050565b6000828210156200063057634e487b7160e01b81526011600452602481fd5b500390565b60005b838110156200065257818101518382015260200162000638565b83811115620001355750506000910152565b634e487b7160e01b600052604160045260246000fd5b610869806200068a6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f9565b610118565b61005b610093366004610713565b610164565b3480156100a457600080fd5b506100ad6101da565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f9565b610217565b3480156100f557600080fd5b506100ad610241565b6101066102a2565b610116610111610346565b610355565b565b610120610379565b6001600160a01b0316336001600160a01b0316141561015957610154816040518060200160405280600081525060006103ac565b610161565b6101616100fe565b50565b61016c610379565b6001600160a01b0316336001600160a01b031614156101cd576101c88383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506103ac915050565b6101d5565b6101d56100fe565b505050565b60006101e4610379565b6001600160a01b0316336001600160a01b0316141561020c57610205610346565b9050610214565b6102146100fe565b90565b61021f610379565b6001600160a01b0316336001600160a01b0316141561015957610154816103d7565b600061024b610379565b6001600160a01b0316336001600160a01b0316141561020c57610205610379565b6060610291838360405180606001604052806027815260200161080d6027913961042b565b9392505050565b803b15155b919050565b6102aa610379565b6001600160a01b0316336001600160a01b031614156103415760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b610116565b6000610350610506565b905090565b3660008037600080366000845af43d6000803e808015610374573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316905090565b6103b58361052e565b6000825111806103c25750805b156101d5576103d1838361026c565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610400610379565b604080516001600160a01b03928316815291841660208301520160405180910390a16101618161056e565b606061043684610298565b6104915760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610338565b600080856001600160a01b0316856040516104ac9190610791565b600060405180830381855af49150503d80600081146104e7576040519150601f19603f3d011682016040523d82523d6000602084013e6104ec565b606091505b50915091506104fc828286610617565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61039d565b61053781610650565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105d35760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610338565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610626575081610291565b8251156106365782518084602001fd5b8160405162461bcd60e51b815260040161033891906107ad565b61065981610298565b6106bb5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610338565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105f6565b80356001600160a01b038116811461029d57600080fd5b60006020828403121561070a578081fd5b610291826106e2565b600080600060408486031215610727578182fd5b610730846106e2565b9250602084013567ffffffffffffffff8082111561074c578384fd5b818601915086601f83011261075f578384fd5b81358181111561076d578485fd5b87602082850101111561077e578485fd5b6020830194508093505050509250925092565b600082516107a38184602087016107e0565b9190910192915050565b60006020825282518060208401526107cc8160408501602087016107e0565b601f01601f19169190910160400192915050565b60005b838110156107fb5781810151838201526020016107e3565b838111156103d1575050600091015256fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ddc0838f0b211b6b7e8eccfec1e8a5a9dd7934cff71defb09a0bae61e9135fe164736f6c63430008030033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564",
+ "deployedBytecode": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f9565b610118565b61005b610093366004610713565b610164565b3480156100a457600080fd5b506100ad6101da565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f9565b610217565b3480156100f557600080fd5b506100ad610241565b6101066102a2565b610116610111610346565b610355565b565b610120610379565b6001600160a01b0316336001600160a01b0316141561015957610154816040518060200160405280600081525060006103ac565b610161565b6101616100fe565b50565b61016c610379565b6001600160a01b0316336001600160a01b031614156101cd576101c88383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506103ac915050565b6101d5565b6101d56100fe565b505050565b60006101e4610379565b6001600160a01b0316336001600160a01b0316141561020c57610205610346565b9050610214565b6102146100fe565b90565b61021f610379565b6001600160a01b0316336001600160a01b0316141561015957610154816103d7565b600061024b610379565b6001600160a01b0316336001600160a01b0316141561020c57610205610379565b6060610291838360405180606001604052806027815260200161080d6027913961042b565b9392505050565b803b15155b919050565b6102aa610379565b6001600160a01b0316336001600160a01b031614156103415760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b610116565b6000610350610506565b905090565b3660008037600080366000845af43d6000803e808015610374573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316905090565b6103b58361052e565b6000825111806103c25750805b156101d5576103d1838361026c565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610400610379565b604080516001600160a01b03928316815291841660208301520160405180910390a16101618161056e565b606061043684610298565b6104915760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610338565b600080856001600160a01b0316856040516104ac9190610791565b600060405180830381855af49150503d80600081146104e7576040519150601f19603f3d011682016040523d82523d6000602084013e6104ec565b606091505b50915091506104fc828286610617565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61039d565b61053781610650565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105d35760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610338565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610626575081610291565b8251156106365782518084602001fd5b8160405162461bcd60e51b815260040161033891906107ad565b61065981610298565b6106bb5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610338565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105f6565b80356001600160a01b038116811461029d57600080fd5b60006020828403121561070a578081fd5b610291826106e2565b600080600060408486031215610727578182fd5b610730846106e2565b9250602084013567ffffffffffffffff8082111561074c578384fd5b818601915086601f83011261075f578384fd5b81358181111561076d578485fd5b87602082850101111561077e578485fd5b6020830194508093505050509250925092565b600082516107a38184602087016107e0565b9190910192915050565b60006020825282518060208401526107cc8160408501602087016107e0565b601f01601f19169190910160400192915050565b60005b838110156107fb5781810151838201526020016107e3565b838111156103d1575050600091015256fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ddc0838f0b211b6b7e8eccfec1e8a5a9dd7934cff71defb09a0bae61e9135fe164736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/UUPSUpgradeable.json b/node_modules/@openzeppelin/contracts/build/contracts/UUPSUpgradeable.json
new file mode 100644
index 0000000..7e4298f
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/UUPSUpgradeable.json
@@ -0,0 +1,87 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "UUPSUpgradeable",
+ "sourceName": "contracts/proxy/utils/UUPSUpgradeable.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "previousAdmin",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "newAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "AdminChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "beacon",
+ "type": "address"
+ }
+ ],
+ "name": "BeaconUpgraded",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "implementation",
+ "type": "address"
+ }
+ ],
+ "name": "Upgraded",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newImplementation",
+ "type": "address"
+ }
+ ],
+ "name": "upgradeTo",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newImplementation",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "upgradeToAndCall",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/build/contracts/UpgradeableBeacon.json b/node_modules/@openzeppelin/contracts/build/contracts/UpgradeableBeacon.json
new file mode 100644
index 0000000..22e6878
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/build/contracts/UpgradeableBeacon.json
@@ -0,0 +1,113 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "UpgradeableBeacon",
+ "sourceName": "contracts/proxy/beacon/UpgradeableBeacon.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "implementation_",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "previousOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "OwnershipTransferred",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "implementation",
+ "type": "address"
+ }
+ ],
+ "name": "Upgraded",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "implementation",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "renounceOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newImplementation",
+ "type": "address"
+ }
+ ],
+ "name": "upgradeTo",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x608060405234801561001057600080fd5b5060405161050a38038061050a83398101604081905261002f91610148565b61003833610047565b61004181610097565b50610176565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6100aa8161014260201b61020a1760201c565b6101205760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b600060208284031215610159578081fd5b81516001600160a01b038116811461016f578182fd5b9392505050565b610385806101856000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a3660046102ec565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f610139565b6000546001600160a01b031661007e565b61006f6100c13660046102ec565b61016f565b6000546001600160a01b031633146100f95760405162461bcd60e51b81526004016100f09061031a565b60405180910390fd5b61010281610210565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000546001600160a01b031633146101635760405162461bcd60e51b81526004016100f09061031a565b61016d600061029c565b565b6000546001600160a01b031633146101995760405162461bcd60e51b81526004016100f09061031a565b6001600160a01b0381166101fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100f0565b6102078161029c565b50565b3b151590565b803b61027a5760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b60648201526084016100f0565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156102fd578081fd5b81356001600160a01b0381168114610313578182fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526060019056fea2646970667358221220f45bbe0d068c96fcc0c4e81cd5b0324b02af392f0e4eb101c8be8a0bc2b35bbf64736f6c63430008030033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a3660046102ec565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f610139565b6000546001600160a01b031661007e565b61006f6100c13660046102ec565b61016f565b6000546001600160a01b031633146100f95760405162461bcd60e51b81526004016100f09061031a565b60405180910390fd5b61010281610210565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000546001600160a01b031633146101635760405162461bcd60e51b81526004016100f09061031a565b61016d600061029c565b565b6000546001600160a01b031633146101995760405162461bcd60e51b81526004016100f09061031a565b6001600160a01b0381166101fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100f0565b6102078161029c565b50565b3b151590565b803b61027a5760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b60648201526084016100f0565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156102fd578081fd5b81356001600160a01b0381168114610313578182fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526060019056fea2646970667358221220f45bbe0d068c96fcc0c4e81cd5b0324b02af392f0e4eb101c8be8a0bc2b35bbf64736f6c63430008030033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/node_modules/@openzeppelin/contracts/finance/PaymentSplitter.sol b/node_modules/@openzeppelin/contracts/finance/PaymentSplitter.sol
new file mode 100644
index 0000000..ffa79a3
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/finance/PaymentSplitter.sol
@@ -0,0 +1,132 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../utils/Address.sol";
+import "../utils/Context.sol";
+import "../utils/math/SafeMath.sol";
+
+/**
+ * @title PaymentSplitter
+ * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware
+ * that the Ether will be split in this way, since it is handled transparently by the contract.
+ *
+ * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each
+ * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim
+ * an amount proportional to the percentage of total shares they were assigned.
+ *
+ * `PaymentSplitter` follows a _pull payment_ model. This means that payments are not automatically forwarded to the
+ * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release}
+ * function.
+ */
+contract PaymentSplitter is Context {
+ event PayeeAdded(address account, uint256 shares);
+ event PaymentReleased(address to, uint256 amount);
+ event PaymentReceived(address from, uint256 amount);
+
+ uint256 private _totalShares;
+ uint256 private _totalReleased;
+
+ mapping(address => uint256) private _shares;
+ mapping(address => uint256) private _released;
+ address[] private _payees;
+
+ /**
+ * @dev Creates an instance of `PaymentSplitter` where each account in `payees` is assigned the number of shares at
+ * the matching position in the `shares` array.
+ *
+ * All addresses in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no
+ * duplicates in `payees`.
+ */
+ constructor(address[] memory payees, uint256[] memory shares_) payable {
+ require(payees.length == shares_.length, "PaymentSplitter: payees and shares length mismatch");
+ require(payees.length > 0, "PaymentSplitter: no payees");
+
+ for (uint256 i = 0; i < payees.length; i++) {
+ _addPayee(payees[i], shares_[i]);
+ }
+ }
+
+ /**
+ * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully
+ * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the
+ * reliability of the events, and not the actual splitting of Ether.
+ *
+ * To learn more about this see the Solidity documentation for
+ * https://solidity.readthedocs.io/en/latest/contracts.html#fallback-function[fallback
+ * functions].
+ */
+ receive() external payable virtual {
+ emit PaymentReceived(_msgSender(), msg.value);
+ }
+
+ /**
+ * @dev Getter for the total shares held by payees.
+ */
+ function totalShares() public view returns (uint256) {
+ return _totalShares;
+ }
+
+ /**
+ * @dev Getter for the total amount of Ether already released.
+ */
+ function totalReleased() public view returns (uint256) {
+ return _totalReleased;
+ }
+
+ /**
+ * @dev Getter for the amount of shares held by an account.
+ */
+ function shares(address account) public view returns (uint256) {
+ return _shares[account];
+ }
+
+ /**
+ * @dev Getter for the amount of Ether already released to a payee.
+ */
+ function released(address account) public view returns (uint256) {
+ return _released[account];
+ }
+
+ /**
+ * @dev Getter for the address of the payee number `index`.
+ */
+ function payee(uint256 index) public view returns (address) {
+ return _payees[index];
+ }
+
+ /**
+ * @dev Triggers a transfer to `account` of the amount of Ether they are owed, according to their percentage of the
+ * total shares and their previous withdrawals.
+ */
+ function release(address payable account) public virtual {
+ require(_shares[account] > 0, "PaymentSplitter: account has no shares");
+
+ uint256 totalReceived = address(this).balance + _totalReleased;
+ uint256 payment = (totalReceived * _shares[account]) / _totalShares - _released[account];
+
+ require(payment != 0, "PaymentSplitter: account is not due payment");
+
+ _released[account] = _released[account] + payment;
+ _totalReleased = _totalReleased + payment;
+
+ Address.sendValue(account, payment);
+ emit PaymentReleased(account, payment);
+ }
+
+ /**
+ * @dev Add a new payee to the contract.
+ * @param account The address of the payee to add.
+ * @param shares_ The number of shares owned by the payee.
+ */
+ function _addPayee(address account, uint256 shares_) private {
+ require(account != address(0), "PaymentSplitter: account is the zero address");
+ require(shares_ > 0, "PaymentSplitter: shares are 0");
+ require(_shares[account] == 0, "PaymentSplitter: account already has shares");
+
+ _payees.push(account);
+ _shares[account] = shares_;
+ _totalShares = _totalShares + shares_;
+ emit PayeeAdded(account, shares_);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/governance/Governor.sol b/node_modules/@openzeppelin/contracts/governance/Governor.sol
new file mode 100644
index 0000000..1dfd0da
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/governance/Governor.sol
@@ -0,0 +1,337 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../utils/cryptography/ECDSA.sol";
+import "../utils/cryptography/draft-EIP712.sol";
+import "../utils/introspection/ERC165.sol";
+import "../utils/math/SafeCast.sol";
+import "../utils/Address.sol";
+import "../utils/Context.sol";
+import "../utils/Timers.sol";
+import "./IGovernor.sol";
+
+/**
+ * @dev Core of the governance system, designed to be extended though various modules.
+ *
+ * This contract is abstract and requires several function to be implemented in various modules:
+ *
+ * - A counting module must implement {quorum}, {_quorumReached}, {_voteSucceeded} and {_countVote}
+ * - A voting module must implement {getVotes}
+ * - Additionanly, the {votingPeriod} must also be implemented
+ *
+ * _Available since v4.3._
+ */
+abstract contract Governor is Context, ERC165, EIP712, IGovernor {
+ using SafeCast for uint256;
+ using Timers for Timers.BlockNumber;
+
+ bytes32 public constant BALLOT_TYPEHASH = keccak256("Ballot(uint256 proposalId,uint8 support)");
+
+ struct ProposalCore {
+ Timers.BlockNumber voteStart;
+ Timers.BlockNumber voteEnd;
+ bool executed;
+ bool canceled;
+ }
+
+ string private _name;
+
+ mapping(uint256 => ProposalCore) private _proposals;
+
+ /**
+ * @dev Restrict access to governor executing address. Some module might override the _executor function to make
+ * sure this modifier is consistant with the execution model.
+ */
+ modifier onlyGovernance() {
+ require(_msgSender() == _executor(), "Governor: onlyGovernance");
+ _;
+ }
+
+ /**
+ * @dev Sets the value for {name} and {version}
+ */
+ constructor(string memory name_) EIP712(name_, version()) {
+ _name = name_;
+ }
+
+ /**
+ * @dev See {IERC165-supportsInterface}.
+ */
+ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) {
+ return interfaceId == type(IGovernor).interfaceId || super.supportsInterface(interfaceId);
+ }
+
+ /**
+ * @dev See {IGovernor-name}.
+ */
+ function name() public view virtual override returns (string memory) {
+ return _name;
+ }
+
+ /**
+ * @dev See {IGovernor-version}.
+ */
+ function version() public view virtual override returns (string memory) {
+ return "1";
+ }
+
+ /**
+ * @dev See {IGovernor-hashProposal}.
+ *
+ * The proposal id is produced by hashing the RLC encoded `targets` array, the `values` array, the `calldatas` array
+ * and the descriptionHash (bytes32 which itself is the keccak256 hash of the description string). This proposal id
+ * can be produced from the proposal data which is part of the {ProposalCreated} event. It can even be computed in
+ * advance, before the proposal is submitted.
+ *
+ * Note that the chainId and the governor address are not part of the proposal id computation. Consequently, the
+ * same proposal (with same operation and same description) will have the same id if submitted on multiple governors
+ * accross multiple networks. This also means that in order to execute the same operation twice (on the same
+ * governor) the proposer will have to change the description in order to avoid proposal id conflicts.
+ */
+ function hashProposal(
+ address[] memory targets,
+ uint256[] memory values,
+ bytes[] memory calldatas,
+ bytes32 descriptionHash
+ ) public pure virtual override returns (uint256) {
+ return uint256(keccak256(abi.encode(targets, values, calldatas, descriptionHash)));
+ }
+
+ /**
+ * @dev See {IGovernor-state}.
+ */
+ function state(uint256 proposalId) public view virtual override returns (ProposalState) {
+ ProposalCore memory proposal = _proposals[proposalId];
+
+ if (proposal.executed) {
+ return ProposalState.Executed;
+ } else if (proposal.canceled) {
+ return ProposalState.Canceled;
+ } else if (proposal.voteStart.isPending()) {
+ return ProposalState.Pending;
+ } else if (proposal.voteEnd.isPending()) {
+ return ProposalState.Active;
+ } else if (proposal.voteEnd.isExpired()) {
+ return
+ _quorumReached(proposalId) && _voteSucceeded(proposalId)
+ ? ProposalState.Succeeded
+ : ProposalState.Defeated;
+ } else {
+ revert("Governor: unknown proposal id");
+ }
+ }
+
+ /**
+ * @dev See {IGovernor-proposalSnapshot}.
+ */
+ function proposalSnapshot(uint256 proposalId) public view virtual override returns (uint256) {
+ return _proposals[proposalId].voteStart.getDeadline();
+ }
+
+ /**
+ * @dev See {IGovernor-proposalDeadline}.
+ */
+ function proposalDeadline(uint256 proposalId) public view virtual override returns (uint256) {
+ return _proposals[proposalId].voteEnd.getDeadline();
+ }
+
+ /**
+ * @dev Amount of votes already cast passes the threshold limit.
+ */
+ function _quorumReached(uint256 proposalId) internal view virtual returns (bool);
+
+ /**
+ * @dev Is the proposal successful or not.
+ */
+ function _voteSucceeded(uint256 proposalId) internal view virtual returns (bool);
+
+ /**
+ * @dev Register a vote with a given support and voting weight.
+ *
+ * Note: Support is generic and can represent various things depending on the voting system used.
+ */
+ function _countVote(
+ uint256 proposalId,
+ address account,
+ uint8 support,
+ uint256 weight
+ ) internal virtual;
+
+ /**
+ * @dev See {IGovernor-propose}.
+ */
+ function propose(
+ address[] memory targets,
+ uint256[] memory values,
+ bytes[] memory calldatas,
+ string memory description
+ ) public virtual override returns (uint256) {
+ uint256 proposalId = hashProposal(targets, values, calldatas, keccak256(bytes(description)));
+
+ require(targets.length == values.length, "Governor: invalid proposal length");
+ require(targets.length == calldatas.length, "Governor: invalid proposal length");
+ require(targets.length > 0, "Governor: empty proposal");
+
+ ProposalCore storage proposal = _proposals[proposalId];
+ require(proposal.voteStart.isUnset(), "Governor: proposal already exists");
+
+ uint64 snapshot = block.number.toUint64() + votingDelay().toUint64();
+ uint64 deadline = snapshot + votingPeriod().toUint64();
+
+ proposal.voteStart.setDeadline(snapshot);
+ proposal.voteEnd.setDeadline(deadline);
+
+ emit ProposalCreated(
+ proposalId,
+ _msgSender(),
+ targets,
+ values,
+ new string[](targets.length),
+ calldatas,
+ snapshot,
+ deadline,
+ description
+ );
+
+ return proposalId;
+ }
+
+ /**
+ * @dev See {IGovernor-execute}.
+ */
+ function execute(
+ address[] memory targets,
+ uint256[] memory values,
+ bytes[] memory calldatas,
+ bytes32 descriptionHash
+ ) public payable virtual override returns (uint256) {
+ uint256 proposalId = hashProposal(targets, values, calldatas, descriptionHash);
+
+ ProposalState status = state(proposalId);
+ require(
+ status == ProposalState.Succeeded || status == ProposalState.Queued,
+ "Governor: proposal not successful"
+ );
+ _proposals[proposalId].executed = true;
+
+ emit ProposalExecuted(proposalId);
+
+ _execute(proposalId, targets, values, calldatas, descriptionHash);
+
+ return proposalId;
+ }
+
+ /**
+ * @dev Internal execution mechanism. Can be overriden to implement different execution mechanism
+ */
+ function _execute(
+ uint256, /* proposalId */
+ address[] memory targets,
+ uint256[] memory values,
+ bytes[] memory calldatas,
+ bytes32 /*descriptionHash*/
+ ) internal virtual {
+ string memory errorMessage = "Governor: call reverted without message";
+ for (uint256 i = 0; i < targets.length; ++i) {
+ (bool success, bytes memory returndata) = targets[i].call{value: values[i]}(calldatas[i]);
+ Address.verifyCallResult(success, returndata, errorMessage);
+ }
+ }
+
+ /**
+ * @dev Internal cancel mechanism: locks up the proposal timer, preventing it from being re-submitted. Marks it as
+ * canceled to allow distinguishing it from executed proposals.
+ *
+ * Emits a {IGovernor-ProposalCanceled} event.
+ */
+ function _cancel(
+ address[] memory targets,
+ uint256[] memory values,
+ bytes[] memory calldatas,
+ bytes32 descriptionHash
+ ) internal virtual returns (uint256) {
+ uint256 proposalId = hashProposal(targets, values, calldatas, descriptionHash);
+ ProposalState status = state(proposalId);
+
+ require(
+ status != ProposalState.Canceled && status != ProposalState.Expired && status != ProposalState.Executed,
+ "Governor: proposal not active"
+ );
+ _proposals[proposalId].canceled = true;
+
+ emit ProposalCanceled(proposalId);
+
+ return proposalId;
+ }
+
+ /**
+ * @dev See {IGovernor-castVote}.
+ */
+ function castVote(uint256 proposalId, uint8 support) public virtual override returns (uint256) {
+ address voter = _msgSender();
+ return _castVote(proposalId, voter, support, "");
+ }
+
+ /**
+ * @dev See {IGovernor-castVoteWithReason}.
+ */
+ function castVoteWithReason(
+ uint256 proposalId,
+ uint8 support,
+ string calldata reason
+ ) public virtual override returns (uint256) {
+ address voter = _msgSender();
+ return _castVote(proposalId, voter, support, reason);
+ }
+
+ /**
+ * @dev See {IGovernor-castVoteBySig}.
+ */
+ function castVoteBySig(
+ uint256 proposalId,
+ uint8 support,
+ uint8 v,
+ bytes32 r,
+ bytes32 s
+ ) public virtual override returns (uint256) {
+ address voter = ECDSA.recover(
+ _hashTypedDataV4(keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support))),
+ v,
+ r,
+ s
+ );
+ return _castVote(proposalId, voter, support, "");
+ }
+
+ /**
+ * @dev Internal vote casting mechanism: Check that the vote is pending, that it has not been cast yet, retrieve
+ * voting weight using {IGovernor-getVotes} and call the {_countVote} internal function.
+ *
+ * Emits a {IGovernor-VoteCast} event.
+ */
+ function _castVote(
+ uint256 proposalId,
+ address account,
+ uint8 support,
+ string memory reason
+ ) internal virtual returns (uint256) {
+ ProposalCore storage proposal = _proposals[proposalId];
+ require(state(proposalId) == ProposalState.Active, "Governor: vote not currently active");
+
+ uint256 weight = getVotes(account, proposal.voteStart.getDeadline());
+ _countVote(proposalId, account, support, weight);
+
+ emit VoteCast(account, proposalId, support, weight, reason);
+
+ return weight;
+ }
+
+ /**
+ * @dev Address through which the governor executes action. Will be overloaded by module that execute actions
+ * through another contract such as a timelock.
+ */
+ function _executor() internal view virtual returns (address) {
+ return address(this);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/governance/IGovernor.sol b/node_modules/@openzeppelin/contracts/governance/IGovernor.sol
new file mode 100644
index 0000000..ee5180d
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/governance/IGovernor.sol
@@ -0,0 +1,214 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../utils/introspection/ERC165.sol";
+
+/**
+ * @dev Interface of the {Governor} core.
+ *
+ * _Available since v4.3._
+ */
+abstract contract IGovernor is IERC165 {
+ enum ProposalState {
+ Pending,
+ Active,
+ Canceled,
+ Defeated,
+ Succeeded,
+ Queued,
+ Expired,
+ Executed
+ }
+
+ /**
+ * @dev Emitted when a proposal is created.
+ */
+ event ProposalCreated(
+ uint256 proposalId,
+ address proposer,
+ address[] targets,
+ uint256[] values,
+ string[] signatures,
+ bytes[] calldatas,
+ uint256 startBlock,
+ uint256 endBlock,
+ string description
+ );
+
+ /**
+ * @dev Emitted when a proposal is canceled.
+ */
+ event ProposalCanceled(uint256 proposalId);
+
+ /**
+ * @dev Emitted when a proposal is executed.
+ */
+ event ProposalExecuted(uint256 proposalId);
+
+ /**
+ * @dev Emitted when a vote is cast.
+ *
+ * Note: `support` values should be seen as buckets. There interpretation depends on the voting module used.
+ */
+ event VoteCast(address indexed voter, uint256 proposalId, uint8 support, uint256 weight, string reason);
+
+ /**
+ * @notice module:core
+ * @dev Name of the governor instance (used in building the ERC712 domain separator).
+ */
+ function name() public view virtual returns (string memory);
+
+ /**
+ * @notice module:core
+ * @dev Version of the governor instance (used in building the ERC712 domain separator). Default: "1"
+ */
+ function version() public view virtual returns (string memory);
+
+ /**
+ * @notice module:voting
+ * @dev A description of the possible `support` values for {castVote} and the way these votes are counted, meant to
+ * be consumed by UIs to show correct vote options and interpret the results. The string is a URL-encoded sequence of
+ * key-value pairs that each describe one aspect, for example `support=bravo&quorum=for,abstain`.
+ *
+ * There are 2 standard keys: `support` and `quorum`.
+ *
+ * - `support=bravo` refers to the vote options 0 = For, 1 = Against, 2 = Abstain, as in `GovernorBravo`.
+ * - `quorum=bravo` means that only For votes are counted towards quorum.
+ * - `quorum=for,abstain` means that both For and Abstain votes are counted towards quorum.
+ *
+ * NOTE: The string can be decoded by the standard
+ * https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams[`URLSearchParams`]
+ * JavaScript class.
+ */
+ // solhint-disable-next-line func-name-mixedcase
+ function COUNTING_MODE() public pure virtual returns (string memory);
+
+ /**
+ * @notice module:core
+ * @dev Hashing function used to (re)build the proposal id from the proposal details..
+ */
+ function hashProposal(
+ address[] calldata targets,
+ uint256[] calldata values,
+ bytes[] calldata calldatas,
+ bytes32 descriptionHash
+ ) public pure virtual returns (uint256);
+
+ /**
+ * @notice module:core
+ * @dev Current state of a proposal, following Compound's convention
+ */
+ function state(uint256 proposalId) public view virtual returns (ProposalState);
+
+ /**
+ * @notice module:core
+ * @dev block number used to retrieve user's votes and quorum.
+ */
+ function proposalSnapshot(uint256 proposalId) public view virtual returns (uint256);
+
+ /**
+ * @notice module:core
+ * @dev timestamp at which votes close.
+ */
+ function proposalDeadline(uint256 proposalId) public view virtual returns (uint256);
+
+ /**
+ * @notice module:user-config
+ * @dev delay, in number of block, between the proposal is created and the vote starts. This can be increassed to
+ * leave time for users to buy voting power, of delegate it, before the voting of a proposal starts.
+ */
+ function votingDelay() public view virtual returns (uint256);
+
+ /**
+ * @notice module:user-config
+ * @dev delay, in number of blocks, between the vote start and vote ends.
+ *
+ * Note: the {votingDelay} can delay the start of the vote. This must be considered when setting the voting
+ * duration compared to the voting delay.
+ */
+ function votingPeriod() public view virtual returns (uint256);
+
+ /**
+ * @notice module:user-config
+ * @dev Minimum number of cast voted required for a proposal to be successful.
+ *
+ * Note: The `blockNumber` parameter corresponds to the snaphot used for counting vote. This allows to scale the
+ * quroum depending on values such as the totalSupply of a token at this block (see {ERC20Votes}).
+ */
+ function quorum(uint256 blockNumber) public view virtual returns (uint256);
+
+ /**
+ * @notice module:reputation
+ * @dev Voting power of an `account` at a specific `blockNumber`.
+ *
+ * Note: this can be implemented in a number of ways, for example by reading the delegated balance from one (or
+ * multiple), {ERC20Votes} tokens.
+ */
+ function getVotes(address account, uint256 blockNumber) public view virtual returns (uint256);
+
+ /**
+ * @notice module:voting
+ * @dev Returns weither `account` has cast a vote on `proposalId`.
+ */
+ function hasVoted(uint256 proposalId, address account) public view virtual returns (bool);
+
+ /**
+ * @dev Create a new proposal. Vote start {IGovernor-votingDelay} blocks after the proposal is created and ends
+ * {IGovernor-votingPeriod} blocks after the voting starts.
+ *
+ * Emits a {ProposalCreated} event.
+ */
+ function propose(
+ address[] memory targets,
+ uint256[] memory values,
+ bytes[] memory calldatas,
+ string memory description
+ ) public virtual returns (uint256 proposalId);
+
+ /**
+ * @dev Execute a successful proposal. This requires the quorum to be reached, the vote to be successful, and the
+ * deadline to be reached.
+ *
+ * Emits a {ProposalExecuted} event.
+ *
+ * Note: some module can modify the requirements for execution, for example by adding an additional timelock.
+ */
+ function execute(
+ address[] memory targets,
+ uint256[] memory values,
+ bytes[] memory calldatas,
+ bytes32 descriptionHash
+ ) public payable virtual returns (uint256 proposalId);
+
+ /**
+ * @dev Cast a vote
+ *
+ * Emits a {VoteCast} event.
+ */
+ function castVote(uint256 proposalId, uint8 support) public virtual returns (uint256 balance);
+
+ /**
+ * @dev Cast a with a reason
+ *
+ * Emits a {VoteCast} event.
+ */
+ function castVoteWithReason(
+ uint256 proposalId,
+ uint8 support,
+ string calldata reason
+ ) public virtual returns (uint256 balance);
+
+ /**
+ * @dev Cast a vote using the user cryptographic signature.
+ *
+ * Emits a {VoteCast} event.
+ */
+ function castVoteBySig(
+ uint256 proposalId,
+ uint8 support,
+ uint8 v,
+ bytes32 r,
+ bytes32 s
+ ) public virtual returns (uint256 balance);
+}
diff --git a/node_modules/@openzeppelin/contracts/governance/TimelockController.sol b/node_modules/@openzeppelin/contracts/governance/TimelockController.sol
new file mode 100644
index 0000000..e52cb0d
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/governance/TimelockController.sol
@@ -0,0 +1,352 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../access/AccessControl.sol";
+
+/**
+ * @dev Contract module which acts as a timelocked controller. When set as the
+ * owner of an `Ownable` smart contract, it enforces a timelock on all
+ * `onlyOwner` maintenance operations. This gives time for users of the
+ * controlled contract to exit before a potentially dangerous maintenance
+ * operation is applied.
+ *
+ * By default, this contract is self administered, meaning administration tasks
+ * have to go through the timelock process. The proposer (resp executor) role
+ * is in charge of proposing (resp executing) operations. A common use case is
+ * to position this {TimelockController} as the owner of a smart contract, with
+ * a multisig or a DAO as the sole proposer.
+ *
+ * _Available since v3.3._
+ */
+contract TimelockController is AccessControl {
+ bytes32 public constant TIMELOCK_ADMIN_ROLE = keccak256("TIMELOCK_ADMIN_ROLE");
+ bytes32 public constant PROPOSER_ROLE = keccak256("PROPOSER_ROLE");
+ bytes32 public constant EXECUTOR_ROLE = keccak256("EXECUTOR_ROLE");
+ uint256 internal constant _DONE_TIMESTAMP = uint256(1);
+
+ mapping(bytes32 => uint256) private _timestamps;
+ uint256 private _minDelay;
+
+ /**
+ * @dev Emitted when a call is scheduled as part of operation `id`.
+ */
+ event CallScheduled(
+ bytes32 indexed id,
+ uint256 indexed index,
+ address target,
+ uint256 value,
+ bytes data,
+ bytes32 predecessor,
+ uint256 delay
+ );
+
+ /**
+ * @dev Emitted when a call is performed as part of operation `id`.
+ */
+ event CallExecuted(bytes32 indexed id, uint256 indexed index, address target, uint256 value, bytes data);
+
+ /**
+ * @dev Emitted when operation `id` is cancelled.
+ */
+ event Cancelled(bytes32 indexed id);
+
+ /**
+ * @dev Emitted when the minimum delay for future operations is modified.
+ */
+ event MinDelayChange(uint256 oldDuration, uint256 newDuration);
+
+ /**
+ * @dev Initializes the contract with a given `minDelay`.
+ */
+ constructor(
+ uint256 minDelay,
+ address[] memory proposers,
+ address[] memory executors
+ ) {
+ _setRoleAdmin(TIMELOCK_ADMIN_ROLE, TIMELOCK_ADMIN_ROLE);
+ _setRoleAdmin(PROPOSER_ROLE, TIMELOCK_ADMIN_ROLE);
+ _setRoleAdmin(EXECUTOR_ROLE, TIMELOCK_ADMIN_ROLE);
+
+ // deployer + self administration
+ _setupRole(TIMELOCK_ADMIN_ROLE, _msgSender());
+ _setupRole(TIMELOCK_ADMIN_ROLE, address(this));
+
+ // register proposers
+ for (uint256 i = 0; i < proposers.length; ++i) {
+ _setupRole(PROPOSER_ROLE, proposers[i]);
+ }
+
+ // register executors
+ for (uint256 i = 0; i < executors.length; ++i) {
+ _setupRole(EXECUTOR_ROLE, executors[i]);
+ }
+
+ _minDelay = minDelay;
+ emit MinDelayChange(0, minDelay);
+ }
+
+ /**
+ * @dev Modifier to make a function callable only by a certain role. In
+ * addition to checking the sender's role, `address(0)` 's role is also
+ * considered. Granting a role to `address(0)` is equivalent to enabling
+ * this role for everyone.
+ */
+ modifier onlyRoleOrOpenRole(bytes32 role) {
+ if (!hasRole(role, address(0))) {
+ _checkRole(role, _msgSender());
+ }
+ _;
+ }
+
+ /**
+ * @dev Contract might receive/hold ETH as part of the maintenance process.
+ */
+ receive() external payable {}
+
+ /**
+ * @dev Returns whether an id correspond to a registered operation. This
+ * includes both Pending, Ready and Done operations.
+ */
+ function isOperation(bytes32 id) public view virtual returns (bool pending) {
+ return getTimestamp(id) > 0;
+ }
+
+ /**
+ * @dev Returns whether an operation is pending or not.
+ */
+ function isOperationPending(bytes32 id) public view virtual returns (bool pending) {
+ return getTimestamp(id) > _DONE_TIMESTAMP;
+ }
+
+ /**
+ * @dev Returns whether an operation is ready or not.
+ */
+ function isOperationReady(bytes32 id) public view virtual returns (bool ready) {
+ uint256 timestamp = getTimestamp(id);
+ return timestamp > _DONE_TIMESTAMP && timestamp <= block.timestamp;
+ }
+
+ /**
+ * @dev Returns whether an operation is done or not.
+ */
+ function isOperationDone(bytes32 id) public view virtual returns (bool done) {
+ return getTimestamp(id) == _DONE_TIMESTAMP;
+ }
+
+ /**
+ * @dev Returns the timestamp at with an operation becomes ready (0 for
+ * unset operations, 1 for done operations).
+ */
+ function getTimestamp(bytes32 id) public view virtual returns (uint256 timestamp) {
+ return _timestamps[id];
+ }
+
+ /**
+ * @dev Returns the minimum delay for an operation to become valid.
+ *
+ * This value can be changed by executing an operation that calls `updateDelay`.
+ */
+ function getMinDelay() public view virtual returns (uint256 duration) {
+ return _minDelay;
+ }
+
+ /**
+ * @dev Returns the identifier of an operation containing a single
+ * transaction.
+ */
+ function hashOperation(
+ address target,
+ uint256 value,
+ bytes calldata data,
+ bytes32 predecessor,
+ bytes32 salt
+ ) public pure virtual returns (bytes32 hash) {
+ return keccak256(abi.encode(target, value, data, predecessor, salt));
+ }
+
+ /**
+ * @dev Returns the identifier of an operation containing a batch of
+ * transactions.
+ */
+ function hashOperationBatch(
+ address[] calldata targets,
+ uint256[] calldata values,
+ bytes[] calldata datas,
+ bytes32 predecessor,
+ bytes32 salt
+ ) public pure virtual returns (bytes32 hash) {
+ return keccak256(abi.encode(targets, values, datas, predecessor, salt));
+ }
+
+ /**
+ * @dev Schedule an operation containing a single transaction.
+ *
+ * Emits a {CallScheduled} event.
+ *
+ * Requirements:
+ *
+ * - the caller must have the 'proposer' role.
+ */
+ function schedule(
+ address target,
+ uint256 value,
+ bytes calldata data,
+ bytes32 predecessor,
+ bytes32 salt,
+ uint256 delay
+ ) public virtual onlyRole(PROPOSER_ROLE) {
+ bytes32 id = hashOperation(target, value, data, predecessor, salt);
+ _schedule(id, delay);
+ emit CallScheduled(id, 0, target, value, data, predecessor, delay);
+ }
+
+ /**
+ * @dev Schedule an operation containing a batch of transactions.
+ *
+ * Emits one {CallScheduled} event per transaction in the batch.
+ *
+ * Requirements:
+ *
+ * - the caller must have the 'proposer' role.
+ */
+ function scheduleBatch(
+ address[] calldata targets,
+ uint256[] calldata values,
+ bytes[] calldata datas,
+ bytes32 predecessor,
+ bytes32 salt,
+ uint256 delay
+ ) public virtual onlyRole(PROPOSER_ROLE) {
+ require(targets.length == values.length, "TimelockController: length mismatch");
+ require(targets.length == datas.length, "TimelockController: length mismatch");
+
+ bytes32 id = hashOperationBatch(targets, values, datas, predecessor, salt);
+ _schedule(id, delay);
+ for (uint256 i = 0; i < targets.length; ++i) {
+ emit CallScheduled(id, i, targets[i], values[i], datas[i], predecessor, delay);
+ }
+ }
+
+ /**
+ * @dev Schedule an operation that is to becomes valid after a given delay.
+ */
+ function _schedule(bytes32 id, uint256 delay) private {
+ require(!isOperation(id), "TimelockController: operation already scheduled");
+ require(delay >= getMinDelay(), "TimelockController: insufficient delay");
+ _timestamps[id] = block.timestamp + delay;
+ }
+
+ /**
+ * @dev Cancel an operation.
+ *
+ * Requirements:
+ *
+ * - the caller must have the 'proposer' role.
+ */
+ function cancel(bytes32 id) public virtual onlyRole(PROPOSER_ROLE) {
+ require(isOperationPending(id), "TimelockController: operation cannot be cancelled");
+ delete _timestamps[id];
+
+ emit Cancelled(id);
+ }
+
+ /**
+ * @dev Execute an (ready) operation containing a single transaction.
+ *
+ * Emits a {CallExecuted} event.
+ *
+ * Requirements:
+ *
+ * - the caller must have the 'executor' role.
+ */
+ function execute(
+ address target,
+ uint256 value,
+ bytes calldata data,
+ bytes32 predecessor,
+ bytes32 salt
+ ) public payable virtual onlyRoleOrOpenRole(EXECUTOR_ROLE) {
+ bytes32 id = hashOperation(target, value, data, predecessor, salt);
+ _beforeCall(id, predecessor);
+ _call(id, 0, target, value, data);
+ _afterCall(id);
+ }
+
+ /**
+ * @dev Execute an (ready) operation containing a batch of transactions.
+ *
+ * Emits one {CallExecuted} event per transaction in the batch.
+ *
+ * Requirements:
+ *
+ * - the caller must have the 'executor' role.
+ */
+ function executeBatch(
+ address[] calldata targets,
+ uint256[] calldata values,
+ bytes[] calldata datas,
+ bytes32 predecessor,
+ bytes32 salt
+ ) public payable virtual onlyRoleOrOpenRole(EXECUTOR_ROLE) {
+ require(targets.length == values.length, "TimelockController: length mismatch");
+ require(targets.length == datas.length, "TimelockController: length mismatch");
+
+ bytes32 id = hashOperationBatch(targets, values, datas, predecessor, salt);
+ _beforeCall(id, predecessor);
+ for (uint256 i = 0; i < targets.length; ++i) {
+ _call(id, i, targets[i], values[i], datas[i]);
+ }
+ _afterCall(id);
+ }
+
+ /**
+ * @dev Checks before execution of an operation's calls.
+ */
+ function _beforeCall(bytes32 id, bytes32 predecessor) private view {
+ require(isOperationReady(id), "TimelockController: operation is not ready");
+ require(predecessor == bytes32(0) || isOperationDone(predecessor), "TimelockController: missing dependency");
+ }
+
+ /**
+ * @dev Checks after execution of an operation's calls.
+ */
+ function _afterCall(bytes32 id) private {
+ require(isOperationReady(id), "TimelockController: operation is not ready");
+ _timestamps[id] = _DONE_TIMESTAMP;
+ }
+
+ /**
+ * @dev Execute an operation's call.
+ *
+ * Emits a {CallExecuted} event.
+ */
+ function _call(
+ bytes32 id,
+ uint256 index,
+ address target,
+ uint256 value,
+ bytes calldata data
+ ) private {
+ (bool success, ) = target.call{value: value}(data);
+ require(success, "TimelockController: underlying transaction reverted");
+
+ emit CallExecuted(id, index, target, value, data);
+ }
+
+ /**
+ * @dev Changes the minimum timelock duration for future operations.
+ *
+ * Emits a {MinDelayChange} event.
+ *
+ * Requirements:
+ *
+ * - the caller must be the timelock itself. This can only be achieved by scheduling and later executing
+ * an operation where the timelock is the target and the data is the ABI-encoded call to this function.
+ */
+ function updateDelay(uint256 newDelay) external virtual {
+ require(msg.sender == address(this), "TimelockController: caller must be timelock");
+ emit MinDelayChange(_minDelay, newDelay);
+ _minDelay = newDelay;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/governance/compatibility/GovernorCompatibilityBravo.sol b/node_modules/@openzeppelin/contracts/governance/compatibility/GovernorCompatibilityBravo.sol
new file mode 100644
index 0000000..2ece48c
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/governance/compatibility/GovernorCompatibilityBravo.sol
@@ -0,0 +1,301 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../../utils/Counters.sol";
+import "../../utils/math/SafeCast.sol";
+import "../extensions/IGovernorTimelock.sol";
+import "../extensions/GovernorProposalThreshold.sol";
+import "../Governor.sol";
+import "./IGovernorCompatibilityBravo.sol";
+
+/**
+ * @dev Compatibility layer that implements GovernorBravo compatibility on to of {Governor}.
+ *
+ * This compatibility layer includes a voting system and requires a {IGovernorTimelock} compatible module to be added
+ * through inheritance. It does not include token bindings, not does it include any variable upgrade patterns.
+ *
+ * _Available since v4.3._
+ */
+abstract contract GovernorCompatibilityBravo is
+ IGovernorTimelock,
+ IGovernorCompatibilityBravo,
+ Governor,
+ GovernorProposalThreshold
+{
+ using Counters for Counters.Counter;
+ using Timers for Timers.BlockNumber;
+
+ enum VoteType {
+ Against,
+ For,
+ Abstain
+ }
+
+ struct ProposalDetails {
+ address proposer;
+ address[] targets;
+ uint256[] values;
+ string[] signatures;
+ bytes[] calldatas;
+ uint256 forVotes;
+ uint256 againstVotes;
+ uint256 abstainVotes;
+ mapping(address => Receipt) receipts;
+ bytes32 descriptionHash;
+ }
+
+ mapping(uint256 => ProposalDetails) private _proposalDetails;
+
+ // solhint-disable-next-line func-name-mixedcase
+ function COUNTING_MODE() public pure virtual override returns (string memory) {
+ return "support=bravo&quorum=bravo";
+ }
+
+ // ============================================== Proposal lifecycle ==============================================
+ /**
+ * @dev See {IGovernor-propose}.
+ */
+ function propose(
+ address[] memory targets,
+ uint256[] memory values,
+ bytes[] memory calldatas,
+ string memory description
+ ) public virtual override(IGovernor, Governor, GovernorProposalThreshold) returns (uint256) {
+ _storeProposal(_msgSender(), targets, values, new string[](calldatas.length), calldatas, description);
+ return super.propose(targets, values, calldatas, description);
+ }
+
+ /**
+ * @dev See {IGovernorCompatibilityBravo-propose}.
+ */
+ function propose(
+ address[] memory targets,
+ uint256[] memory values,
+ string[] memory signatures,
+ bytes[] memory calldatas,
+ string memory description
+ ) public virtual override returns (uint256) {
+ _storeProposal(_msgSender(), targets, values, signatures, calldatas, description);
+ return propose(targets, values, _encodeCalldata(signatures, calldatas), description);
+ }
+
+ /**
+ * @dev See {IGovernorCompatibilityBravo-queue}.
+ */
+ function queue(uint256 proposalId) public virtual override {
+ ProposalDetails storage details = _proposalDetails[proposalId];
+ queue(
+ details.targets,
+ details.values,
+ _encodeCalldata(details.signatures, details.calldatas),
+ details.descriptionHash
+ );
+ }
+
+ /**
+ * @dev See {IGovernorCompatibilityBravo-execute}.
+ */
+ function execute(uint256 proposalId) public payable virtual override {
+ ProposalDetails storage details = _proposalDetails[proposalId];
+ execute(
+ details.targets,
+ details.values,
+ _encodeCalldata(details.signatures, details.calldatas),
+ details.descriptionHash
+ );
+ }
+
+ function cancel(uint256 proposalId) public virtual override {
+ ProposalDetails storage details = _proposalDetails[proposalId];
+
+ require(
+ _msgSender() == details.proposer || getVotes(details.proposer, block.number - 1) < proposalThreshold(),
+ "GovernorBravo: proposer above threshold"
+ );
+
+ _cancel(
+ details.targets,
+ details.values,
+ _encodeCalldata(details.signatures, details.calldatas),
+ details.descriptionHash
+ );
+ }
+
+ /**
+ * @dev Encodes calldatas with optional function signature.
+ */
+ function _encodeCalldata(string[] memory signatures, bytes[] memory calldatas)
+ private
+ pure
+ returns (bytes[] memory)
+ {
+ bytes[] memory fullcalldatas = new bytes[](calldatas.length);
+
+ for (uint256 i = 0; i < signatures.length; ++i) {
+ fullcalldatas[i] = bytes(signatures[i]).length == 0
+ ? calldatas[i]
+ : abi.encodeWithSignature(signatures[i], calldatas[i]);
+ }
+
+ return fullcalldatas;
+ }
+
+ /**
+ * @dev Store proposal metadata for later lookup
+ */
+ function _storeProposal(
+ address proposer,
+ address[] memory targets,
+ uint256[] memory values,
+ string[] memory signatures,
+ bytes[] memory calldatas,
+ string memory description
+ ) private {
+ bytes32 descriptionHash = keccak256(bytes(description));
+ uint256 proposalId = hashProposal(targets, values, _encodeCalldata(signatures, calldatas), descriptionHash);
+
+ ProposalDetails storage details = _proposalDetails[proposalId];
+ if (details.descriptionHash == bytes32(0)) {
+ details.proposer = proposer;
+ details.targets = targets;
+ details.values = values;
+ details.signatures = signatures;
+ details.calldatas = calldatas;
+ details.descriptionHash = descriptionHash;
+ }
+ }
+
+ // ==================================================== Views =====================================================
+ /**
+ * @dev Part of the Governor Bravo's interface: _"The number of votes required in order for a voter to become a proposer"_.
+ */
+ function proposalThreshold()
+ public
+ view
+ virtual
+ override(IGovernorCompatibilityBravo, GovernorProposalThreshold)
+ returns (uint256);
+
+ /**
+ * @dev See {IGovernorCompatibilityBravo-proposals}.
+ */
+ function proposals(uint256 proposalId)
+ public
+ view
+ virtual
+ override
+ returns (
+ uint256 id,
+ address proposer,
+ uint256 eta,
+ uint256 startBlock,
+ uint256 endBlock,
+ uint256 forVotes,
+ uint256 againstVotes,
+ uint256 abstainVotes,
+ bool canceled,
+ bool executed
+ )
+ {
+ id = proposalId;
+ eta = proposalEta(proposalId);
+ startBlock = proposalSnapshot(proposalId);
+ endBlock = proposalDeadline(proposalId);
+
+ ProposalDetails storage details = _proposalDetails[proposalId];
+ proposer = details.proposer;
+ forVotes = details.forVotes;
+ againstVotes = details.againstVotes;
+ abstainVotes = details.abstainVotes;
+
+ ProposalState status = state(proposalId);
+ canceled = status == ProposalState.Canceled;
+ executed = status == ProposalState.Executed;
+ }
+
+ /**
+ * @dev See {IGovernorCompatibilityBravo-getActions}.
+ */
+ function getActions(uint256 proposalId)
+ public
+ view
+ virtual
+ override
+ returns (
+ address[] memory targets,
+ uint256[] memory values,
+ string[] memory signatures,
+ bytes[] memory calldatas
+ )
+ {
+ ProposalDetails storage details = _proposalDetails[proposalId];
+ return (details.targets, details.values, details.signatures, details.calldatas);
+ }
+
+ /**
+ * @dev See {IGovernorCompatibilityBravo-getReceipt}.
+ */
+ function getReceipt(uint256 proposalId, address voter) public view virtual override returns (Receipt memory) {
+ return _proposalDetails[proposalId].receipts[voter];
+ }
+
+ /**
+ * @dev See {IGovernorCompatibilityBravo-quorumVotes}.
+ */
+ function quorumVotes() public view virtual override returns (uint256) {
+ return quorum(block.number - 1);
+ }
+
+ // ==================================================== Voting ====================================================
+ /**
+ * @dev See {IGovernor-hasVoted}.
+ */
+ function hasVoted(uint256 proposalId, address account) public view virtual override returns (bool) {
+ return _proposalDetails[proposalId].receipts[account].hasVoted;
+ }
+
+ /**
+ * @dev See {Governor-_quorumReached}. In this module, only forVotes count toward the quorum.
+ */
+ function _quorumReached(uint256 proposalId) internal view virtual override returns (bool) {
+ ProposalDetails storage details = _proposalDetails[proposalId];
+ return quorum(proposalSnapshot(proposalId)) < details.forVotes;
+ }
+
+ /**
+ * @dev See {Governor-_voteSucceeded}. In this module, the forVotes must be scritly over the againstVotes.
+ */
+ function _voteSucceeded(uint256 proposalId) internal view virtual override returns (bool) {
+ ProposalDetails storage details = _proposalDetails[proposalId];
+ return details.forVotes > details.againstVotes;
+ }
+
+ /**
+ * @dev See {Governor-_countVote}. In this module, the support follows Governor Bravo.
+ */
+ function _countVote(
+ uint256 proposalId,
+ address account,
+ uint8 support,
+ uint256 weight
+ ) internal virtual override {
+ ProposalDetails storage details = _proposalDetails[proposalId];
+ Receipt storage receipt = details.receipts[account];
+
+ require(!receipt.hasVoted, "GovernorCompatibilityBravo: vote already cast");
+ receipt.hasVoted = true;
+ receipt.support = support;
+ receipt.votes = SafeCast.toUint96(weight);
+
+ if (support == uint8(VoteType.Against)) {
+ details.againstVotes += weight;
+ } else if (support == uint8(VoteType.For)) {
+ details.forVotes += weight;
+ } else if (support == uint8(VoteType.Abstain)) {
+ details.abstainVotes += weight;
+ } else {
+ revert("GovernorCompatibilityBravo: invalid vote type");
+ }
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/governance/compatibility/IGovernorCompatibilityBravo.sol b/node_modules/@openzeppelin/contracts/governance/compatibility/IGovernorCompatibilityBravo.sol
new file mode 100644
index 0000000..4f4229d
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/governance/compatibility/IGovernorCompatibilityBravo.sol
@@ -0,0 +1,118 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../IGovernor.sol";
+
+/**
+ * @dev Interface extension that adds missing functions to the {Governor} core to provide `GovernorBravo` compatibility.
+ *
+ * _Available since v4.3._
+ */
+abstract contract IGovernorCompatibilityBravo is IGovernor {
+ /**
+ * @dev Proposal structure from Compound Governor Bravo. Not actually used by the compatibility layer, as
+ * {{proposal}} returns a very different structure.
+ */
+ struct Proposal {
+ uint256 id;
+ address proposer;
+ uint256 eta;
+ address[] targets;
+ uint256[] values;
+ string[] signatures;
+ bytes[] calldatas;
+ uint256 startBlock;
+ uint256 endBlock;
+ uint256 forVotes;
+ uint256 againstVotes;
+ uint256 abstainVotes;
+ bool canceled;
+ bool executed;
+ mapping(address => Receipt) receipts;
+ }
+
+ /**
+ * @dev Receipt structure from Compound Governor Bravo
+ */
+ struct Receipt {
+ bool hasVoted;
+ uint8 support;
+ uint96 votes;
+ }
+
+ /**
+ * @dev Part of the Governor Bravo's interface.
+ */
+ function quorumVotes() public view virtual returns (uint256);
+
+ /**
+ * @dev Part of the Governor Bravo's interface: _"The official record of all proposals ever proposed"_.
+ */
+ function proposals(uint256)
+ public
+ view
+ virtual
+ returns (
+ uint256 id,
+ address proposer,
+ uint256 eta,
+ uint256 startBlock,
+ uint256 endBlock,
+ uint256 forVotes,
+ uint256 againstVotes,
+ uint256 abstainVotes,
+ bool canceled,
+ bool executed
+ );
+
+ /**
+ * @dev Part of the Governor Bravo's interface: _"Function used to propose a new proposal"_.
+ */
+ function propose(
+ address[] memory targets,
+ uint256[] memory values,
+ string[] memory signatures,
+ bytes[] memory calldatas,
+ string memory description
+ ) public virtual returns (uint256);
+
+ /**
+ * @dev Part of the Governor Bravo's interface: _"Queues a proposal of state succeeded"_.
+ */
+ function queue(uint256 proposalId) public virtual;
+
+ /**
+ * @dev Part of the Governor Bravo's interface: _"Executes a queued proposal if eta has passed"_.
+ */
+ function execute(uint256 proposalId) public payable virtual;
+
+ /**
+ * @dev Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold.
+ */
+ function cancel(uint256 proposalId) public virtual;
+
+ /**
+ * @dev Part of the Governor Bravo's interface: _"Gets actions of a proposal"_.
+ */
+ function getActions(uint256 proposalId)
+ public
+ view
+ virtual
+ returns (
+ address[] memory targets,
+ uint256[] memory values,
+ string[] memory signatures,
+ bytes[] memory calldatas
+ );
+
+ /**
+ * @dev Part of the Governor Bravo's interface: _"Gets the receipt for a voter on a given proposal"_.
+ */
+ function getReceipt(uint256 proposalId, address voter) public view virtual returns (Receipt memory);
+
+ /**
+ * @dev Part of the Governor Bravo's interface: _"The number of votes required in order for a voter to become a proposer"_.
+ */
+ function proposalThreshold() public view virtual returns (uint256);
+}
diff --git a/node_modules/@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol b/node_modules/@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol
new file mode 100644
index 0000000..f1cffb5
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol
@@ -0,0 +1,105 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../Governor.sol";
+
+/**
+ * @dev Extension of {Governor} for simple, 3 options, vote counting.
+ *
+ * _Available since v4.3._
+ */
+abstract contract GovernorCountingSimple is Governor {
+ /**
+ * @dev Supported vote types. Matches Governor Bravo ordering.
+ */
+ enum VoteType {
+ Against,
+ For,
+ Abstain
+ }
+
+ struct ProposalVote {
+ uint256 againstVotes;
+ uint256 forVotes;
+ uint256 abstainVotes;
+ mapping(address => bool) hasVoted;
+ }
+
+ mapping(uint256 => ProposalVote) private _proposalVotes;
+
+ /**
+ * @dev See {IGovernor-COUNTING_MODE}.
+ */
+ // solhint-disable-next-line func-name-mixedcase
+ function COUNTING_MODE() public pure virtual override returns (string memory) {
+ return "support=bravo&quorum=for,abstain";
+ }
+
+ /**
+ * @dev See {IGovernor-hasVoted}.
+ */
+ function hasVoted(uint256 proposalId, address account) public view virtual override returns (bool) {
+ return _proposalVotes[proposalId].hasVoted[account];
+ }
+
+ /**
+ * @dev Accessor to the internal vote counts.
+ */
+ function proposalVotes(uint256 proposalId)
+ public
+ view
+ virtual
+ returns (
+ uint256 againstVotes,
+ uint256 forVotes,
+ uint256 abstainVotes
+ )
+ {
+ ProposalVote storage proposalvote = _proposalVotes[proposalId];
+ return (proposalvote.againstVotes, proposalvote.forVotes, proposalvote.abstainVotes);
+ }
+
+ /**
+ * @dev See {Governor-_quorumReached}.
+ */
+ function _quorumReached(uint256 proposalId) internal view virtual override returns (bool) {
+ ProposalVote storage proposalvote = _proposalVotes[proposalId];
+
+ return quorum(proposalSnapshot(proposalId)) <= proposalvote.forVotes + proposalvote.abstainVotes;
+ }
+
+ /**
+ * @dev See {Governor-_voteSucceeded}. In this module, the forVotes must be scritly over the againstVotes.
+ */
+ function _voteSucceeded(uint256 proposalId) internal view virtual override returns (bool) {
+ ProposalVote storage proposalvote = _proposalVotes[proposalId];
+
+ return proposalvote.forVotes > proposalvote.againstVotes;
+ }
+
+ /**
+ * @dev See {Governor-_countVote}. In this module, the support follows the `VoteType` enum (from Governor Bravo).
+ */
+ function _countVote(
+ uint256 proposalId,
+ address account,
+ uint8 support,
+ uint256 weight
+ ) internal virtual override {
+ ProposalVote storage proposalvote = _proposalVotes[proposalId];
+
+ require(!proposalvote.hasVoted[account], "GovernorVotingSimple: vote already cast");
+ proposalvote.hasVoted[account] = true;
+
+ if (support == uint8(VoteType.Against)) {
+ proposalvote.againstVotes += weight;
+ } else if (support == uint8(VoteType.For)) {
+ proposalvote.forVotes += weight;
+ } else if (support == uint8(VoteType.Abstain)) {
+ proposalvote.abstainVotes += weight;
+ } else {
+ revert("GovernorVotingSimple: invalid value for enum VoteType");
+ }
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/governance/extensions/GovernorProposalThreshold.sol b/node_modules/@openzeppelin/contracts/governance/extensions/GovernorProposalThreshold.sol
new file mode 100644
index 0000000..6bf4adf
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/governance/extensions/GovernorProposalThreshold.sol
@@ -0,0 +1,34 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../Governor.sol";
+
+/**
+ * @dev Extension of {Governor} for proposal restriction to token holders with a minimum balance.
+ *
+ * _Available since v4.3._
+ */
+abstract contract GovernorProposalThreshold is Governor {
+ /**
+ * @dev See {IGovernor-propose}.
+ */
+ function propose(
+ address[] memory targets,
+ uint256[] memory values,
+ bytes[] memory calldatas,
+ string memory description
+ ) public virtual override returns (uint256) {
+ require(
+ getVotes(msg.sender, block.number - 1) >= proposalThreshold(),
+ "GovernorCompatibilityBravo: proposer votes below proposal threshold"
+ );
+
+ return super.propose(targets, values, calldatas, description);
+ }
+
+ /**
+ * @dev Part of the Governor Bravo's interface: _"The number of votes required in order for a voter to become a proposer"_.
+ */
+ function proposalThreshold() public view virtual returns (uint256);
+}
diff --git a/node_modules/@openzeppelin/contracts/governance/extensions/GovernorTimelockCompound.sol b/node_modules/@openzeppelin/contracts/governance/extensions/GovernorTimelockCompound.sol
new file mode 100644
index 0000000..84fc272
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/governance/extensions/GovernorTimelockCompound.sol
@@ -0,0 +1,242 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IGovernorTimelock.sol";
+import "../Governor.sol";
+import "../../utils/math/SafeCast.sol";
+
+/**
+ * https://github.com/compound-finance/compound-protocol/blob/master/contracts/Timelock.sol[Compound's timelock] interface
+ */
+interface ICompoundTimelock {
+ receive() external payable;
+
+ // solhint-disable-next-line func-name-mixedcase
+ function GRACE_PERIOD() external view returns (uint256);
+
+ // solhint-disable-next-line func-name-mixedcase
+ function MINIMUM_DELAY() external view returns (uint256);
+
+ // solhint-disable-next-line func-name-mixedcase
+ function MAXIMUM_DELAY() external view returns (uint256);
+
+ function admin() external view returns (address);
+
+ function pendingAdmin() external view returns (address);
+
+ function delay() external view returns (uint256);
+
+ function queuedTransactions(bytes32) external view returns (bool);
+
+ function setDelay(uint256) external;
+
+ function acceptAdmin() external;
+
+ function setPendingAdmin(address) external;
+
+ function queueTransaction(
+ address target,
+ uint256 value,
+ string memory signature,
+ bytes memory data,
+ uint256 eta
+ ) external returns (bytes32);
+
+ function cancelTransaction(
+ address target,
+ uint256 value,
+ string memory signature,
+ bytes memory data,
+ uint256 eta
+ ) external;
+
+ function executeTransaction(
+ address target,
+ uint256 value,
+ string memory signature,
+ bytes memory data,
+ uint256 eta
+ ) external payable returns (bytes memory);
+}
+
+/**
+ * @dev Extension of {Governor} that binds the execution process to a Compound Timelock. This adds a delay, enforced by
+ * the external timelock to all successful proposal (in addition to the voting duration). The {Governor} needs to be
+ * the admin of the timelock for any operation to be performed. A public, unrestricted,
+ * {GovernorTimelockCompound-__acceptAdmin} is available to accept ownership of the timelock.
+ *
+ * Using this model means the proposal will be operated by the {TimelockController} and not by the {Governor}. Thus,
+ * the assets and permissions must be attached to the {TimelockController}. Any asset sent to the {Governor} will be
+ * inaccessible.
+ *
+ * _Available since v4.3._
+ */
+abstract contract GovernorTimelockCompound is IGovernorTimelock, Governor {
+ using SafeCast for uint256;
+ using Timers for Timers.Timestamp;
+
+ struct ProposalTimelock {
+ Timers.Timestamp timer;
+ }
+
+ ICompoundTimelock private _timelock;
+
+ mapping(uint256 => ProposalTimelock) private _proposalTimelocks;
+
+ /**
+ * @dev Emitted when the timelock controller used for proposal execution is modified.
+ */
+ event TimelockChange(address oldTimelock, address newTimelock);
+
+ /**
+ * @dev Set the timelock.
+ */
+ constructor(ICompoundTimelock timelockAddress) {
+ _updateTimelock(timelockAddress);
+ }
+
+ /**
+ * @dev See {IERC165-supportsInterface}.
+ */
+ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, Governor) returns (bool) {
+ return interfaceId == type(IGovernorTimelock).interfaceId || super.supportsInterface(interfaceId);
+ }
+
+ /**
+ * @dev Overriden version of the {Governor-state} function with added support for the `Queued` and `Expired` status.
+ */
+ function state(uint256 proposalId) public view virtual override(IGovernor, Governor) returns (ProposalState) {
+ ProposalState status = super.state(proposalId);
+
+ if (status != ProposalState.Succeeded) {
+ return status;
+ }
+
+ uint256 eta = proposalEta(proposalId);
+ if (eta == 0) {
+ return status;
+ } else if (block.timestamp >= eta + _timelock.GRACE_PERIOD()) {
+ return ProposalState.Expired;
+ } else {
+ return ProposalState.Queued;
+ }
+ }
+
+ /**
+ * @dev Public accessor to check the address of the timelock
+ */
+ function timelock() public view virtual override returns (address) {
+ return address(_timelock);
+ }
+
+ /**
+ * @dev Public accessor to check the eta of a queued proposal
+ */
+ function proposalEta(uint256 proposalId) public view virtual override returns (uint256) {
+ return _proposalTimelocks[proposalId].timer.getDeadline();
+ }
+
+ /**
+ * @dev Function to queue a proposal to the timelock.
+ */
+ function queue(
+ address[] memory targets,
+ uint256[] memory values,
+ bytes[] memory calldatas,
+ bytes32 descriptionHash
+ ) public virtual override returns (uint256) {
+ uint256 proposalId = hashProposal(targets, values, calldatas, descriptionHash);
+
+ require(state(proposalId) == ProposalState.Succeeded, "Governor: proposal not successful");
+
+ uint256 eta = block.timestamp + _timelock.delay();
+ _proposalTimelocks[proposalId].timer.setDeadline(eta.toUint64());
+ for (uint256 i = 0; i < targets.length; ++i) {
+ require(
+ !_timelock.queuedTransactions(keccak256(abi.encode(targets[i], values[i], "", calldatas[i], eta))),
+ "GovernorTimelockCompound: identical proposal action already queued"
+ );
+ _timelock.queueTransaction(targets[i], values[i], "", calldatas[i], eta);
+ }
+
+ emit ProposalQueued(proposalId, eta);
+
+ return proposalId;
+ }
+
+ /**
+ * @dev Overriden execute function that run the already queued proposal through the timelock.
+ */
+ function _execute(
+ uint256 proposalId,
+ address[] memory targets,
+ uint256[] memory values,
+ bytes[] memory calldatas,
+ bytes32 /*descriptionHash*/
+ ) internal virtual override {
+ uint256 eta = proposalEta(proposalId);
+ require(eta > 0, "GovernorTimelockCompound: proposal not yet queued");
+ for (uint256 i = 0; i < targets.length; ++i) {
+ _timelock.executeTransaction{value: values[i]}(targets[i], values[i], "", calldatas[i], eta);
+ }
+ }
+
+ /**
+ * @dev Overriden version of the {Governor-_cancel} function to cancel the timelocked proposal if it as already
+ * been queued.
+ */
+ function _cancel(
+ address[] memory targets,
+ uint256[] memory values,
+ bytes[] memory calldatas,
+ bytes32 descriptionHash
+ ) internal virtual override returns (uint256) {
+ uint256 proposalId = super._cancel(targets, values, calldatas, descriptionHash);
+
+ uint256 eta = proposalEta(proposalId);
+ if (eta > 0) {
+ for (uint256 i = 0; i < targets.length; ++i) {
+ _timelock.cancelTransaction(targets[i], values[i], "", calldatas[i], eta);
+ }
+ _proposalTimelocks[proposalId].timer.reset();
+ }
+
+ return proposalId;
+ }
+
+ /**
+ * @dev Address through which the governor executes action. In this case, the timelock.
+ */
+ function _executor() internal view virtual override returns (address) {
+ return address(_timelock);
+ }
+
+ /**
+ * @dev Accept admin right over the timelock.
+ */
+ // solhint-disable-next-line private-vars-leading-underscore
+ function __acceptAdmin() public {
+ _timelock.acceptAdmin();
+ }
+
+ /**
+ * @dev Public endpoint to update the underlying timelock instance. Restricted to the timelock itself, so updates
+ * must be proposed, scheduled and executed using the {Governor} workflow.
+ *
+ * For security reason, the timelock must be handed over to another admin before setting up a new one. The two
+ * operations (hand over the timelock) and do the update can be batched in a single proposal.
+ *
+ * Note that if the timelock admin has been handed over in a previous operation, we refuse updates made through the
+ * timelock if admin of the timelock has already been accepted and the operation is executed outside the scope of
+ * governance.
+ */
+ function updateTimelock(ICompoundTimelock newTimelock) external virtual onlyGovernance {
+ _updateTimelock(newTimelock);
+ }
+
+ function _updateTimelock(ICompoundTimelock newTimelock) private {
+ emit TimelockChange(address(_timelock), address(newTimelock));
+ _timelock = newTimelock;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/governance/extensions/GovernorTimelockControl.sol b/node_modules/@openzeppelin/contracts/governance/extensions/GovernorTimelockControl.sol
new file mode 100644
index 0000000..9472672
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/governance/extensions/GovernorTimelockControl.sol
@@ -0,0 +1,153 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IGovernorTimelock.sol";
+import "../Governor.sol";
+import "../TimelockController.sol";
+
+/**
+ * @dev Extension of {Governor} that binds the execution process to an instance of {TimelockController}. This adds a
+ * delay, enforced by the {TimelockController} to all successful proposal (in addition to the voting duration). The
+ * {Governor} needs the proposer (an ideally the executor) roles for the {Governor} to work properly.
+ *
+ * Using this model means the proposal will be operated by the {TimelockController} and not by the {Governor}. Thus,
+ * the assets and permissions must be attached to the {TimelockController}. Any asset sent to the {Governor} will be
+ * inaccessible.
+ *
+ * _Available since v4.3._
+ */
+abstract contract GovernorTimelockControl is IGovernorTimelock, Governor {
+ TimelockController private _timelock;
+ mapping(uint256 => bytes32) private _timelockIds;
+
+ /**
+ * @dev Emitted when the timelock controller used for proposal execution is modified.
+ */
+ event TimelockChange(address oldTimelock, address newTimelock);
+
+ /**
+ * @dev Set the timelock.
+ */
+ constructor(TimelockController timelockAddress) {
+ _updateTimelock(timelockAddress);
+ }
+
+ /**
+ * @dev See {IERC165-supportsInterface}.
+ */
+ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, Governor) returns (bool) {
+ return interfaceId == type(IGovernorTimelock).interfaceId || super.supportsInterface(interfaceId);
+ }
+
+ /**
+ * @dev Overriden version of the {Governor-state} function with added support for the `Queued` status.
+ */
+ function state(uint256 proposalId) public view virtual override(IGovernor, Governor) returns (ProposalState) {
+ ProposalState status = super.state(proposalId);
+
+ if (status != ProposalState.Succeeded) {
+ return status;
+ }
+
+ // core tracks execution, so we just have to check if successful proposal have been queued.
+ bytes32 queueid = _timelockIds[proposalId];
+ if (queueid == bytes32(0)) {
+ return status;
+ } else if (_timelock.isOperationDone(queueid)) {
+ return ProposalState.Executed;
+ } else {
+ return ProposalState.Queued;
+ }
+ }
+
+ /**
+ * @dev Public accessor to check the address of the timelock
+ */
+ function timelock() public view virtual override returns (address) {
+ return address(_timelock);
+ }
+
+ /**
+ * @dev Public accessor to check the eta of a queued proposal
+ */
+ function proposalEta(uint256 proposalId) public view virtual override returns (uint256) {
+ uint256 eta = _timelock.getTimestamp(_timelockIds[proposalId]);
+ return eta == 1 ? 0 : eta; // _DONE_TIMESTAMP (1) should be replaced with a 0 value
+ }
+
+ /**
+ * @dev Function to queue a proposal to the timelock.
+ */
+ function queue(
+ address[] memory targets,
+ uint256[] memory values,
+ bytes[] memory calldatas,
+ bytes32 descriptionHash
+ ) public virtual override returns (uint256) {
+ uint256 proposalId = hashProposal(targets, values, calldatas, descriptionHash);
+
+ require(state(proposalId) == ProposalState.Succeeded, "Governor: proposal not successful");
+
+ uint256 delay = _timelock.getMinDelay();
+ _timelockIds[proposalId] = _timelock.hashOperationBatch(targets, values, calldatas, 0, descriptionHash);
+ _timelock.scheduleBatch(targets, values, calldatas, 0, descriptionHash, delay);
+
+ emit ProposalQueued(proposalId, block.timestamp + delay);
+
+ return proposalId;
+ }
+
+ /**
+ * @dev Overriden execute function that run the already queued proposal through the timelock.
+ */
+ function _execute(
+ uint256, /* proposalId */
+ address[] memory targets,
+ uint256[] memory values,
+ bytes[] memory calldatas,
+ bytes32 descriptionHash
+ ) internal virtual override {
+ _timelock.executeBatch{value: msg.value}(targets, values, calldatas, 0, descriptionHash);
+ }
+
+ /**
+ * @dev Overriden version of the {Governor-_cancel} function to cancel the timelocked proposal if it as already
+ * been queued.
+ */
+ function _cancel(
+ address[] memory targets,
+ uint256[] memory values,
+ bytes[] memory calldatas,
+ bytes32 descriptionHash
+ ) internal virtual override returns (uint256) {
+ uint256 proposalId = super._cancel(targets, values, calldatas, descriptionHash);
+
+ if (_timelockIds[proposalId] != 0) {
+ _timelock.cancel(_timelockIds[proposalId]);
+ delete _timelockIds[proposalId];
+ }
+
+ return proposalId;
+ }
+
+ /**
+ * @dev Address through which the governor executes action. In this case, the timelock.
+ */
+ function _executor() internal view virtual override returns (address) {
+ return address(_timelock);
+ }
+
+ /**
+ * @dev Public endpoint to update the underlying timelock instance. Restricted to the timelock itself, so updates
+ * must be proposed, scheduled and executed using the {Governor} workflow.
+ */
+ function updateTimelock(TimelockController newTimelock) external virtual onlyGovernance {
+ _updateTimelock(newTimelock);
+ }
+
+ function _updateTimelock(TimelockController newTimelock) private {
+ emit TimelockChange(address(_timelock), address(newTimelock));
+ _timelock = newTimelock;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/governance/extensions/GovernorVotes.sol b/node_modules/@openzeppelin/contracts/governance/extensions/GovernorVotes.sol
new file mode 100644
index 0000000..aa9884c
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/governance/extensions/GovernorVotes.sol
@@ -0,0 +1,27 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../Governor.sol";
+import "../../token/ERC20/extensions/ERC20Votes.sol";
+import "../../utils/math/Math.sol";
+
+/**
+ * @dev Extension of {Governor} for voting weight extraction from an {ERC20Votes} token.
+ *
+ * _Available since v4.3._
+ */
+abstract contract GovernorVotes is Governor {
+ ERC20Votes public immutable token;
+
+ constructor(ERC20Votes tokenAddress) {
+ token = tokenAddress;
+ }
+
+ /**
+ * Read the voting weight from the token's built in snapshot mechanism (see {IGovernor-getVotes}).
+ */
+ function getVotes(address account, uint256 blockNumber) public view virtual override returns (uint256) {
+ return token.getPastVotes(account, blockNumber);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/governance/extensions/GovernorVotesComp.sol b/node_modules/@openzeppelin/contracts/governance/extensions/GovernorVotesComp.sol
new file mode 100644
index 0000000..3fc42dd
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/governance/extensions/GovernorVotesComp.sol
@@ -0,0 +1,26 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../Governor.sol";
+import "../../token/ERC20/extensions/ERC20VotesComp.sol";
+
+/**
+ * @dev Extension of {Governor} for voting weight extraction from a Comp token.
+ *
+ * _Available since v4.3._
+ */
+abstract contract GovernorVotesComp is Governor {
+ ERC20VotesComp public immutable token;
+
+ constructor(ERC20VotesComp token_) {
+ token = token_;
+ }
+
+ /**
+ * Read the voting weight from the token's built in snapshot mechanism (see {IGovernor-getVotes}).
+ */
+ function getVotes(address account, uint256 blockNumber) public view virtual override returns (uint256) {
+ return token.getPriorVotes(account, blockNumber);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol b/node_modules/@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol
new file mode 100644
index 0000000..8001150
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol
@@ -0,0 +1,49 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./GovernorVotes.sol";
+
+/**
+ * @dev Extension of {Governor} for voting weight extraction from an {ERC20Votes} token and a quorum expressed as a
+ * fraction of the total supply.
+ *
+ * _Available since v4.3._
+ */
+abstract contract GovernorVotesQuorumFraction is GovernorVotes {
+ uint256 private _quorumNumerator;
+
+ event QuorumNumeratorUpdated(uint256 oldQuorumNumerator, uint256 newQuorumNumerator);
+
+ constructor(uint256 quorumNumeratorValue) {
+ _updateQuorumNumerator(quorumNumeratorValue);
+ }
+
+ function quorumNumerator() public view virtual returns (uint256) {
+ return _quorumNumerator;
+ }
+
+ function quorumDenominator() public view virtual returns (uint256) {
+ return 100;
+ }
+
+ function quorum(uint256 blockNumber) public view virtual override returns (uint256) {
+ return (token.getPastTotalSupply(blockNumber) * quorumNumerator()) / quorumDenominator();
+ }
+
+ function updateQuorumNumerator(uint256 newQuorumNumerator) external virtual onlyGovernance {
+ _updateQuorumNumerator(newQuorumNumerator);
+ }
+
+ function _updateQuorumNumerator(uint256 newQuorumNumerator) internal virtual {
+ require(
+ newQuorumNumerator <= quorumDenominator(),
+ "GovernorVotesQuorumFraction: quorumNumerator over quorumDenominator"
+ );
+
+ uint256 oldQuorumNumerator = _quorumNumerator;
+ _quorumNumerator = newQuorumNumerator;
+
+ emit QuorumNumeratorUpdated(oldQuorumNumerator, newQuorumNumerator);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/governance/extensions/IGovernorTimelock.sol b/node_modules/@openzeppelin/contracts/governance/extensions/IGovernorTimelock.sol
new file mode 100644
index 0000000..2387ae4
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/governance/extensions/IGovernorTimelock.sol
@@ -0,0 +1,25 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../IGovernor.sol";
+
+/**
+ * @dev Extension of the {IGovernor} for timelock supporting modules.
+ *
+ * _Available since v4.3._
+ */
+abstract contract IGovernorTimelock is IGovernor {
+ event ProposalQueued(uint256 proposalId, uint256 eta);
+
+ function timelock() public view virtual returns (address);
+
+ function proposalEta(uint256 proposalId) public view virtual returns (uint256);
+
+ function queue(
+ address[] memory targets,
+ uint256[] memory values,
+ bytes[] memory calldatas,
+ bytes32 descriptionHash
+ ) public virtual returns (uint256 proposalId);
+}
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC1155.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC1155.sol
new file mode 100644
index 0000000..9522849
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC1155.sol
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../token/ERC1155/IERC1155.sol";
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC1155MetadataURI.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC1155MetadataURI.sol
new file mode 100644
index 0000000..2e10d3b
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC1155MetadataURI.sol
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../token/ERC1155/extensions/IERC1155MetadataURI.sol";
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC1155Receiver.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC1155Receiver.sol
new file mode 100644
index 0000000..79941cf
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC1155Receiver.sol
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../token/ERC1155/IERC1155Receiver.sol";
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC1271.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC1271.sol
new file mode 100644
index 0000000..0e02b47
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC1271.sol
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Interface of the ERC1271 standard signature validation method for
+ * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].
+ *
+ * _Available since v4.1._
+ */
+interface IERC1271 {
+ /**
+ * @dev Should return whether the signature provided is valid for the provided data
+ * @param hash Hash of the data to be signed
+ * @param signature Signature byte array associated with _data
+ */
+ function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);
+}
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol
new file mode 100644
index 0000000..d610ca8
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol
@@ -0,0 +1,94 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IERC20.sol";
+import "./IERC165.sol";
+
+interface IERC1363 is IERC165, IERC20 {
+ /*
+ * Note: the ERC-165 identifier for this interface is 0x4bbee2df.
+ * 0x4bbee2df ===
+ * bytes4(keccak256('transferAndCall(address,uint256)')) ^
+ * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^
+ * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^
+ * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)'))
+ */
+
+ /*
+ * Note: the ERC-165 identifier for this interface is 0xfb9ec8ce.
+ * 0xfb9ec8ce ===
+ * bytes4(keccak256('approveAndCall(address,uint256)')) ^
+ * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))
+ */
+
+ /**
+ * @dev Transfer tokens from `msg.sender` to another address and then call `onTransferReceived` on receiver
+ * @param to address The address which you want to transfer to
+ * @param value uint256 The amount of tokens to be transferred
+ * @return true unless throwing
+ */
+ function transferAndCall(address to, uint256 value) external returns (bool);
+
+ /**
+ * @dev Transfer tokens from `msg.sender` to another address and then call `onTransferReceived` on receiver
+ * @param to address The address which you want to transfer to
+ * @param value uint256 The amount of tokens to be transferred
+ * @param data bytes Additional data with no specified format, sent in call to `to`
+ * @return true unless throwing
+ */
+ function transferAndCall(
+ address to,
+ uint256 value,
+ bytes memory data
+ ) external returns (bool);
+
+ /**
+ * @dev Transfer tokens from one address to another and then call `onTransferReceived` on receiver
+ * @param from address The address which you want to send tokens from
+ * @param to address The address which you want to transfer to
+ * @param value uint256 The amount of tokens to be transferred
+ * @return true unless throwing
+ */
+ function transferFromAndCall(
+ address from,
+ address to,
+ uint256 value
+ ) external returns (bool);
+
+ /**
+ * @dev Transfer tokens from one address to another and then call `onTransferReceived` on receiver
+ * @param from address The address which you want to send tokens from
+ * @param to address The address which you want to transfer to
+ * @param value uint256 The amount of tokens to be transferred
+ * @param data bytes Additional data with no specified format, sent in call to `to`
+ * @return true unless throwing
+ */
+ function transferFromAndCall(
+ address from,
+ address to,
+ uint256 value,
+ bytes memory data
+ ) external returns (bool);
+
+ /**
+ * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender
+ * and then call `onApprovalReceived` on spender.
+ * @param spender address The address which will spend the funds
+ * @param value uint256 The amount of tokens to be spent
+ */
+ function approveAndCall(address spender, uint256 value) external returns (bool);
+
+ /**
+ * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender
+ * and then call `onApprovalReceived` on spender.
+ * @param spender address The address which will spend the funds
+ * @param value uint256 The amount of tokens to be spent
+ * @param data bytes Additional data with no specified format, sent in call to `spender`
+ */
+ function approveAndCall(
+ address spender,
+ uint256 value,
+ bytes memory data
+ ) external returns (bool);
+}
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC1363Receiver.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC1363Receiver.sol
new file mode 100644
index 0000000..1e9b3d4
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC1363Receiver.sol
@@ -0,0 +1,31 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+interface IERC1363Receiver {
+ /*
+ * Note: the ERC-165 identifier for this interface is 0x88a7ca5c.
+ * 0x88a7ca5c === bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))
+ */
+
+ /**
+ * @notice Handle the receipt of ERC1363 tokens
+ * @dev Any ERC1363 smart contract calls this function on the recipient
+ * after a `transfer` or a `transferFrom`. This function MAY throw to revert and reject the
+ * transfer. Return of other than the magic value MUST result in the
+ * transaction being reverted.
+ * Note: the token contract address is always the message sender.
+ * @param operator address The address which called `transferAndCall` or `transferFromAndCall` function
+ * @param from address The address which are token transferred from
+ * @param value uint256 The amount of tokens transferred
+ * @param data bytes Additional data with no specified format
+ * @return `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))`
+ * unless throwing
+ */
+ function onTransferReceived(
+ address operator,
+ address from,
+ uint256 value,
+ bytes memory data
+ ) external returns (bytes4);
+}
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC1363Spender.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC1363Spender.sol
new file mode 100644
index 0000000..fb58ffc
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC1363Spender.sol
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+interface IERC1363Spender {
+ /*
+ * Note: the ERC-165 identifier for this interface is 0x7b04a2d0.
+ * 0x7b04a2d0 === bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))
+ */
+
+ /**
+ * @notice Handle the approval of ERC1363 tokens
+ * @dev Any ERC1363 smart contract calls this function on the recipient
+ * after an `approve`. This function MAY throw to revert and reject the
+ * approval. Return of other than the magic value MUST result in the
+ * transaction being reverted.
+ * Note: the token contract address is always the message sender.
+ * @param owner address The address which called `approveAndCall` function
+ * @param value uint256 The amount of tokens to be spent
+ * @param data bytes Additional data with no specified format
+ * @return `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))`
+ * unless throwing
+ */
+ function onApprovalReceived(
+ address owner,
+ uint256 value,
+ bytes memory data
+ ) external returns (bytes4);
+}
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC165.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC165.sol
new file mode 100644
index 0000000..e9f6b05
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC165.sol
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../utils/introspection/IERC165.sol";
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC1820Implementer.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC1820Implementer.sol
new file mode 100644
index 0000000..ead5624
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC1820Implementer.sol
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../utils/introspection/IERC1820Implementer.sol";
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC1820Registry.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC1820Registry.sol
new file mode 100644
index 0000000..7734129
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC1820Registry.sol
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../utils/introspection/IERC1820Registry.sol";
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC20.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC20.sol
new file mode 100644
index 0000000..0072add
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC20.sol
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../token/ERC20/IERC20.sol";
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC20Metadata.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC20Metadata.sol
new file mode 100644
index 0000000..8b72362
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC20Metadata.sol
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../token/ERC20/extensions/IERC20Metadata.sol";
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC2981.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC2981.sol
new file mode 100644
index 0000000..064d027
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC2981.sol
@@ -0,0 +1,22 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IERC165.sol";
+
+/**
+ * @dev Interface for the NFT Royalty Standard
+ */
+interface IERC2981 is IERC165 {
+ /**
+ * @dev Called with the sale price to determine how much royalty is owed and to whom.
+ * @param tokenId - the NFT asset queried for royalty information
+ * @param salePrice - the sale price of the NFT asset specified by `tokenId`
+ * @return receiver - address of who should be sent the royalty payment
+ * @return royaltyAmount - the royalty payment amount for `salePrice`
+ */
+ function royaltyInfo(uint256 tokenId, uint256 salePrice)
+ external
+ view
+ returns (address receiver, uint256 royaltyAmount);
+}
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC3156.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC3156.sol
new file mode 100644
index 0000000..36d64d5
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC3156.sol
@@ -0,0 +1,6 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IERC3156FlashBorrower.sol";
+import "./IERC3156FlashLender.sol";
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC3156FlashBorrower.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC3156FlashBorrower.sol
new file mode 100644
index 0000000..fb24746
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC3156FlashBorrower.sol
@@ -0,0 +1,28 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Interface of the ERC3156 FlashBorrower, as defined in
+ * https://eips.ethereum.org/EIPS/eip-3156[ERC-3156].
+ *
+ * _Available since v4.1._
+ */
+interface IERC3156FlashBorrower {
+ /**
+ * @dev Receive a flash loan.
+ * @param initiator The initiator of the loan.
+ * @param token The loan currency.
+ * @param amount The amount of tokens lent.
+ * @param fee The additional amount of tokens to repay.
+ * @param data Arbitrary data structure, intended to contain user-defined parameters.
+ * @return The keccak256 hash of "ERC3156FlashBorrower.onFlashLoan"
+ */
+ function onFlashLoan(
+ address initiator,
+ address token,
+ uint256 amount,
+ uint256 fee,
+ bytes calldata data
+ ) external returns (bytes32);
+}
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC3156FlashLender.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC3156FlashLender.sol
new file mode 100644
index 0000000..8041ddb
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC3156FlashLender.sol
@@ -0,0 +1,42 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IERC3156FlashBorrower.sol";
+
+/**
+ * @dev Interface of the ERC3156 FlashLender, as defined in
+ * https://eips.ethereum.org/EIPS/eip-3156[ERC-3156].
+ *
+ * _Available since v4.1._
+ */
+interface IERC3156FlashLender {
+ /**
+ * @dev The amount of currency available to be lended.
+ * @param token The loan currency.
+ * @return The amount of `token` that can be borrowed.
+ */
+ function maxFlashLoan(address token) external view returns (uint256);
+
+ /**
+ * @dev The fee to be charged for a given loan.
+ * @param token The loan currency.
+ * @param amount The amount of tokens lent.
+ * @return The amount of `token` to be charged for the loan, on top of the returned principal.
+ */
+ function flashFee(address token, uint256 amount) external view returns (uint256);
+
+ /**
+ * @dev Initiate a flash loan.
+ * @param receiver The receiver of the tokens in the loan, and the receiver of the callback.
+ * @param token The loan currency.
+ * @param amount The amount of tokens lent.
+ * @param data Arbitrary data structure, intended to contain user-defined parameters.
+ */
+ function flashLoan(
+ IERC3156FlashBorrower receiver,
+ address token,
+ uint256 amount,
+ bytes calldata data
+ ) external returns (bool);
+}
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC721.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC721.sol
new file mode 100644
index 0000000..8e763e6
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC721.sol
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../token/ERC721/IERC721.sol";
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC721Enumerable.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC721Enumerable.sol
new file mode 100644
index 0000000..db01d87
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC721Enumerable.sol
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../token/ERC721/extensions/IERC721Enumerable.sol";
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC721Metadata.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC721Metadata.sol
new file mode 100644
index 0000000..7265be0
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC721Metadata.sol
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../token/ERC721/extensions/IERC721Metadata.sol";
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC721Receiver.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC721Receiver.sol
new file mode 100644
index 0000000..e23d986
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC721Receiver.sol
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../token/ERC721/IERC721Receiver.sol";
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC777.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC777.sol
new file mode 100644
index 0000000..88f7792
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC777.sol
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../token/ERC777/IERC777.sol";
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC777Recipient.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC777Recipient.sol
new file mode 100644
index 0000000..23d7e7b
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC777Recipient.sol
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../token/ERC777/IERC777Recipient.sol";
diff --git a/node_modules/@openzeppelin/contracts/interfaces/IERC777Sender.sol b/node_modules/@openzeppelin/contracts/interfaces/IERC777Sender.sol
new file mode 100644
index 0000000..ffd3fec
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/IERC777Sender.sol
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../token/ERC777/IERC777Sender.sol";
diff --git a/node_modules/@openzeppelin/contracts/interfaces/draft-IERC2612.sol b/node_modules/@openzeppelin/contracts/interfaces/draft-IERC2612.sol
new file mode 100644
index 0000000..83a80ac
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/interfaces/draft-IERC2612.sol
@@ -0,0 +1,7 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../token/ERC20/extensions/draft-IERC20Permit.sol";
+
+interface IERC2612 is IERC20Permit {}
diff --git a/node_modules/@openzeppelin/contracts/metatx/ERC2771Context.sol b/node_modules/@openzeppelin/contracts/metatx/ERC2771Context.sol
new file mode 100644
index 0000000..d6b50a2
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/metatx/ERC2771Context.sol
@@ -0,0 +1,39 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../utils/Context.sol";
+
+/**
+ * @dev Context variant with ERC2771 support.
+ */
+abstract contract ERC2771Context is Context {
+ address private _trustedForwarder;
+
+ constructor(address trustedForwarder) {
+ _trustedForwarder = trustedForwarder;
+ }
+
+ function isTrustedForwarder(address forwarder) public view virtual returns (bool) {
+ return forwarder == _trustedForwarder;
+ }
+
+ function _msgSender() internal view virtual override returns (address sender) {
+ if (isTrustedForwarder(msg.sender)) {
+ // The assembly code is more direct than the Solidity version using `abi.decode`.
+ assembly {
+ sender := shr(96, calldataload(sub(calldatasize(), 20)))
+ }
+ } else {
+ return super._msgSender();
+ }
+ }
+
+ function _msgData() internal view virtual override returns (bytes calldata) {
+ if (isTrustedForwarder(msg.sender)) {
+ return msg.data[:msg.data.length - 20];
+ } else {
+ return super._msgData();
+ }
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/metatx/MinimalForwarder.sol b/node_modules/@openzeppelin/contracts/metatx/MinimalForwarder.sol
new file mode 100644
index 0000000..816ba67
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/metatx/MinimalForwarder.sol
@@ -0,0 +1,58 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../utils/cryptography/ECDSA.sol";
+import "../utils/cryptography/draft-EIP712.sol";
+
+/**
+ * @dev Simple minimal forwarder to be used together with an ERC2771 compatible contract. See {ERC2771Context}.
+ */
+contract MinimalForwarder is EIP712 {
+ using ECDSA for bytes32;
+
+ struct ForwardRequest {
+ address from;
+ address to;
+ uint256 value;
+ uint256 gas;
+ uint256 nonce;
+ bytes data;
+ }
+
+ bytes32 private constant _TYPEHASH =
+ keccak256("ForwardRequest(address from,address to,uint256 value,uint256 gas,uint256 nonce,bytes data)");
+
+ mapping(address => uint256) private _nonces;
+
+ constructor() EIP712("MinimalForwarder", "0.0.1") {}
+
+ function getNonce(address from) public view returns (uint256) {
+ return _nonces[from];
+ }
+
+ function verify(ForwardRequest calldata req, bytes calldata signature) public view returns (bool) {
+ address signer = _hashTypedDataV4(
+ keccak256(abi.encode(_TYPEHASH, req.from, req.to, req.value, req.gas, req.nonce, keccak256(req.data)))
+ ).recover(signature);
+ return _nonces[req.from] == req.nonce && signer == req.from;
+ }
+
+ function execute(ForwardRequest calldata req, bytes calldata signature)
+ public
+ payable
+ returns (bool, bytes memory)
+ {
+ require(verify(req, signature), "MinimalForwarder: signature does not match request");
+ _nonces[req.from] = req.nonce + 1;
+
+ (bool success, bytes memory returndata) = req.to.call{gas: req.gas, value: req.value}(
+ abi.encodePacked(req.data, req.from)
+ );
+ // Validate that the relayer has sent enough gas for the call.
+ // See https://ronan.eth.link/blog/ethereum-gas-dangers/
+ assert(gasleft() > req.gas / 63);
+
+ return (success, returndata);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/package.json b/node_modules/@openzeppelin/contracts/package.json
new file mode 100644
index 0000000..654d0f8
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "@openzeppelin/contracts",
+ "description": "Secure Smart Contract library for Solidity",
+ "version": "4.3.1",
+ "files": [
+ "**/*.sol",
+ "/build/contracts/*.json",
+ "!/mocks/**/*"
+ ],
+ "scripts": {
+ "prepare": "bash ../scripts/prepare-contracts-package.sh",
+ "prepare-docs": "cd ..; npm run prepare-docs"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/OpenZeppelin/openzeppelin-contracts.git"
+ },
+ "keywords": [
+ "solidity",
+ "ethereum",
+ "smart",
+ "contracts",
+ "security",
+ "zeppelin"
+ ],
+ "author": "OpenZeppelin Community ",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/OpenZeppelin/openzeppelin-contracts/issues"
+ },
+ "homepage": "https://openzeppelin.com/contracts/"
+}
diff --git a/node_modules/@openzeppelin/contracts/proxy/Clones.sol b/node_modules/@openzeppelin/contracts/proxy/Clones.sol
new file mode 100644
index 0000000..498fc91
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/proxy/Clones.sol
@@ -0,0 +1,83 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for
+ * deploying minimal proxy contracts, also known as "clones".
+ *
+ * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies
+ * > a minimal bytecode implementation that delegates all calls to a known, fixed address.
+ *
+ * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`
+ * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the
+ * deterministic method.
+ *
+ * _Available since v3.4._
+ */
+library Clones {
+ /**
+ * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
+ *
+ * This function uses the create opcode, which should never revert.
+ */
+ function clone(address implementation) internal returns (address instance) {
+ assembly {
+ let ptr := mload(0x40)
+ mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
+ mstore(add(ptr, 0x14), shl(0x60, implementation))
+ mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
+ instance := create(0, ptr, 0x37)
+ }
+ require(instance != address(0), "ERC1167: create failed");
+ }
+
+ /**
+ * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
+ *
+ * This function uses the create2 opcode and a `salt` to deterministically deploy
+ * the clone. Using the same `implementation` and `salt` multiple time will revert, since
+ * the clones cannot be deployed twice at the same address.
+ */
+ function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {
+ assembly {
+ let ptr := mload(0x40)
+ mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
+ mstore(add(ptr, 0x14), shl(0x60, implementation))
+ mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
+ instance := create2(0, ptr, 0x37, salt)
+ }
+ require(instance != address(0), "ERC1167: create2 failed");
+ }
+
+ /**
+ * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
+ */
+ function predictDeterministicAddress(
+ address implementation,
+ bytes32 salt,
+ address deployer
+ ) internal pure returns (address predicted) {
+ assembly {
+ let ptr := mload(0x40)
+ mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
+ mstore(add(ptr, 0x14), shl(0x60, implementation))
+ mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)
+ mstore(add(ptr, 0x38), shl(0x60, deployer))
+ mstore(add(ptr, 0x4c), salt)
+ mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))
+ predicted := keccak256(add(ptr, 0x37), 0x55)
+ }
+ }
+
+ /**
+ * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
+ */
+ function predictDeterministicAddress(address implementation, bytes32 salt)
+ internal
+ view
+ returns (address predicted)
+ {
+ return predictDeterministicAddress(implementation, salt, address(this));
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol b/node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol
new file mode 100644
index 0000000..4d893c1
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol
@@ -0,0 +1,32 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../Proxy.sol";
+import "./ERC1967Upgrade.sol";
+
+/**
+ * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an
+ * implementation address that can be changed. This address is stored in storage in the location specified by
+ * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the
+ * implementation behind the proxy.
+ */
+contract ERC1967Proxy is Proxy, ERC1967Upgrade {
+ /**
+ * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.
+ *
+ * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded
+ * function call, and allows initializating the storage of the proxy like a Solidity constructor.
+ */
+ constructor(address _logic, bytes memory _data) payable {
+ assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
+ _upgradeToAndCall(_logic, _data, false);
+ }
+
+ /**
+ * @dev Returns the current implementation address.
+ */
+ function _implementation() internal view virtual override returns (address impl) {
+ return ERC1967Upgrade._getImplementation();
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol b/node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol
new file mode 100644
index 0000000..bab2073
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol
@@ -0,0 +1,193 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.2;
+
+import "../beacon/IBeacon.sol";
+import "../../utils/Address.sol";
+import "../../utils/StorageSlot.sol";
+
+/**
+ * @dev This abstract contract provides getters and event emitting update functions for
+ * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.
+ *
+ * _Available since v4.1._
+ *
+ * @custom:oz-upgrades-unsafe-allow delegatecall
+ */
+abstract contract ERC1967Upgrade {
+ // This is the keccak-256 hash of "eip1967.proxy.rollback" subtracted by 1
+ bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;
+
+ /**
+ * @dev Storage slot with the address of the current implementation.
+ * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
+ * validated in the constructor.
+ */
+ bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
+
+ /**
+ * @dev Emitted when the implementation is upgraded.
+ */
+ event Upgraded(address indexed implementation);
+
+ /**
+ * @dev Returns the current implementation address.
+ */
+ function _getImplementation() internal view returns (address) {
+ return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
+ }
+
+ /**
+ * @dev Stores a new address in the EIP1967 implementation slot.
+ */
+ function _setImplementation(address newImplementation) private {
+ require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
+ StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
+ }
+
+ /**
+ * @dev Perform implementation upgrade
+ *
+ * Emits an {Upgraded} event.
+ */
+ function _upgradeTo(address newImplementation) internal {
+ _setImplementation(newImplementation);
+ emit Upgraded(newImplementation);
+ }
+
+ /**
+ * @dev Perform implementation upgrade with additional setup call.
+ *
+ * Emits an {Upgraded} event.
+ */
+ function _upgradeToAndCall(
+ address newImplementation,
+ bytes memory data,
+ bool forceCall
+ ) internal {
+ _upgradeTo(newImplementation);
+ if (data.length > 0 || forceCall) {
+ Address.functionDelegateCall(newImplementation, data);
+ }
+ }
+
+ /**
+ * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.
+ *
+ * Emits an {Upgraded} event.
+ */
+ function _upgradeToAndCallSecure(
+ address newImplementation,
+ bytes memory data,
+ bool forceCall
+ ) internal {
+ address oldImplementation = _getImplementation();
+
+ // Initial upgrade and setup call
+ _setImplementation(newImplementation);
+ if (data.length > 0 || forceCall) {
+ Address.functionDelegateCall(newImplementation, data);
+ }
+
+ // Perform rollback test if not already in progress
+ StorageSlot.BooleanSlot storage rollbackTesting = StorageSlot.getBooleanSlot(_ROLLBACK_SLOT);
+ if (!rollbackTesting.value) {
+ // Trigger rollback using upgradeTo from the new implementation
+ rollbackTesting.value = true;
+ Address.functionDelegateCall(
+ newImplementation,
+ abi.encodeWithSignature("upgradeTo(address)", oldImplementation)
+ );
+ rollbackTesting.value = false;
+ // Check rollback was effective
+ require(oldImplementation == _getImplementation(), "ERC1967Upgrade: upgrade breaks further upgrades");
+ // Finally reset to the new implementation and log the upgrade
+ _upgradeTo(newImplementation);
+ }
+ }
+
+ /**
+ * @dev Storage slot with the admin of the contract.
+ * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is
+ * validated in the constructor.
+ */
+ bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;
+
+ /**
+ * @dev Emitted when the admin account has changed.
+ */
+ event AdminChanged(address previousAdmin, address newAdmin);
+
+ /**
+ * @dev Returns the current admin.
+ */
+ function _getAdmin() internal view returns (address) {
+ return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;
+ }
+
+ /**
+ * @dev Stores a new address in the EIP1967 admin slot.
+ */
+ function _setAdmin(address newAdmin) private {
+ require(newAdmin != address(0), "ERC1967: new admin is the zero address");
+ StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;
+ }
+
+ /**
+ * @dev Changes the admin of the proxy.
+ *
+ * Emits an {AdminChanged} event.
+ */
+ function _changeAdmin(address newAdmin) internal {
+ emit AdminChanged(_getAdmin(), newAdmin);
+ _setAdmin(newAdmin);
+ }
+
+ /**
+ * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.
+ * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.
+ */
+ bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;
+
+ /**
+ * @dev Emitted when the beacon is upgraded.
+ */
+ event BeaconUpgraded(address indexed beacon);
+
+ /**
+ * @dev Returns the current beacon.
+ */
+ function _getBeacon() internal view returns (address) {
+ return StorageSlot.getAddressSlot(_BEACON_SLOT).value;
+ }
+
+ /**
+ * @dev Stores a new beacon in the EIP1967 beacon slot.
+ */
+ function _setBeacon(address newBeacon) private {
+ require(Address.isContract(newBeacon), "ERC1967: new beacon is not a contract");
+ require(
+ Address.isContract(IBeacon(newBeacon).implementation()),
+ "ERC1967: beacon implementation is not a contract"
+ );
+ StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;
+ }
+
+ /**
+ * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does
+ * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).
+ *
+ * Emits a {BeaconUpgraded} event.
+ */
+ function _upgradeBeaconToAndCall(
+ address newBeacon,
+ bytes memory data,
+ bool forceCall
+ ) internal {
+ _setBeacon(newBeacon);
+ emit BeaconUpgraded(newBeacon);
+ if (data.length > 0 || forceCall) {
+ Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);
+ }
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/proxy/Proxy.sol b/node_modules/@openzeppelin/contracts/proxy/Proxy.sol
new file mode 100644
index 0000000..e2d6bc9
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/proxy/Proxy.sol
@@ -0,0 +1,85 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
+ * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
+ * be specified by overriding the virtual {_implementation} function.
+ *
+ * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
+ * different contract through the {_delegate} function.
+ *
+ * The success and return data of the delegated call will be returned back to the caller of the proxy.
+ */
+abstract contract Proxy {
+ /**
+ * @dev Delegates the current call to `implementation`.
+ *
+ * This function does not return to its internall call site, it will return directly to the external caller.
+ */
+ function _delegate(address implementation) internal virtual {
+ assembly {
+ // Copy msg.data. We take full control of memory in this inline assembly
+ // block because it will not return to Solidity code. We overwrite the
+ // Solidity scratch pad at memory position 0.
+ calldatacopy(0, 0, calldatasize())
+
+ // Call the implementation.
+ // out and outsize are 0 because we don't know the size yet.
+ let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)
+
+ // Copy the returned data.
+ returndatacopy(0, 0, returndatasize())
+
+ switch result
+ // delegatecall returns 0 on error.
+ case 0 {
+ revert(0, returndatasize())
+ }
+ default {
+ return(0, returndatasize())
+ }
+ }
+ }
+
+ /**
+ * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function
+ * and {_fallback} should delegate.
+ */
+ function _implementation() internal view virtual returns (address);
+
+ /**
+ * @dev Delegates the current call to the address returned by `_implementation()`.
+ *
+ * This function does not return to its internall call site, it will return directly to the external caller.
+ */
+ function _fallback() internal virtual {
+ _beforeFallback();
+ _delegate(_implementation());
+ }
+
+ /**
+ * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
+ * function in the contract matches the call data.
+ */
+ fallback() external payable virtual {
+ _fallback();
+ }
+
+ /**
+ * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
+ * is empty.
+ */
+ receive() external payable virtual {
+ _fallback();
+ }
+
+ /**
+ * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
+ * call, or as part of the Solidity `fallback` or `receive` functions.
+ *
+ * If overriden should call `super._beforeFallback()`.
+ */
+ function _beforeFallback() internal virtual {}
+}
diff --git a/node_modules/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol b/node_modules/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol
new file mode 100644
index 0000000..c30eb0f
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol
@@ -0,0 +1,61 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IBeacon.sol";
+import "../Proxy.sol";
+import "../ERC1967/ERC1967Upgrade.sol";
+
+/**
+ * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.
+ *
+ * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't
+ * conflict with the storage layout of the implementation behind the proxy.
+ *
+ * _Available since v3.4._
+ */
+contract BeaconProxy is Proxy, ERC1967Upgrade {
+ /**
+ * @dev Initializes the proxy with `beacon`.
+ *
+ * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This
+ * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity
+ * constructor.
+ *
+ * Requirements:
+ *
+ * - `beacon` must be a contract with the interface {IBeacon}.
+ */
+ constructor(address beacon, bytes memory data) payable {
+ assert(_BEACON_SLOT == bytes32(uint256(keccak256("eip1967.proxy.beacon")) - 1));
+ _upgradeBeaconToAndCall(beacon, data, false);
+ }
+
+ /**
+ * @dev Returns the current beacon address.
+ */
+ function _beacon() internal view virtual returns (address) {
+ return _getBeacon();
+ }
+
+ /**
+ * @dev Returns the current implementation address of the associated beacon.
+ */
+ function _implementation() internal view virtual override returns (address) {
+ return IBeacon(_getBeacon()).implementation();
+ }
+
+ /**
+ * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.
+ *
+ * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.
+ *
+ * Requirements:
+ *
+ * - `beacon` must be a contract.
+ * - The implementation returned by `beacon` must be a contract.
+ */
+ function _setBeacon(address beacon, bytes memory data) internal virtual {
+ _upgradeBeaconToAndCall(beacon, data, false);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol b/node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol
new file mode 100644
index 0000000..ebba392
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev This is the interface that {BeaconProxy} expects of its beacon.
+ */
+interface IBeacon {
+ /**
+ * @dev Must return an address that can be used as a delegate call target.
+ *
+ * {BeaconProxy} will check that this address is a contract.
+ */
+ function implementation() external view returns (address);
+}
diff --git a/node_modules/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol b/node_modules/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol
new file mode 100644
index 0000000..aac40d0
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol
@@ -0,0 +1,64 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IBeacon.sol";
+import "../../access/Ownable.sol";
+import "../../utils/Address.sol";
+
+/**
+ * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their
+ * implementation contract, which is where they will delegate all function calls.
+ *
+ * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.
+ */
+contract UpgradeableBeacon is IBeacon, Ownable {
+ address private _implementation;
+
+ /**
+ * @dev Emitted when the implementation returned by the beacon is changed.
+ */
+ event Upgraded(address indexed implementation);
+
+ /**
+ * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the
+ * beacon.
+ */
+ constructor(address implementation_) {
+ _setImplementation(implementation_);
+ }
+
+ /**
+ * @dev Returns the current implementation address.
+ */
+ function implementation() public view virtual override returns (address) {
+ return _implementation;
+ }
+
+ /**
+ * @dev Upgrades the beacon to a new implementation.
+ *
+ * Emits an {Upgraded} event.
+ *
+ * Requirements:
+ *
+ * - msg.sender must be the owner of the contract.
+ * - `newImplementation` must be a contract.
+ */
+ function upgradeTo(address newImplementation) public virtual onlyOwner {
+ _setImplementation(newImplementation);
+ emit Upgraded(newImplementation);
+ }
+
+ /**
+ * @dev Sets the implementation contract address for this beacon
+ *
+ * Requirements:
+ *
+ * - `newImplementation` must be a contract.
+ */
+ function _setImplementation(address newImplementation) private {
+ require(Address.isContract(newImplementation), "UpgradeableBeacon: implementation is not a contract");
+ _implementation = newImplementation;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol b/node_modules/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol
new file mode 100644
index 0000000..a98a831
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol
@@ -0,0 +1,80 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./TransparentUpgradeableProxy.sol";
+import "../../access/Ownable.sol";
+
+/**
+ * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an
+ * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.
+ */
+contract ProxyAdmin is Ownable {
+ /**
+ * @dev Returns the current implementation of `proxy`.
+ *
+ * Requirements:
+ *
+ * - This contract must be the admin of `proxy`.
+ */
+ function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {
+ // We need to manually run the static call since the getter cannot be flagged as view
+ // bytes4(keccak256("implementation()")) == 0x5c60da1b
+ (bool success, bytes memory returndata) = address(proxy).staticcall(hex"5c60da1b");
+ require(success);
+ return abi.decode(returndata, (address));
+ }
+
+ /**
+ * @dev Returns the current admin of `proxy`.
+ *
+ * Requirements:
+ *
+ * - This contract must be the admin of `proxy`.
+ */
+ function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {
+ // We need to manually run the static call since the getter cannot be flagged as view
+ // bytes4(keccak256("admin()")) == 0xf851a440
+ (bool success, bytes memory returndata) = address(proxy).staticcall(hex"f851a440");
+ require(success);
+ return abi.decode(returndata, (address));
+ }
+
+ /**
+ * @dev Changes the admin of `proxy` to `newAdmin`.
+ *
+ * Requirements:
+ *
+ * - This contract must be the current admin of `proxy`.
+ */
+ function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {
+ proxy.changeAdmin(newAdmin);
+ }
+
+ /**
+ * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.
+ *
+ * Requirements:
+ *
+ * - This contract must be the admin of `proxy`.
+ */
+ function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {
+ proxy.upgradeTo(implementation);
+ }
+
+ /**
+ * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See
+ * {TransparentUpgradeableProxy-upgradeToAndCall}.
+ *
+ * Requirements:
+ *
+ * - This contract must be the admin of `proxy`.
+ */
+ function upgradeAndCall(
+ TransparentUpgradeableProxy proxy,
+ address implementation,
+ bytes memory data
+ ) public payable virtual onlyOwner {
+ proxy.upgradeToAndCall{value: msg.value}(implementation, data);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol b/node_modules/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol
new file mode 100644
index 0000000..c8a61ee
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC1967/ERC1967Proxy.sol";
+
+/**
+ * @dev This contract implements a proxy that is upgradeable by an admin.
+ *
+ * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector
+ * clashing], which can potentially be used in an attack, this contract uses the
+ * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two
+ * things that go hand in hand:
+ *
+ * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if
+ * that call matches one of the admin functions exposed by the proxy itself.
+ * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the
+ * implementation. If the admin tries to call a function on the implementation it will fail with an error that says
+ * "admin cannot fallback to proxy target".
+ *
+ * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing
+ * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due
+ * to sudden errors when trying to call a function from the proxy implementation.
+ *
+ * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,
+ * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.
+ */
+contract TransparentUpgradeableProxy is ERC1967Proxy {
+ /**
+ * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and
+ * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.
+ */
+ constructor(
+ address _logic,
+ address admin_,
+ bytes memory _data
+ ) payable ERC1967Proxy(_logic, _data) {
+ assert(_ADMIN_SLOT == bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1));
+ _changeAdmin(admin_);
+ }
+
+ /**
+ * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.
+ */
+ modifier ifAdmin() {
+ if (msg.sender == _getAdmin()) {
+ _;
+ } else {
+ _fallback();
+ }
+ }
+
+ /**
+ * @dev Returns the current admin.
+ *
+ * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.
+ *
+ * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
+ * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
+ * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`
+ */
+ function admin() external ifAdmin returns (address admin_) {
+ admin_ = _getAdmin();
+ }
+
+ /**
+ * @dev Returns the current implementation.
+ *
+ * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.
+ *
+ * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
+ * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
+ * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`
+ */
+ function implementation() external ifAdmin returns (address implementation_) {
+ implementation_ = _implementation();
+ }
+
+ /**
+ * @dev Changes the admin of the proxy.
+ *
+ * Emits an {AdminChanged} event.
+ *
+ * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.
+ */
+ function changeAdmin(address newAdmin) external virtual ifAdmin {
+ _changeAdmin(newAdmin);
+ }
+
+ /**
+ * @dev Upgrade the implementation of the proxy.
+ *
+ * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.
+ */
+ function upgradeTo(address newImplementation) external ifAdmin {
+ _upgradeToAndCall(newImplementation, bytes(""), false);
+ }
+
+ /**
+ * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified
+ * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the
+ * proxied contract.
+ *
+ * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.
+ */
+ function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {
+ _upgradeToAndCall(newImplementation, data, true);
+ }
+
+ /**
+ * @dev Returns the current admin.
+ */
+ function _admin() internal view virtual returns (address) {
+ return _getAdmin();
+ }
+
+ /**
+ * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.
+ */
+ function _beforeFallback() internal virtual override {
+ require(msg.sender != _getAdmin(), "TransparentUpgradeableProxy: admin cannot fallback to proxy target");
+ super._beforeFallback();
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol b/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol
new file mode 100644
index 0000000..7bd696b
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol
@@ -0,0 +1,46 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
+ * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an
+ * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
+ * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
+ *
+ * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
+ * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
+ *
+ * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
+ * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
+ */
+abstract contract Initializable {
+ /**
+ * @dev Indicates that the contract has been initialized.
+ */
+ bool private _initialized;
+
+ /**
+ * @dev Indicates that the contract is in the process of being initialized.
+ */
+ bool private _initializing;
+
+ /**
+ * @dev Modifier to protect an initializer function from being invoked twice.
+ */
+ modifier initializer() {
+ require(_initializing || !_initialized, "Initializable: contract is already initialized");
+
+ bool isTopLevelCall = !_initializing;
+ if (isTopLevelCall) {
+ _initializing = true;
+ _initialized = true;
+ }
+
+ _;
+
+ if (isTopLevelCall) {
+ _initializing = false;
+ }
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol b/node_modules/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol
new file mode 100644
index 0000000..eeb5289
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol
@@ -0,0 +1,56 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC1967/ERC1967Upgrade.sol";
+
+/**
+ * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an
+ * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.
+ *
+ * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is
+ * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing
+ * `UUPSUpgradeable` with a custom implementation of upgrades.
+ *
+ * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.
+ *
+ * _Available since v4.1._
+ */
+abstract contract UUPSUpgradeable is ERC1967Upgrade {
+ /**
+ * @dev Upgrade the implementation of the proxy to `newImplementation`.
+ *
+ * Calls {_authorizeUpgrade}.
+ *
+ * Emits an {Upgraded} event.
+ */
+ function upgradeTo(address newImplementation) external virtual {
+ _authorizeUpgrade(newImplementation);
+ _upgradeToAndCallSecure(newImplementation, bytes(""), false);
+ }
+
+ /**
+ * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call
+ * encoded in `data`.
+ *
+ * Calls {_authorizeUpgrade}.
+ *
+ * Emits an {Upgraded} event.
+ */
+ function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual {
+ _authorizeUpgrade(newImplementation);
+ _upgradeToAndCallSecure(newImplementation, data, true);
+ }
+
+ /**
+ * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by
+ * {upgradeTo} and {upgradeToAndCall}.
+ *
+ * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.
+ *
+ * ```solidity
+ * function _authorizeUpgrade(address) internal override onlyOwner {}
+ * ```
+ */
+ function _authorizeUpgrade(address newImplementation) internal virtual;
+}
diff --git a/node_modules/@openzeppelin/contracts/security/Pausable.sol b/node_modules/@openzeppelin/contracts/security/Pausable.sol
new file mode 100644
index 0000000..3c943ce
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/security/Pausable.sol
@@ -0,0 +1,90 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../utils/Context.sol";
+
+/**
+ * @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());
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/security/PullPayment.sol b/node_modules/@openzeppelin/contracts/security/PullPayment.sol
new file mode 100644
index 0000000..dad32f0
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/security/PullPayment.sol
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../utils/escrow/Escrow.sol";
+
+/**
+ * @dev Simple implementation of a
+ * https://consensys.github.io/smart-contract-best-practices/recommendations/#favor-pull-over-push-for-external-calls[pull-payment]
+ * strategy, where the paying contract doesn't interact directly with the
+ * receiver account, which must withdraw its payments itself.
+ *
+ * Pull-payments are often considered the best practice when it comes to sending
+ * Ether, security-wise. It prevents recipients from blocking execution, and
+ * eliminates reentrancy concerns.
+ *
+ * TIP: If you would like to learn more about reentrancy and alternative ways
+ * to protect against it, check out our blog post
+ * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
+ *
+ * To use, derive from the `PullPayment` contract, and use {_asyncTransfer}
+ * instead of Solidity's `transfer` function. Payees can query their due
+ * payments with {payments}, and retrieve them with {withdrawPayments}.
+ */
+abstract contract PullPayment {
+ Escrow private immutable _escrow;
+
+ constructor() {
+ _escrow = new Escrow();
+ }
+
+ /**
+ * @dev Withdraw accumulated payments, forwarding all gas to the recipient.
+ *
+ * Note that _any_ account can call this function, not just the `payee`.
+ * This means that contracts unaware of the `PullPayment` protocol can still
+ * receive funds this way, by having a separate account call
+ * {withdrawPayments}.
+ *
+ * WARNING: Forwarding all gas opens the door to reentrancy vulnerabilities.
+ * Make sure you trust the recipient, or are either following the
+ * checks-effects-interactions pattern or using {ReentrancyGuard}.
+ *
+ * @param payee Whose payments will be withdrawn.
+ */
+ function withdrawPayments(address payable payee) public virtual {
+ _escrow.withdraw(payee);
+ }
+
+ /**
+ * @dev Returns the payments owed to an address.
+ * @param dest The creditor's address.
+ */
+ function payments(address dest) public view returns (uint256) {
+ return _escrow.depositsOf(dest);
+ }
+
+ /**
+ * @dev Called by the payer to store the sent amount as credit to be pulled.
+ * Funds sent in this way are stored in an intermediate {Escrow} contract, so
+ * there is no danger of them being spent before withdrawal.
+ *
+ * @param dest The destination address of the funds.
+ * @param amount The amount to transfer.
+ */
+ function _asyncTransfer(address dest, uint256 amount) internal virtual {
+ _escrow.deposit{value: amount}(dest);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol b/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol
new file mode 100644
index 0000000..067a2c9
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol
@@ -0,0 +1,62 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Contract module that helps prevent reentrant calls to a function.
+ *
+ * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
+ * available, which can be applied to functions to make sure there are no nested
+ * (reentrant) calls to them.
+ *
+ * Note that because there is a single `nonReentrant` guard, functions marked as
+ * `nonReentrant` may not call one another. This can be worked around by making
+ * those functions `private`, and then adding `external` `nonReentrant` entry
+ * points to them.
+ *
+ * TIP: If you would like to learn more about reentrancy and alternative ways
+ * to protect against it, check out our blog post
+ * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
+ */
+abstract contract ReentrancyGuard {
+ // Booleans are more expensive than uint256 or any type that takes up a full
+ // word because each write operation emits an extra SLOAD to first read the
+ // slot's contents, replace the bits taken up by the boolean, and then write
+ // back. This is the compiler's defense against contract upgrades and
+ // pointer aliasing, and it cannot be disabled.
+
+ // The values being non-zero value makes deployment a bit more expensive,
+ // but in exchange the refund on every call to nonReentrant will be lower in
+ // amount. Since refunds are capped to a percentage of the total
+ // transaction's gas, it is best to keep them low in cases like this one, to
+ // increase the likelihood of the full refund coming into effect.
+ uint256 private constant _NOT_ENTERED = 1;
+ uint256 private constant _ENTERED = 2;
+
+ uint256 private _status;
+
+ constructor() {
+ _status = _NOT_ENTERED;
+ }
+
+ /**
+ * @dev Prevents a contract from calling itself, directly or indirectly.
+ * Calling a `nonReentrant` function from another `nonReentrant`
+ * function is not supported. It is possible to prevent this from happening
+ * by making the `nonReentrant` function external, and make it call a
+ * `private` function that does the actual work.
+ */
+ modifier nonReentrant() {
+ // On the first call to nonReentrant, _notEntered will be true
+ require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
+
+ // Any calls to nonReentrant after this point will fail
+ _status = _ENTERED;
+
+ _;
+
+ // By storing the original value once again, a refund is triggered (see
+ // https://eips.ethereum.org/EIPS/eip-2200)
+ _status = _NOT_ENTERED;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC1155/ERC1155.sol b/node_modules/@openzeppelin/contracts/token/ERC1155/ERC1155.sol
new file mode 100644
index 0000000..634f389
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC1155/ERC1155.sol
@@ -0,0 +1,451 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IERC1155.sol";
+import "./IERC1155Receiver.sol";
+import "./extensions/IERC1155MetadataURI.sol";
+import "../../utils/Address.sol";
+import "../../utils/Context.sol";
+import "../../utils/introspection/ERC165.sol";
+
+/**
+ * @dev Implementation of the basic standard multi-token.
+ * See https://eips.ethereum.org/EIPS/eip-1155
+ * Originally based on code by Enjin: https://github.com/enjin/erc-1155
+ *
+ * _Available since v3.1._
+ */
+contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
+ using Address for address;
+
+ // Mapping from token ID to account balances
+ mapping(uint256 => mapping(address => uint256)) private _balances;
+
+ // Mapping from account to operator approvals
+ mapping(address => mapping(address => bool)) private _operatorApprovals;
+
+ // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
+ string private _uri;
+
+ /**
+ * @dev See {_setURI}.
+ */
+ constructor(string memory uri_) {
+ _setURI(uri_);
+ }
+
+ /**
+ * @dev See {IERC165-supportsInterface}.
+ */
+ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
+ return
+ interfaceId == type(IERC1155).interfaceId ||
+ interfaceId == type(IERC1155MetadataURI).interfaceId ||
+ super.supportsInterface(interfaceId);
+ }
+
+ /**
+ * @dev See {IERC1155MetadataURI-uri}.
+ *
+ * This implementation returns the same URI for *all* token types. It relies
+ * on the token type ID substitution mechanism
+ * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
+ *
+ * Clients calling this function must replace the `\{id\}` substring with the
+ * actual token type ID.
+ */
+ function uri(uint256) public view virtual override returns (string memory) {
+ return _uri;
+ }
+
+ /**
+ * @dev See {IERC1155-balanceOf}.
+ *
+ * Requirements:
+ *
+ * - `account` cannot be the zero address.
+ */
+ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
+ require(account != address(0), "ERC1155: balance query for the zero address");
+ return _balances[id][account];
+ }
+
+ /**
+ * @dev See {IERC1155-balanceOfBatch}.
+ *
+ * Requirements:
+ *
+ * - `accounts` and `ids` must have the same length.
+ */
+ function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
+ public
+ view
+ virtual
+ override
+ returns (uint256[] memory)
+ {
+ require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");
+
+ uint256[] memory batchBalances = new uint256[](accounts.length);
+
+ for (uint256 i = 0; i < accounts.length; ++i) {
+ batchBalances[i] = balanceOf(accounts[i], ids[i]);
+ }
+
+ return batchBalances;
+ }
+
+ /**
+ * @dev See {IERC1155-setApprovalForAll}.
+ */
+ function setApprovalForAll(address operator, bool approved) public virtual override {
+ require(_msgSender() != operator, "ERC1155: setting approval status for self");
+
+ _operatorApprovals[_msgSender()][operator] = approved;
+ emit ApprovalForAll(_msgSender(), operator, approved);
+ }
+
+ /**
+ * @dev See {IERC1155-isApprovedForAll}.
+ */
+ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
+ return _operatorApprovals[account][operator];
+ }
+
+ /**
+ * @dev See {IERC1155-safeTransferFrom}.
+ */
+ function safeTransferFrom(
+ address from,
+ address to,
+ uint256 id,
+ uint256 amount,
+ bytes memory data
+ ) public virtual override {
+ require(
+ from == _msgSender() || isApprovedForAll(from, _msgSender()),
+ "ERC1155: caller is not owner nor approved"
+ );
+ _safeTransferFrom(from, to, id, amount, data);
+ }
+
+ /**
+ * @dev See {IERC1155-safeBatchTransferFrom}.
+ */
+ function safeBatchTransferFrom(
+ address from,
+ address to,
+ uint256[] memory ids,
+ uint256[] memory amounts,
+ bytes memory data
+ ) public virtual override {
+ require(
+ from == _msgSender() || isApprovedForAll(from, _msgSender()),
+ "ERC1155: transfer caller is not owner nor approved"
+ );
+ _safeBatchTransferFrom(from, to, ids, amounts, data);
+ }
+
+ /**
+ * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
+ *
+ * Emits a {TransferSingle} event.
+ *
+ * Requirements:
+ *
+ * - `to` cannot be the zero address.
+ * - `from` must have a balance of tokens of type `id` of at least `amount`.
+ * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
+ * acceptance magic value.
+ */
+ function _safeTransferFrom(
+ address from,
+ address to,
+ uint256 id,
+ uint256 amount,
+ bytes memory data
+ ) internal virtual {
+ require(to != address(0), "ERC1155: transfer to the zero address");
+
+ address operator = _msgSender();
+
+ _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);
+
+ uint256 fromBalance = _balances[id][from];
+ require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
+ unchecked {
+ _balances[id][from] = fromBalance - amount;
+ }
+ _balances[id][to] += amount;
+
+ emit TransferSingle(operator, from, to, id, amount);
+
+ _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
+ }
+
+ /**
+ * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
+ *
+ * Emits a {TransferBatch} event.
+ *
+ * Requirements:
+ *
+ * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
+ * acceptance magic value.
+ */
+ function _safeBatchTransferFrom(
+ address from,
+ address to,
+ uint256[] memory ids,
+ uint256[] memory amounts,
+ bytes memory data
+ ) internal virtual {
+ require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
+ require(to != address(0), "ERC1155: transfer to the zero address");
+
+ address operator = _msgSender();
+
+ _beforeTokenTransfer(operator, from, to, ids, amounts, data);
+
+ for (uint256 i = 0; i < ids.length; ++i) {
+ uint256 id = ids[i];
+ uint256 amount = amounts[i];
+
+ uint256 fromBalance = _balances[id][from];
+ require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
+ unchecked {
+ _balances[id][from] = fromBalance - amount;
+ }
+ _balances[id][to] += amount;
+ }
+
+ emit TransferBatch(operator, from, to, ids, amounts);
+
+ _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
+ }
+
+ /**
+ * @dev Sets a new URI for all token types, by relying on the token type ID
+ * substitution mechanism
+ * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
+ *
+ * By this mechanism, any occurrence of the `\{id\}` substring in either the
+ * URI or any of the amounts in the JSON file at said URI will be replaced by
+ * clients with the token type ID.
+ *
+ * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
+ * interpreted by clients as
+ * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
+ * for token type ID 0x4cce0.
+ *
+ * See {uri}.
+ *
+ * Because these URIs cannot be meaningfully represented by the {URI} event,
+ * this function emits no events.
+ */
+ function _setURI(string memory newuri) internal virtual {
+ _uri = newuri;
+ }
+
+ /**
+ * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.
+ *
+ * Emits a {TransferSingle} event.
+ *
+ * Requirements:
+ *
+ * - `account` cannot be the zero address.
+ * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
+ * acceptance magic value.
+ */
+ function _mint(
+ address account,
+ uint256 id,
+ uint256 amount,
+ bytes memory data
+ ) internal virtual {
+ require(account != address(0), "ERC1155: mint to the zero address");
+
+ address operator = _msgSender();
+
+ _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);
+
+ _balances[id][account] += amount;
+ emit TransferSingle(operator, address(0), account, id, amount);
+
+ _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);
+ }
+
+ /**
+ * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
+ *
+ * Requirements:
+ *
+ * - `ids` and `amounts` must have the same length.
+ * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
+ * acceptance magic value.
+ */
+ function _mintBatch(
+ address to,
+ uint256[] memory ids,
+ uint256[] memory amounts,
+ bytes memory data
+ ) internal virtual {
+ require(to != address(0), "ERC1155: mint to the zero address");
+ require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
+
+ address operator = _msgSender();
+
+ _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);
+
+ for (uint256 i = 0; i < ids.length; i++) {
+ _balances[ids[i]][to] += amounts[i];
+ }
+
+ emit TransferBatch(operator, address(0), to, ids, amounts);
+
+ _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
+ }
+
+ /**
+ * @dev Destroys `amount` tokens of token type `id` from `account`
+ *
+ * Requirements:
+ *
+ * - `account` cannot be the zero address.
+ * - `account` must have at least `amount` tokens of token type `id`.
+ */
+ function _burn(
+ address account,
+ uint256 id,
+ uint256 amount
+ ) internal virtual {
+ require(account != address(0), "ERC1155: burn from the zero address");
+
+ address operator = _msgSender();
+
+ _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");
+
+ uint256 accountBalance = _balances[id][account];
+ require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
+ unchecked {
+ _balances[id][account] = accountBalance - amount;
+ }
+
+ emit TransferSingle(operator, account, address(0), id, amount);
+ }
+
+ /**
+ * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
+ *
+ * Requirements:
+ *
+ * - `ids` and `amounts` must have the same length.
+ */
+ function _burnBatch(
+ address account,
+ uint256[] memory ids,
+ uint256[] memory amounts
+ ) internal virtual {
+ require(account != address(0), "ERC1155: burn from the zero address");
+ require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
+
+ address operator = _msgSender();
+
+ _beforeTokenTransfer(operator, account, address(0), ids, amounts, "");
+
+ for (uint256 i = 0; i < ids.length; i++) {
+ uint256 id = ids[i];
+ uint256 amount = amounts[i];
+
+ uint256 accountBalance = _balances[id][account];
+ require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
+ unchecked {
+ _balances[id][account] = accountBalance - amount;
+ }
+ }
+
+ emit TransferBatch(operator, account, address(0), ids, amounts);
+ }
+
+ /**
+ * @dev Hook that is called before any token transfer. This includes minting
+ * and burning, as well as batched variants.
+ *
+ * The same hook is called on both single and batched variants. For single
+ * transfers, the length of the `id` and `amount` arrays will be 1.
+ *
+ * Calling conditions (for each `id` and `amount` pair):
+ *
+ * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
+ * of token type `id` will be transferred to `to`.
+ * - When `from` is zero, `amount` tokens of token type `id` will be minted
+ * for `to`.
+ * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
+ * will be burned.
+ * - `from` and `to` are never both zero.
+ * - `ids` and `amounts` have the same, non-zero length.
+ *
+ * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
+ */
+ function _beforeTokenTransfer(
+ address operator,
+ address from,
+ address to,
+ uint256[] memory ids,
+ uint256[] memory amounts,
+ bytes memory data
+ ) internal virtual {}
+
+ function _doSafeTransferAcceptanceCheck(
+ address operator,
+ address from,
+ address to,
+ uint256 id,
+ uint256 amount,
+ bytes memory data
+ ) private {
+ if (to.isContract()) {
+ try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
+ if (response != IERC1155Receiver.onERC1155Received.selector) {
+ revert("ERC1155: ERC1155Receiver rejected tokens");
+ }
+ } catch Error(string memory reason) {
+ revert(reason);
+ } catch {
+ revert("ERC1155: transfer to non ERC1155Receiver implementer");
+ }
+ }
+ }
+
+ function _doSafeBatchTransferAcceptanceCheck(
+ address operator,
+ address from,
+ address to,
+ uint256[] memory ids,
+ uint256[] memory amounts,
+ bytes memory data
+ ) private {
+ if (to.isContract()) {
+ try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
+ bytes4 response
+ ) {
+ if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
+ revert("ERC1155: ERC1155Receiver rejected tokens");
+ }
+ } catch Error(string memory reason) {
+ revert(reason);
+ } catch {
+ revert("ERC1155: transfer to non ERC1155Receiver implementer");
+ }
+ }
+ }
+
+ function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
+ uint256[] memory array = new uint256[](1);
+ array[0] = element;
+
+ return array;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC1155/IERC1155.sol b/node_modules/@openzeppelin/contracts/token/ERC1155/IERC1155.sol
new file mode 100644
index 0000000..39abed8
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC1155/IERC1155.sol
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../../utils/introspection/IERC165.sol";
+
+/**
+ * @dev Required interface of an ERC1155 compliant contract, as defined in the
+ * https://eips.ethereum.org/EIPS/eip-1155[EIP].
+ *
+ * _Available since v3.1._
+ */
+interface IERC1155 is IERC165 {
+ /**
+ * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
+ */
+ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
+
+ /**
+ * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
+ * transfers.
+ */
+ event TransferBatch(
+ address indexed operator,
+ address indexed from,
+ address indexed to,
+ uint256[] ids,
+ uint256[] values
+ );
+
+ /**
+ * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
+ * `approved`.
+ */
+ event ApprovalForAll(address indexed account, address indexed operator, bool approved);
+
+ /**
+ * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
+ *
+ * If an {URI} event was emitted for `id`, the standard
+ * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
+ * returned by {IERC1155MetadataURI-uri}.
+ */
+ event URI(string value, uint256 indexed id);
+
+ /**
+ * @dev Returns the amount of tokens of token type `id` owned by `account`.
+ *
+ * Requirements:
+ *
+ * - `account` cannot be the zero address.
+ */
+ function balanceOf(address account, uint256 id) external view returns (uint256);
+
+ /**
+ * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
+ *
+ * Requirements:
+ *
+ * - `accounts` and `ids` must have the same length.
+ */
+ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
+ external
+ view
+ returns (uint256[] memory);
+
+ /**
+ * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
+ *
+ * Emits an {ApprovalForAll} event.
+ *
+ * Requirements:
+ *
+ * - `operator` cannot be the caller.
+ */
+ function setApprovalForAll(address operator, bool approved) external;
+
+ /**
+ * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
+ *
+ * See {setApprovalForAll}.
+ */
+ function isApprovedForAll(address account, address operator) external view returns (bool);
+
+ /**
+ * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
+ *
+ * Emits a {TransferSingle} event.
+ *
+ * Requirements:
+ *
+ * - `to` cannot be the zero address.
+ * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
+ * - `from` must have a balance of tokens of type `id` of at least `amount`.
+ * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
+ * acceptance magic value.
+ */
+ function safeTransferFrom(
+ address from,
+ address to,
+ uint256 id,
+ uint256 amount,
+ bytes calldata data
+ ) external;
+
+ /**
+ * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
+ *
+ * Emits a {TransferBatch} event.
+ *
+ * Requirements:
+ *
+ * - `ids` and `amounts` must have the same length.
+ * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
+ * acceptance magic value.
+ */
+ function safeBatchTransferFrom(
+ address from,
+ address to,
+ uint256[] calldata ids,
+ uint256[] calldata amounts,
+ bytes calldata data
+ ) external;
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol b/node_modules/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol
new file mode 100644
index 0000000..fe2a059
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol
@@ -0,0 +1,52 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../../utils/introspection/IERC165.sol";
+
+/**
+ * @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);
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol b/node_modules/@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol
new file mode 100644
index 0000000..f69d66e
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol
@@ -0,0 +1,39 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC1155.sol";
+
+/**
+ * @dev Extension of {ERC1155} that allows token holders to destroy both their
+ * own tokens and those that they have been approved to use.
+ *
+ * _Available since v3.1._
+ */
+abstract contract ERC1155Burnable is ERC1155 {
+ function burn(
+ address account,
+ uint256 id,
+ uint256 value
+ ) public virtual {
+ require(
+ account == _msgSender() || isApprovedForAll(account, _msgSender()),
+ "ERC1155: caller is not owner nor approved"
+ );
+
+ _burn(account, id, value);
+ }
+
+ function burnBatch(
+ address account,
+ uint256[] memory ids,
+ uint256[] memory values
+ ) public virtual {
+ require(
+ account == _msgSender() || isApprovedForAll(account, _msgSender()),
+ "ERC1155: caller is not owner nor approved"
+ );
+
+ _burnBatch(account, ids, values);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Pausable.sol b/node_modules/@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Pausable.sol
new file mode 100644
index 0000000..5612351
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Pausable.sol
@@ -0,0 +1,37 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC1155.sol";
+import "../../../security/Pausable.sol";
+
+/**
+ * @dev ERC1155 token with pausable token transfers, minting and burning.
+ *
+ * Useful for scenarios such as preventing trades until the end of an evaluation
+ * period, or having an emergency switch for freezing all token transfers in the
+ * event of a large bug.
+ *
+ * _Available since v3.1._
+ */
+abstract contract ERC1155Pausable is ERC1155, Pausable {
+ /**
+ * @dev See {ERC1155-_beforeTokenTransfer}.
+ *
+ * Requirements:
+ *
+ * - the contract must not be paused.
+ */
+ function _beforeTokenTransfer(
+ address operator,
+ address from,
+ address to,
+ uint256[] memory ids,
+ uint256[] memory amounts,
+ bytes memory data
+ ) internal virtual override {
+ super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
+
+ require(!paused(), "ERC1155Pausable: token transfer while paused");
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol b/node_modules/@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol
new file mode 100644
index 0000000..2f68388
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol
@@ -0,0 +1,85 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC1155.sol";
+
+/**
+ * @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 weither 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-_mint}.
+ */
+ function _mint(
+ address account,
+ uint256 id,
+ uint256 amount,
+ bytes memory data
+ ) internal virtual override {
+ super._mint(account, id, amount, data);
+ _totalSupply[id] += amount;
+ }
+
+ /**
+ * @dev See {ERC1155-_mintBatch}.
+ */
+ function _mintBatch(
+ address to,
+ uint256[] memory ids,
+ uint256[] memory amounts,
+ bytes memory data
+ ) internal virtual override {
+ super._mintBatch(to, ids, amounts, data);
+ for (uint256 i = 0; i < ids.length; ++i) {
+ _totalSupply[ids[i]] += amounts[i];
+ }
+ }
+
+ /**
+ * @dev See {ERC1155-_burn}.
+ */
+ function _burn(
+ address account,
+ uint256 id,
+ uint256 amount
+ ) internal virtual override {
+ super._burn(account, id, amount);
+ _totalSupply[id] -= amount;
+ }
+
+ /**
+ * @dev See {ERC1155-_burnBatch}.
+ */
+ function _burnBatch(
+ address account,
+ uint256[] memory ids,
+ uint256[] memory amounts
+ ) internal virtual override {
+ super._burnBatch(account, ids, amounts);
+ for (uint256 i = 0; i < ids.length; ++i) {
+ _totalSupply[ids[i]] -= amounts[i];
+ }
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol b/node_modules/@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol
new file mode 100644
index 0000000..df55d97
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../IERC1155.sol";
+
+/**
+ * @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);
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC1155/presets/ERC1155PresetMinterPauser.sol b/node_modules/@openzeppelin/contracts/token/ERC1155/presets/ERC1155PresetMinterPauser.sol
new file mode 100644
index 0000000..9238e6a
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC1155/presets/ERC1155PresetMinterPauser.sol
@@ -0,0 +1,125 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC1155.sol";
+import "../extensions/ERC1155Burnable.sol";
+import "../extensions/ERC1155Pausable.sol";
+import "../../../access/AccessControlEnumerable.sol";
+import "../../../utils/Context.sol";
+
+/**
+ * @dev {ERC1155} token, including:
+ *
+ * - ability for holders to burn (destroy) their tokens
+ * - a minter role that allows for token minting (creation)
+ * - a pauser role that allows to stop all token transfers
+ *
+ * This contract uses {AccessControl} to lock permissioned functions using the
+ * different roles - head to its documentation for details.
+ *
+ * The account that deploys the contract will be granted the minter and pauser
+ * roles, as well as the default admin role, which will let it grant both minter
+ * and pauser roles to other accounts.
+ */
+contract ERC1155PresetMinterPauser is Context, AccessControlEnumerable, ERC1155Burnable, ERC1155Pausable {
+ bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
+ bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
+
+ /**
+ * @dev Grants `DEFAULT_ADMIN_ROLE`, `MINTER_ROLE`, and `PAUSER_ROLE` to the account that
+ * deploys the contract.
+ */
+ constructor(string memory uri) ERC1155(uri) {
+ _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
+
+ _setupRole(MINTER_ROLE, _msgSender());
+ _setupRole(PAUSER_ROLE, _msgSender());
+ }
+
+ /**
+ * @dev Creates `amount` new tokens for `to`, of token type `id`.
+ *
+ * See {ERC1155-_mint}.
+ *
+ * Requirements:
+ *
+ * - the caller must have the `MINTER_ROLE`.
+ */
+ function mint(
+ address to,
+ uint256 id,
+ uint256 amount,
+ bytes memory data
+ ) public virtual {
+ require(hasRole(MINTER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have minter role to mint");
+
+ _mint(to, id, amount, data);
+ }
+
+ /**
+ * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] variant of {mint}.
+ */
+ function mintBatch(
+ address to,
+ uint256[] memory ids,
+ uint256[] memory amounts,
+ bytes memory data
+ ) public virtual {
+ require(hasRole(MINTER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have minter role to mint");
+
+ _mintBatch(to, ids, amounts, data);
+ }
+
+ /**
+ * @dev Pauses all token transfers.
+ *
+ * See {ERC1155Pausable} and {Pausable-_pause}.
+ *
+ * Requirements:
+ *
+ * - the caller must have the `PAUSER_ROLE`.
+ */
+ function pause() public virtual {
+ require(hasRole(PAUSER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have pauser role to pause");
+ _pause();
+ }
+
+ /**
+ * @dev Unpauses all token transfers.
+ *
+ * See {ERC1155Pausable} and {Pausable-_unpause}.
+ *
+ * Requirements:
+ *
+ * - the caller must have the `PAUSER_ROLE`.
+ */
+ function unpause() public virtual {
+ require(hasRole(PAUSER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have pauser role to unpause");
+ _unpause();
+ }
+
+ /**
+ * @dev See {IERC165-supportsInterface}.
+ */
+ function supportsInterface(bytes4 interfaceId)
+ public
+ view
+ virtual
+ override(AccessControlEnumerable, ERC1155)
+ returns (bool)
+ {
+ return super.supportsInterface(interfaceId);
+ }
+
+ function _beforeTokenTransfer(
+ address operator,
+ address from,
+ address to,
+ uint256[] memory ids,
+ uint256[] memory amounts,
+ bytes memory data
+ ) internal virtual override(ERC1155, ERC1155Pausable) {
+ super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol b/node_modules/@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol
new file mode 100644
index 0000000..ccd9e37
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol
@@ -0,0 +1,30 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./ERC1155Receiver.sol";
+
+/**
+ * @dev _Available since v3.1._
+ */
+contract ERC1155Holder is ERC1155Receiver {
+ function onERC1155Received(
+ address,
+ address,
+ uint256,
+ uint256,
+ bytes memory
+ ) public virtual override returns (bytes4) {
+ return this.onERC1155Received.selector;
+ }
+
+ function onERC1155BatchReceived(
+ address,
+ address,
+ uint256[] memory,
+ uint256[] memory,
+ bytes memory
+ ) public virtual override returns (bytes4) {
+ return this.onERC1155BatchReceived.selector;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC1155/utils/ERC1155Receiver.sol b/node_modules/@openzeppelin/contracts/token/ERC1155/utils/ERC1155Receiver.sol
new file mode 100644
index 0000000..22b9e75
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC1155/utils/ERC1155Receiver.sol
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../IERC1155Receiver.sol";
+import "../../../utils/introspection/ERC165.sol";
+
+/**
+ * @dev _Available since v3.1._
+ */
+abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
+ /**
+ * @dev See {IERC165-supportsInterface}.
+ */
+ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
+ return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol b/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol
new file mode 100644
index 0000000..46122eb
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol
@@ -0,0 +1,355 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IERC20.sol";
+import "./extensions/IERC20Metadata.sol";
+import "../../utils/Context.sol";
+
+/**
+ * @dev Implementation of the {IERC20} interface.
+ *
+ * This implementation is agnostic to the way tokens are created. This means
+ * that a supply mechanism has to be added in a derived contract using {_mint}.
+ * For a generic mechanism see {ERC20PresetMinterPauser}.
+ *
+ * TIP: For a detailed writeup see our guide
+ * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
+ * to implement supply mechanisms].
+ *
+ * We have followed general OpenZeppelin Contracts guidelines: functions revert
+ * instead returning `false` on failure. This behavior is nonetheless
+ * conventional and does not conflict with the expectations of ERC20
+ * applications.
+ *
+ * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
+ * This allows applications to reconstruct the allowance for all accounts just
+ * by listening to said events. Other implementations of the EIP may not emit
+ * these events, as it isn't required by the specification.
+ *
+ * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
+ * functions have been added to mitigate the well-known issues around setting
+ * allowances. See {IERC20-approve}.
+ */
+contract ERC20 is Context, IERC20, IERC20Metadata {
+ mapping(address => uint256) private _balances;
+
+ mapping(address => mapping(address => uint256)) private _allowances;
+
+ uint256 private _totalSupply;
+
+ string private _name;
+ string private _symbol;
+
+ /**
+ * @dev Sets the values for {name} and {symbol}.
+ *
+ * The default value of {decimals} is 18. To select a different value for
+ * {decimals} you should overload it.
+ *
+ * All two of these values are immutable: they can only be set once during
+ * construction.
+ */
+ constructor(string memory name_, string memory symbol_) {
+ _name = name_;
+ _symbol = symbol_;
+ }
+
+ /**
+ * @dev Returns the name of the token.
+ */
+ function name() public view virtual override returns (string memory) {
+ return _name;
+ }
+
+ /**
+ * @dev Returns the symbol of the token, usually a shorter version of the
+ * name.
+ */
+ function symbol() public view virtual override returns (string memory) {
+ return _symbol;
+ }
+
+ /**
+ * @dev Returns the number of decimals used to get its user representation.
+ * For example, if `decimals` equals `2`, a balance of `505` tokens should
+ * be displayed to a user as `5.05` (`505 / 10 ** 2`).
+ *
+ * Tokens usually opt for a value of 18, imitating the relationship between
+ * Ether and Wei. This is the value {ERC20} uses, unless this function is
+ * overridden;
+ *
+ * NOTE: This information is only used for _display_ purposes: it in
+ * no way affects any of the arithmetic of the contract, including
+ * {IERC20-balanceOf} and {IERC20-transfer}.
+ */
+ function decimals() public view virtual override returns (uint8) {
+ return 18;
+ }
+
+ /**
+ * @dev See {IERC20-totalSupply}.
+ */
+ function totalSupply() public view virtual override returns (uint256) {
+ return _totalSupply;
+ }
+
+ /**
+ * @dev See {IERC20-balanceOf}.
+ */
+ function balanceOf(address account) public view virtual override returns (uint256) {
+ return _balances[account];
+ }
+
+ /**
+ * @dev See {IERC20-transfer}.
+ *
+ * Requirements:
+ *
+ * - `recipient` cannot be the zero address.
+ * - the caller must have a balance of at least `amount`.
+ */
+ function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
+ _transfer(_msgSender(), recipient, amount);
+ return true;
+ }
+
+ /**
+ * @dev See {IERC20-allowance}.
+ */
+ function allowance(address owner, address spender) public view virtual override returns (uint256) {
+ return _allowances[owner][spender];
+ }
+
+ /**
+ * @dev See {IERC20-approve}.
+ *
+ * Requirements:
+ *
+ * - `spender` cannot be the zero address.
+ */
+ function approve(address spender, uint256 amount) public virtual override returns (bool) {
+ _approve(_msgSender(), spender, amount);
+ return true;
+ }
+
+ /**
+ * @dev See {IERC20-transferFrom}.
+ *
+ * Emits an {Approval} event indicating the updated allowance. This is not
+ * required by the EIP. See the note at the beginning of {ERC20}.
+ *
+ * Requirements:
+ *
+ * - `sender` and `recipient` cannot be the zero address.
+ * - `sender` must have a balance of at least `amount`.
+ * - the caller must have allowance for ``sender``'s tokens of at least
+ * `amount`.
+ */
+ function transferFrom(
+ address sender,
+ address recipient,
+ uint256 amount
+ ) public virtual override returns (bool) {
+ _transfer(sender, recipient, amount);
+
+ uint256 currentAllowance = _allowances[sender][_msgSender()];
+ require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
+ unchecked {
+ _approve(sender, _msgSender(), currentAllowance - amount);
+ }
+
+ return true;
+ }
+
+ /**
+ * @dev Atomically increases the allowance granted to `spender` by the caller.
+ *
+ * This is an alternative to {approve} that can be used as a mitigation for
+ * problems described in {IERC20-approve}.
+ *
+ * Emits an {Approval} event indicating the updated allowance.
+ *
+ * Requirements:
+ *
+ * - `spender` cannot be the zero address.
+ */
+ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
+ _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
+ return true;
+ }
+
+ /**
+ * @dev Atomically decreases the allowance granted to `spender` by the caller.
+ *
+ * This is an alternative to {approve} that can be used as a mitigation for
+ * problems described in {IERC20-approve}.
+ *
+ * Emits an {Approval} event indicating the updated allowance.
+ *
+ * Requirements:
+ *
+ * - `spender` cannot be the zero address.
+ * - `spender` must have allowance for the caller of at least
+ * `subtractedValue`.
+ */
+ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
+ uint256 currentAllowance = _allowances[_msgSender()][spender];
+ require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
+ unchecked {
+ _approve(_msgSender(), spender, currentAllowance - subtractedValue);
+ }
+
+ return true;
+ }
+
+ /**
+ * @dev Moves `amount` of tokens from `sender` to `recipient`.
+ *
+ * This internal function is equivalent to {transfer}, and can be used to
+ * e.g. implement automatic token fees, slashing mechanisms, etc.
+ *
+ * Emits a {Transfer} event.
+ *
+ * Requirements:
+ *
+ * - `sender` cannot be the zero address.
+ * - `recipient` cannot be the zero address.
+ * - `sender` must have a balance of at least `amount`.
+ */
+ function _transfer(
+ address sender,
+ address recipient,
+ uint256 amount
+ ) internal virtual {
+ require(sender != address(0), "ERC20: transfer from the zero address");
+ require(recipient != address(0), "ERC20: transfer to the zero address");
+
+ _beforeTokenTransfer(sender, recipient, amount);
+
+ uint256 senderBalance = _balances[sender];
+ require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
+ unchecked {
+ _balances[sender] = senderBalance - amount;
+ }
+ _balances[recipient] += amount;
+
+ emit Transfer(sender, recipient, amount);
+
+ _afterTokenTransfer(sender, recipient, amount);
+ }
+
+ /** @dev Creates `amount` tokens and assigns them to `account`, increasing
+ * the total supply.
+ *
+ * Emits a {Transfer} event with `from` set to the zero address.
+ *
+ * Requirements:
+ *
+ * - `account` cannot be the zero address.
+ */
+ function _mint(address account, uint256 amount) internal virtual {
+ require(account != address(0), "ERC20: mint to the zero address");
+
+ _beforeTokenTransfer(address(0), account, amount);
+
+ _totalSupply += amount;
+ _balances[account] += amount;
+ emit Transfer(address(0), account, amount);
+
+ _afterTokenTransfer(address(0), account, amount);
+ }
+
+ /**
+ * @dev Destroys `amount` tokens from `account`, reducing the
+ * total supply.
+ *
+ * Emits a {Transfer} event with `to` set to the zero address.
+ *
+ * Requirements:
+ *
+ * - `account` cannot be the zero address.
+ * - `account` must have at least `amount` tokens.
+ */
+ function _burn(address account, uint256 amount) internal virtual {
+ require(account != address(0), "ERC20: burn from the zero address");
+
+ _beforeTokenTransfer(account, address(0), amount);
+
+ uint256 accountBalance = _balances[account];
+ require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
+ unchecked {
+ _balances[account] = accountBalance - amount;
+ }
+ _totalSupply -= amount;
+
+ emit Transfer(account, address(0), amount);
+
+ _afterTokenTransfer(account, address(0), amount);
+ }
+
+ /**
+ * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
+ *
+ * This internal function is equivalent to `approve`, and can be used to
+ * e.g. set automatic allowances for certain subsystems, etc.
+ *
+ * Emits an {Approval} event.
+ *
+ * Requirements:
+ *
+ * - `owner` cannot be the zero address.
+ * - `spender` cannot be the zero address.
+ */
+ function _approve(
+ address owner,
+ address spender,
+ uint256 amount
+ ) internal virtual {
+ require(owner != address(0), "ERC20: approve from the zero address");
+ require(spender != address(0), "ERC20: approve to the zero address");
+
+ _allowances[owner][spender] = amount;
+ emit Approval(owner, spender, amount);
+ }
+
+ /**
+ * @dev Hook that is called before any transfer of tokens. This includes
+ * minting and burning.
+ *
+ * Calling conditions:
+ *
+ * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
+ * will be transferred to `to`.
+ * - when `from` is zero, `amount` tokens will be minted for `to`.
+ * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
+ * - `from` and `to` are never both zero.
+ *
+ * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
+ */
+ function _beforeTokenTransfer(
+ address from,
+ address to,
+ uint256 amount
+ ) internal virtual {}
+
+ /**
+ * @dev Hook that is called after any transfer of tokens. This includes
+ * minting and burning.
+ *
+ * Calling conditions:
+ *
+ * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
+ * has been transferred to `to`.
+ * - when `from` is zero, `amount` tokens have been minted for `to`.
+ * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
+ * - `from` and `to` are never both zero.
+ *
+ * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
+ */
+ function _afterTokenTransfer(
+ address from,
+ address to,
+ uint256 amount
+ ) internal virtual {}
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol b/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol
new file mode 100644
index 0000000..08a04ad
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol
@@ -0,0 +1,81 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Interface of the ERC20 standard as defined in the EIP.
+ */
+interface IERC20 {
+ /**
+ * @dev Returns the amount of tokens in existence.
+ */
+ function totalSupply() external view returns (uint256);
+
+ /**
+ * @dev Returns the amount of tokens owned by `account`.
+ */
+ function balanceOf(address account) external view returns (uint256);
+
+ /**
+ * @dev Moves `amount` tokens from the caller's account to `recipient`.
+ *
+ * Returns a boolean value indicating whether the operation succeeded.
+ *
+ * Emits a {Transfer} event.
+ */
+ function transfer(address recipient, uint256 amount) external returns (bool);
+
+ /**
+ * @dev Returns the remaining number of tokens that `spender` will be
+ * allowed to spend on behalf of `owner` through {transferFrom}. This is
+ * zero by default.
+ *
+ * This value changes when {approve} or {transferFrom} are called.
+ */
+ function allowance(address owner, address spender) external view returns (uint256);
+
+ /**
+ * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
+ *
+ * Returns a boolean value indicating whether the operation succeeded.
+ *
+ * IMPORTANT: Beware that changing an allowance with this method brings the risk
+ * that someone may use both the old and the new allowance by unfortunate
+ * transaction ordering. One possible solution to mitigate this race
+ * condition is to first reduce the spender's allowance to 0 and set the
+ * desired value afterwards:
+ * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
+ *
+ * Emits an {Approval} event.
+ */
+ function approve(address spender, uint256 amount) external returns (bool);
+
+ /**
+ * @dev Moves `amount` tokens from `sender` to `recipient` using the
+ * allowance mechanism. `amount` is then deducted from the caller's
+ * allowance.
+ *
+ * Returns a boolean value indicating whether the operation succeeded.
+ *
+ * Emits a {Transfer} event.
+ */
+ function transferFrom(
+ address sender,
+ address recipient,
+ uint256 amount
+ ) external returns (bool);
+
+ /**
+ * @dev Emitted when `value` tokens are moved from one account (`from`) to
+ * another (`to`).
+ *
+ * Note that `value` may be zero.
+ */
+ event Transfer(address indexed from, address indexed to, uint256 value);
+
+ /**
+ * @dev Emitted when the allowance of a `spender` for an `owner` is set by
+ * a call to {approve}. `value` is the new allowance.
+ */
+ event Approval(address indexed owner, address indexed spender, uint256 value);
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol
new file mode 100644
index 0000000..bd48ed3
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol
@@ -0,0 +1,42 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC20.sol";
+import "../../../utils/Context.sol";
+
+/**
+ * @dev Extension of {ERC20} that allows token holders to destroy both their own
+ * tokens and those that they have an allowance for, in a way that can be
+ * recognized off-chain (via event analysis).
+ */
+abstract contract ERC20Burnable is Context, ERC20 {
+ /**
+ * @dev Destroys `amount` tokens from the caller.
+ *
+ * See {ERC20-_burn}.
+ */
+ function burn(uint256 amount) public virtual {
+ _burn(_msgSender(), amount);
+ }
+
+ /**
+ * @dev Destroys `amount` tokens from `account`, deducting from the caller's
+ * allowance.
+ *
+ * See {ERC20-_burn} and {ERC20-allowance}.
+ *
+ * Requirements:
+ *
+ * - the caller must have allowance for ``accounts``'s tokens of at least
+ * `amount`.
+ */
+ function burnFrom(address account, uint256 amount) public virtual {
+ uint256 currentAllowance = allowance(account, _msgSender());
+ require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance");
+ unchecked {
+ _approve(account, _msgSender(), currentAllowance - amount);
+ }
+ _burn(account, amount);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Capped.sol b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Capped.sol
new file mode 100644
index 0000000..c8d8b7f
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Capped.sol
@@ -0,0 +1,36 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC20.sol";
+
+/**
+ * @dev Extension of {ERC20} that adds a cap to the supply of tokens.
+ */
+abstract contract ERC20Capped is ERC20 {
+ uint256 private immutable _cap;
+
+ /**
+ * @dev Sets the value of the `cap`. This value is immutable, it can only be
+ * set once during construction.
+ */
+ constructor(uint256 cap_) {
+ require(cap_ > 0, "ERC20Capped: cap is 0");
+ _cap = cap_;
+ }
+
+ /**
+ * @dev Returns the cap on the token's total supply.
+ */
+ function cap() public view virtual returns (uint256) {
+ return _cap;
+ }
+
+ /**
+ * @dev See {ERC20-_mint}.
+ */
+ function _mint(address account, uint256 amount) internal virtual override {
+ require(ERC20.totalSupply() + amount <= cap(), "ERC20Capped: cap exceeded");
+ super._mint(account, amount);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol
new file mode 100644
index 0000000..e67a1f3
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol
@@ -0,0 +1,76 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../../../interfaces/IERC3156.sol";
+import "../ERC20.sol";
+
+/**
+ * @dev Implementation of the ERC3156 Flash loans extension, as defined in
+ * https://eips.ethereum.org/EIPS/eip-3156[ERC-3156].
+ *
+ * Adds the {flashLoan} method, which provides flash loan support at the token
+ * level. By default there is no fee, but this can be changed by overriding {flashFee}.
+ *
+ * _Available since v4.1._
+ */
+abstract contract ERC20FlashMint is ERC20, IERC3156FlashLender {
+ bytes32 private constant _RETURN_VALUE = keccak256("ERC3156FlashBorrower.onFlashLoan");
+
+ /**
+ * @dev Returns the maximum amount of tokens available for loan.
+ * @param token The address of the token that is requested.
+ * @return The amont of token that can be loaned.
+ */
+ function maxFlashLoan(address token) public view override returns (uint256) {
+ return token == address(this) ? type(uint256).max - ERC20.totalSupply() : 0;
+ }
+
+ /**
+ * @dev Returns the fee applied when doing flash loans. By default this
+ * implementation has 0 fees. This function can be overloaded to make
+ * the flash loan mechanism deflationary.
+ * @param token The token to be flash loaned.
+ * @param amount The amount of tokens to be loaned.
+ * @return The fees applied to the corresponding flash loan.
+ */
+ function flashFee(address token, uint256 amount) public view virtual override returns (uint256) {
+ require(token == address(this), "ERC20FlashMint: wrong token");
+ // silence warning about unused variable without the addition of bytecode.
+ amount;
+ return 0;
+ }
+
+ /**
+ * @dev Performs a flash loan. New tokens are minted and sent to the
+ * `receiver`, who is required to implement the {IERC3156FlashBorrower}
+ * interface. By the end of the flash loan, the receiver is expected to own
+ * amount + fee tokens and have them approved back to the token contract itself so
+ * they can be burned.
+ * @param receiver The receiver of the flash loan. Should implement the
+ * {IERC3156FlashBorrower.onFlashLoan} interface.
+ * @param token The token to be flash loaned. Only `address(this)` is
+ * supported.
+ * @param amount The amount of tokens to be loaned.
+ * @param data An arbitrary datafield that is passed to the receiver.
+ * @return `true` is the flash loan was successful.
+ */
+ function flashLoan(
+ IERC3156FlashBorrower receiver,
+ address token,
+ uint256 amount,
+ bytes calldata data
+ ) public virtual override returns (bool) {
+ uint256 fee = flashFee(token, amount);
+ _mint(address(receiver), amount);
+ require(
+ receiver.onFlashLoan(msg.sender, token, amount, fee, data) == _RETURN_VALUE,
+ "ERC20FlashMint: invalid return value"
+ );
+ uint256 currentAllowance = allowance(address(receiver), address(this));
+ require(currentAllowance >= amount + fee, "ERC20FlashMint: allowance does not allow refund");
+ _approve(address(receiver), address(this), currentAllowance - amount - fee);
+ _burn(address(receiver), amount + fee);
+ return true;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol
new file mode 100644
index 0000000..cba16ed
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol
@@ -0,0 +1,32 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC20.sol";
+import "../../../security/Pausable.sol";
+
+/**
+ * @dev ERC20 token with pausable token transfers, minting and burning.
+ *
+ * Useful for scenarios such as preventing trades until the end of an evaluation
+ * period, or having an emergency switch for freezing all token transfers in the
+ * event of a large bug.
+ */
+abstract contract ERC20Pausable is ERC20, Pausable {
+ /**
+ * @dev See {ERC20-_beforeTokenTransfer}.
+ *
+ * Requirements:
+ *
+ * - the contract must not be paused.
+ */
+ function _beforeTokenTransfer(
+ address from,
+ address to,
+ uint256 amount
+ ) internal virtual override {
+ super._beforeTokenTransfer(from, to, amount);
+
+ require(!paused(), "ERC20Pausable: token transfer while paused");
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Snapshot.sol b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Snapshot.sol
new file mode 100644
index 0000000..9754631
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Snapshot.sol
@@ -0,0 +1,194 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC20.sol";
+import "../../../utils/Arrays.sol";
+import "../../../utils/Counters.sol";
+
+/**
+ * @dev This contract extends an ERC20 token with a snapshot mechanism. When a snapshot is created, the balances and
+ * total supply at the time are recorded for later access.
+ *
+ * This can be used to safely create mechanisms based on token balances such as trustless dividends or weighted voting.
+ * In naive implementations it's possible to perform a "double spend" attack by reusing the same balance from different
+ * accounts. By using snapshots to calculate dividends or voting power, those attacks no longer apply. It can also be
+ * used to create an efficient ERC20 forking mechanism.
+ *
+ * Snapshots are created by the internal {_snapshot} function, which will emit the {Snapshot} event and return a
+ * snapshot id. To get the total supply at the time of a snapshot, call the function {totalSupplyAt} with the snapshot
+ * id. To get the balance of an account at the time of a snapshot, call the {balanceOfAt} function with the snapshot id
+ * and the account address.
+ *
+ * NOTE: Snapshot policy can be customized by overriding the {_getCurrentSnapshotId} method. For example, having it
+ * return `block.number` will trigger the creation of snapshot at the begining of each new block. When overridding this
+ * function, be careful about the monotonicity of its result. Non-monotonic snapshot ids will break the contract.
+ *
+ * Implementing snapshots for every block using this method will incur significant gas costs. For a gas-efficient
+ * alternative consider {ERC20Votes}.
+ *
+ * ==== Gas Costs
+ *
+ * Snapshots are efficient. Snapshot creation is _O(1)_. Retrieval of balances or total supply from a snapshot is _O(log
+ * n)_ in the number of snapshots that have been created, although _n_ for a specific account will generally be much
+ * smaller since identical balances in subsequent snapshots are stored as a single entry.
+ *
+ * There is a constant overhead for normal ERC20 transfers due to the additional snapshot bookkeeping. This overhead is
+ * only significant for the first transfer that immediately follows a snapshot for a particular account. Subsequent
+ * transfers will have normal cost until the next snapshot, and so on.
+ */
+
+abstract contract ERC20Snapshot is ERC20 {
+ // Inspired by Jordi Baylina's MiniMeToken to record historical balances:
+ // https://github.com/Giveth/minimd/blob/ea04d950eea153a04c51fa510b068b9dded390cb/contracts/MiniMeToken.sol
+
+ using Arrays for uint256[];
+ using Counters for Counters.Counter;
+
+ // Snapshotted values have arrays of ids and the value corresponding to that id. These could be an array of a
+ // Snapshot struct, but that would impede usage of functions that work on an array.
+ struct Snapshots {
+ uint256[] ids;
+ uint256[] values;
+ }
+
+ mapping(address => Snapshots) private _accountBalanceSnapshots;
+ Snapshots private _totalSupplySnapshots;
+
+ // Snapshot ids increase monotonically, with the first value being 1. An id of 0 is invalid.
+ Counters.Counter private _currentSnapshotId;
+
+ /**
+ * @dev Emitted by {_snapshot} when a snapshot identified by `id` is created.
+ */
+ event Snapshot(uint256 id);
+
+ /**
+ * @dev Creates a new snapshot and returns its snapshot id.
+ *
+ * Emits a {Snapshot} event that contains the same id.
+ *
+ * {_snapshot} is `internal` and you have to decide how to expose it externally. Its usage may be restricted to a
+ * set of accounts, for example using {AccessControl}, or it may be open to the public.
+ *
+ * [WARNING]
+ * ====
+ * While an open way of calling {_snapshot} is required for certain trust minimization mechanisms such as forking,
+ * you must consider that it can potentially be used by attackers in two ways.
+ *
+ * First, it can be used to increase the cost of retrieval of values from snapshots, although it will grow
+ * logarithmically thus rendering this attack ineffective in the long term. Second, it can be used to target
+ * specific accounts and increase the cost of ERC20 transfers for them, in the ways specified in the Gas Costs
+ * section above.
+ *
+ * We haven't measured the actual numbers; if this is something you're interested in please reach out to us.
+ * ====
+ */
+ function _snapshot() internal virtual returns (uint256) {
+ _currentSnapshotId.increment();
+
+ uint256 currentId = _getCurrentSnapshotId();
+ emit Snapshot(currentId);
+ return currentId;
+ }
+
+ /**
+ * @dev Get the current snapshotId
+ */
+ function _getCurrentSnapshotId() internal view virtual returns (uint256) {
+ return _currentSnapshotId.current();
+ }
+
+ /**
+ * @dev Retrieves the balance of `account` at the time `snapshotId` was created.
+ */
+ function balanceOfAt(address account, uint256 snapshotId) public view virtual returns (uint256) {
+ (bool snapshotted, uint256 value) = _valueAt(snapshotId, _accountBalanceSnapshots[account]);
+
+ return snapshotted ? value : balanceOf(account);
+ }
+
+ /**
+ * @dev Retrieves the total supply at the time `snapshotId` was created.
+ */
+ function totalSupplyAt(uint256 snapshotId) public view virtual returns (uint256) {
+ (bool snapshotted, uint256 value) = _valueAt(snapshotId, _totalSupplySnapshots);
+
+ return snapshotted ? value : totalSupply();
+ }
+
+ // Update balance and/or total supply snapshots before the values are modified. This is implemented
+ // in the _beforeTokenTransfer hook, which is executed for _mint, _burn, and _transfer operations.
+ function _beforeTokenTransfer(
+ address from,
+ address to,
+ uint256 amount
+ ) internal virtual override {
+ super._beforeTokenTransfer(from, to, amount);
+
+ if (from == address(0)) {
+ // mint
+ _updateAccountSnapshot(to);
+ _updateTotalSupplySnapshot();
+ } else if (to == address(0)) {
+ // burn
+ _updateAccountSnapshot(from);
+ _updateTotalSupplySnapshot();
+ } else {
+ // transfer
+ _updateAccountSnapshot(from);
+ _updateAccountSnapshot(to);
+ }
+ }
+
+ function _valueAt(uint256 snapshotId, Snapshots storage snapshots) private view returns (bool, uint256) {
+ require(snapshotId > 0, "ERC20Snapshot: id is 0");
+ require(snapshotId <= _getCurrentSnapshotId(), "ERC20Snapshot: nonexistent id");
+
+ // When a valid snapshot is queried, there are three possibilities:
+ // a) The queried value was not modified after the snapshot was taken. Therefore, a snapshot entry was never
+ // created for this id, and all stored snapshot ids are smaller than the requested one. The value that corresponds
+ // to this id is the current one.
+ // b) The queried value was modified after the snapshot was taken. Therefore, there will be an entry with the
+ // requested id, and its value is the one to return.
+ // c) More snapshots were created after the requested one, and the queried value was later modified. There will be
+ // no entry for the requested id: the value that corresponds to it is that of the smallest snapshot id that is
+ // larger than the requested one.
+ //
+ // In summary, we need to find an element in an array, returning the index of the smallest value that is larger if
+ // it is not found, unless said value doesn't exist (e.g. when all values are smaller). Arrays.findUpperBound does
+ // exactly this.
+
+ uint256 index = snapshots.ids.findUpperBound(snapshotId);
+
+ if (index == snapshots.ids.length) {
+ return (false, 0);
+ } else {
+ return (true, snapshots.values[index]);
+ }
+ }
+
+ function _updateAccountSnapshot(address account) private {
+ _updateSnapshot(_accountBalanceSnapshots[account], balanceOf(account));
+ }
+
+ function _updateTotalSupplySnapshot() private {
+ _updateSnapshot(_totalSupplySnapshots, totalSupply());
+ }
+
+ function _updateSnapshot(Snapshots storage snapshots, uint256 currentValue) private {
+ uint256 currentId = _getCurrentSnapshotId();
+ if (_lastSnapshotId(snapshots.ids) < currentId) {
+ snapshots.ids.push(currentId);
+ snapshots.values.push(currentValue);
+ }
+ }
+
+ function _lastSnapshotId(uint256[] storage ids) private view returns (uint256) {
+ if (ids.length == 0) {
+ return 0;
+ } else {
+ return ids[ids.length - 1];
+ }
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol
new file mode 100644
index 0000000..4df8311
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol
@@ -0,0 +1,259 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./draft-ERC20Permit.sol";
+import "../../../utils/math/Math.sol";
+import "../../../utils/math/SafeCast.sol";
+import "../../../utils/cryptography/ECDSA.sol";
+
+/**
+ * @dev Extension of ERC20 to support Compound-like voting and delegation. This version is more generic than Compound's,
+ * and supports token supply up to 2^224^ - 1, while COMP is limited to 2^96^ - 1.
+ *
+ * NOTE: If exact COMP compatibility is required, use the {ERC20VotesComp} variant of this module.
+ *
+ * This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either
+ * by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting
+ * power can be queried through the public accessors {getVotes} and {getPastVotes}.
+ *
+ * By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it
+ * requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked.
+ * Enabling self-delegation can easily be done by overriding the {delegates} function. Keep in mind however that this
+ * will significantly increase the base gas cost of transfers.
+ *
+ * _Available since v4.2._
+ */
+abstract contract ERC20Votes is ERC20Permit {
+ struct Checkpoint {
+ uint32 fromBlock;
+ uint224 votes;
+ }
+
+ bytes32 private constant _DELEGATION_TYPEHASH =
+ keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");
+
+ mapping(address => address) private _delegates;
+ mapping(address => Checkpoint[]) private _checkpoints;
+ Checkpoint[] private _totalSupplyCheckpoints;
+
+ /**
+ * @dev Emitted when an account changes their delegate.
+ */
+ event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);
+
+ /**
+ * @dev Emitted when a token transfer or delegate change results in changes to an account's voting power.
+ */
+ event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance);
+
+ /**
+ * @dev Get the `pos`-th checkpoint for `account`.
+ */
+ function checkpoints(address account, uint32 pos) public view virtual returns (Checkpoint memory) {
+ return _checkpoints[account][pos];
+ }
+
+ /**
+ * @dev Get number of checkpoints for `account`.
+ */
+ function numCheckpoints(address account) public view virtual returns (uint32) {
+ return SafeCast.toUint32(_checkpoints[account].length);
+ }
+
+ /**
+ * @dev Get the address `account` is currently delegating to.
+ */
+ function delegates(address account) public view virtual returns (address) {
+ return _delegates[account];
+ }
+
+ /**
+ * @dev Gets the current votes balance for `account`
+ */
+ function getVotes(address account) public view returns (uint256) {
+ uint256 pos = _checkpoints[account].length;
+ return pos == 0 ? 0 : _checkpoints[account][pos - 1].votes;
+ }
+
+ /**
+ * @dev Retrieve the number of votes for `account` at the end of `blockNumber`.
+ *
+ * Requirements:
+ *
+ * - `blockNumber` must have been already mined
+ */
+ function getPastVotes(address account, uint256 blockNumber) public view returns (uint256) {
+ require(blockNumber < block.number, "ERC20Votes: block not yet mined");
+ return _checkpointsLookup(_checkpoints[account], blockNumber);
+ }
+
+ /**
+ * @dev Retrieve the `totalSupply` at the end of `blockNumber`. Note, this value is the sum of all balances.
+ * It is but NOT the sum of all the delegated votes!
+ *
+ * Requirements:
+ *
+ * - `blockNumber` must have been already mined
+ */
+ function getPastTotalSupply(uint256 blockNumber) public view returns (uint256) {
+ require(blockNumber < block.number, "ERC20Votes: block not yet mined");
+ return _checkpointsLookup(_totalSupplyCheckpoints, blockNumber);
+ }
+
+ /**
+ * @dev Lookup a value in a list of (sorted) checkpoints.
+ */
+ function _checkpointsLookup(Checkpoint[] storage ckpts, uint256 blockNumber) private view returns (uint256) {
+ // We run a binary search to look for the earliest checkpoint taken after `blockNumber`.
+ //
+ // During the loop, the index of the wanted checkpoint remains in the range [low-1, high).
+ // With each iteration, either `low` or `high` is moved towards the middle of the range to maintain the invariant.
+ // - If the middle checkpoint is after `blockNumber`, we look in [low, mid)
+ // - If the middle checkpoint is before or equal to `blockNumber`, we look in [mid+1, high)
+ // Once we reach a single value (when low == high), we've found the right checkpoint at the index high-1, if not
+ // out of bounds (in which case we're looking too far in the past and the result is 0).
+ // Note that if the latest checkpoint available is exactly for `blockNumber`, we end up with an index that is
+ // past the end of the array, so we technically don't find a checkpoint after `blockNumber`, but it works out
+ // the same.
+ uint256 high = ckpts.length;
+ uint256 low = 0;
+ while (low < high) {
+ uint256 mid = Math.average(low, high);
+ if (ckpts[mid].fromBlock > blockNumber) {
+ high = mid;
+ } else {
+ low = mid + 1;
+ }
+ }
+
+ return high == 0 ? 0 : ckpts[high - 1].votes;
+ }
+
+ /**
+ * @dev Delegate votes from the sender to `delegatee`.
+ */
+ function delegate(address delegatee) public virtual {
+ return _delegate(_msgSender(), delegatee);
+ }
+
+ /**
+ * @dev Delegates votes from signer to `delegatee`
+ */
+ function delegateBySig(
+ address delegatee,
+ uint256 nonce,
+ uint256 expiry,
+ uint8 v,
+ bytes32 r,
+ bytes32 s
+ ) public virtual {
+ require(block.timestamp <= expiry, "ERC20Votes: signature expired");
+ address signer = ECDSA.recover(
+ _hashTypedDataV4(keccak256(abi.encode(_DELEGATION_TYPEHASH, delegatee, nonce, expiry))),
+ v,
+ r,
+ s
+ );
+ require(nonce == _useNonce(signer), "ERC20Votes: invalid nonce");
+ return _delegate(signer, delegatee);
+ }
+
+ /**
+ * @dev Maximum token supply. Defaults to `type(uint224).max` (2^224^ - 1).
+ */
+ function _maxSupply() internal view virtual returns (uint224) {
+ return type(uint224).max;
+ }
+
+ /**
+ * @dev Snapshots the totalSupply after it has been increased.
+ */
+ function _mint(address account, uint256 amount) internal virtual override {
+ super._mint(account, amount);
+ require(totalSupply() <= _maxSupply(), "ERC20Votes: total supply risks overflowing votes");
+
+ _writeCheckpoint(_totalSupplyCheckpoints, _add, amount);
+ }
+
+ /**
+ * @dev Snapshots the totalSupply after it has been decreased.
+ */
+ function _burn(address account, uint256 amount) internal virtual override {
+ super._burn(account, amount);
+
+ _writeCheckpoint(_totalSupplyCheckpoints, _subtract, amount);
+ }
+
+ /**
+ * @dev Move voting power when tokens are transferred.
+ *
+ * Emits a {DelegateVotesChanged} event.
+ */
+ function _afterTokenTransfer(
+ address from,
+ address to,
+ uint256 amount
+ ) internal virtual override {
+ super._afterTokenTransfer(from, to, amount);
+
+ _moveVotingPower(delegates(from), delegates(to), amount);
+ }
+
+ /**
+ * @dev Change delegation for `delegator` to `delegatee`.
+ *
+ * Emits events {DelegateChanged} and {DelegateVotesChanged}.
+ */
+ function _delegate(address delegator, address delegatee) internal virtual {
+ address currentDelegate = delegates(delegator);
+ uint256 delegatorBalance = balanceOf(delegator);
+ _delegates[delegator] = delegatee;
+
+ emit DelegateChanged(delegator, currentDelegate, delegatee);
+
+ _moveVotingPower(currentDelegate, delegatee, delegatorBalance);
+ }
+
+ function _moveVotingPower(
+ address src,
+ address dst,
+ uint256 amount
+ ) private {
+ if (src != dst && amount > 0) {
+ if (src != address(0)) {
+ (uint256 oldWeight, uint256 newWeight) = _writeCheckpoint(_checkpoints[src], _subtract, amount);
+ emit DelegateVotesChanged(src, oldWeight, newWeight);
+ }
+
+ if (dst != address(0)) {
+ (uint256 oldWeight, uint256 newWeight) = _writeCheckpoint(_checkpoints[dst], _add, amount);
+ emit DelegateVotesChanged(dst, oldWeight, newWeight);
+ }
+ }
+ }
+
+ function _writeCheckpoint(
+ Checkpoint[] storage ckpts,
+ function(uint256, uint256) view returns (uint256) op,
+ uint256 delta
+ ) private returns (uint256 oldWeight, uint256 newWeight) {
+ uint256 pos = ckpts.length;
+ oldWeight = pos == 0 ? 0 : ckpts[pos - 1].votes;
+ newWeight = op(oldWeight, delta);
+
+ if (pos > 0 && ckpts[pos - 1].fromBlock == block.number) {
+ ckpts[pos - 1].votes = SafeCast.toUint224(newWeight);
+ } else {
+ ckpts.push(Checkpoint({fromBlock: SafeCast.toUint32(block.number), votes: SafeCast.toUint224(newWeight)}));
+ }
+ }
+
+ function _add(uint256 a, uint256 b) private pure returns (uint256) {
+ return a + b;
+ }
+
+ function _subtract(uint256 a, uint256 b) private pure returns (uint256) {
+ return a - b;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol
new file mode 100644
index 0000000..9a4d833
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol
@@ -0,0 +1,47 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./ERC20Votes.sol";
+
+/**
+ * @dev Extension of ERC20 to support Compound's voting and delegation. This version exactly matches Compound's
+ * interface, with the drawback of only supporting supply up to (2^96^ - 1).
+ *
+ * NOTE: You should use this contract if you need exact compatibility with COMP (for example in order to use your token
+ * with Governor Alpha or Bravo) and if you are sure the supply cap of 2^96^ is enough for you. Otherwise, use the
+ * {ERC20Votes} variant of this module.
+ *
+ * This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either
+ * by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting
+ * power can be queried through the public accessors {getCurrentVotes} and {getPriorVotes}.
+ *
+ * By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it
+ * requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked.
+ * Enabling self-delegation can easily be done by overriding the {delegates} function. Keep in mind however that this
+ * will significantly increase the base gas cost of transfers.
+ *
+ * _Available since v4.2._
+ */
+abstract contract ERC20VotesComp is ERC20Votes {
+ /**
+ * @dev Comp version of the {getVotes} accessor, with `uint96` return type.
+ */
+ function getCurrentVotes(address account) external view returns (uint96) {
+ return SafeCast.toUint96(getVotes(account));
+ }
+
+ /**
+ * @dev Comp version of the {getPastVotes} accessor, with `uint96` return type.
+ */
+ function getPriorVotes(address account, uint256 blockNumber) external view returns (uint96) {
+ return SafeCast.toUint96(getPastVotes(account, blockNumber));
+ }
+
+ /**
+ * @dev Maximum token supply. Reduced to `type(uint96).max` (2^96^ - 1) to fit COMP interface.
+ */
+ function _maxSupply() internal view virtual override returns (uint224) {
+ return type(uint96).max;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Wrapper.sol b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Wrapper.sol
new file mode 100644
index 0000000..64dd992
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Wrapper.sol
@@ -0,0 +1,51 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC20.sol";
+import "../utils/SafeERC20.sol";
+
+/**
+ * @dev Extension of the ERC20 token contract to support token wrapping.
+ *
+ * Users can deposit and withdraw "underlying tokens" and receive a matching number of "wrapped tokens". This is useful
+ * in conjunction with other modules. For example, combining this wrapping mechanism with {ERC20Votes} will allow the
+ * wrapping of an existing "basic" ERC20 into a governance token.
+ *
+ * _Available since v4.2._
+ */
+abstract contract ERC20Wrapper is ERC20 {
+ IERC20 public immutable underlying;
+
+ constructor(IERC20 underlyingToken) {
+ underlying = underlyingToken;
+ }
+
+ /**
+ * @dev Allow a user to deposit underlying tokens and mint the corresponding number of wrapped tokens.
+ */
+ function depositFor(address account, uint256 amount) public virtual returns (bool) {
+ SafeERC20.safeTransferFrom(underlying, _msgSender(), address(this), amount);
+ _mint(account, amount);
+ return true;
+ }
+
+ /**
+ * @dev Allow a user to burn a number of wrapped tokens and withdraw the corresponding number of underlying tokens.
+ */
+ function withdrawTo(address account, uint256 amount) public virtual returns (bool) {
+ _burn(_msgSender(), amount);
+ SafeERC20.safeTransfer(underlying, account, amount);
+ return true;
+ }
+
+ /**
+ * @dev Mint wrapped token to cover any underlyingTokens that would have been transfered by mistake. Internal
+ * function that can be exposed with access control if desired.
+ */
+ function _recover(address account) internal virtual returns (uint256) {
+ uint256 value = underlying.balanceOf(address(this)) - totalSupply();
+ _mint(account, value);
+ return value;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
new file mode 100644
index 0000000..4fb868a
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
@@ -0,0 +1,27 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../IERC20.sol";
+
+/**
+ * @dev Interface for the optional metadata functions from the ERC20 standard.
+ *
+ * _Available since v4.1._
+ */
+interface IERC20Metadata is IERC20 {
+ /**
+ * @dev Returns the name of the token.
+ */
+ function name() external view returns (string memory);
+
+ /**
+ * @dev Returns the symbol of the token.
+ */
+ function symbol() external view returns (string memory);
+
+ /**
+ * @dev Returns the decimals places of the token.
+ */
+ function decimals() external view returns (uint8);
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol
new file mode 100644
index 0000000..631435e
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol
@@ -0,0 +1,86 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./draft-IERC20Permit.sol";
+import "../ERC20.sol";
+import "../../../utils/cryptography/draft-EIP712.sol";
+import "../../../utils/cryptography/ECDSA.sol";
+import "../../../utils/Counters.sol";
+
+/**
+ * @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
+ * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
+ *
+ * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
+ * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't
+ * need to send a transaction, and thus is not required to hold Ether at all.
+ *
+ * _Available since v3.4._
+ */
+abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712 {
+ using Counters for Counters.Counter;
+
+ mapping(address => Counters.Counter) private _nonces;
+
+ // solhint-disable-next-line var-name-mixedcase
+ bytes32 private immutable _PERMIT_TYPEHASH =
+ keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
+
+ /**
+ * @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `"1"`.
+ *
+ * It's a good idea to use the same `name` that is defined as the ERC20 token name.
+ */
+ constructor(string memory name) EIP712(name, "1") {}
+
+ /**
+ * @dev See {IERC20Permit-permit}.
+ */
+ function permit(
+ address owner,
+ address spender,
+ uint256 value,
+ uint256 deadline,
+ uint8 v,
+ bytes32 r,
+ bytes32 s
+ ) public virtual override {
+ require(block.timestamp <= deadline, "ERC20Permit: expired deadline");
+
+ bytes32 structHash = keccak256(abi.encode(_PERMIT_TYPEHASH, owner, spender, value, _useNonce(owner), deadline));
+
+ bytes32 hash = _hashTypedDataV4(structHash);
+
+ address signer = ECDSA.recover(hash, v, r, s);
+ require(signer == owner, "ERC20Permit: invalid signature");
+
+ _approve(owner, spender, value);
+ }
+
+ /**
+ * @dev See {IERC20Permit-nonces}.
+ */
+ function nonces(address owner) public view virtual override returns (uint256) {
+ return _nonces[owner].current();
+ }
+
+ /**
+ * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.
+ */
+ // solhint-disable-next-line func-name-mixedcase
+ function DOMAIN_SEPARATOR() external view override returns (bytes32) {
+ return _domainSeparatorV4();
+ }
+
+ /**
+ * @dev "Consume a nonce": return the current value and increment.
+ *
+ * _Available since v4.1._
+ */
+ function _useNonce(address owner) internal virtual returns (uint256 current) {
+ Counters.Counter storage nonce = _nonces[owner];
+ current = nonce.current();
+ nonce.increment();
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol
new file mode 100644
index 0000000..33eb295
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol
@@ -0,0 +1,59 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
+ * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
+ *
+ * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
+ * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
+ * need to send a transaction, and thus is not required to hold Ether at all.
+ */
+interface IERC20Permit {
+ /**
+ * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
+ * given ``owner``'s signed approval.
+ *
+ * IMPORTANT: The same issues {IERC20-approve} has related to transaction
+ * ordering also apply here.
+ *
+ * Emits an {Approval} event.
+ *
+ * Requirements:
+ *
+ * - `spender` cannot be the zero address.
+ * - `deadline` must be a timestamp in the future.
+ * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
+ * over the EIP712-formatted function arguments.
+ * - the signature must use ``owner``'s current nonce (see {nonces}).
+ *
+ * For more information on the signature format, see the
+ * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
+ * section].
+ */
+ function permit(
+ address owner,
+ address spender,
+ uint256 value,
+ uint256 deadline,
+ uint8 v,
+ bytes32 r,
+ bytes32 s
+ ) external;
+
+ /**
+ * @dev Returns the current nonce for `owner`. This value must be
+ * included whenever a signature is generated for {permit}.
+ *
+ * Every successful call to {permit} increases ``owner``'s nonce by one. This
+ * prevents a signature from being used multiple times.
+ */
+ function nonces(address owner) external view returns (uint256);
+
+ /**
+ * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
+ */
+ // solhint-disable-next-line func-name-mixedcase
+ function DOMAIN_SEPARATOR() external view returns (bytes32);
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol b/node_modules/@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol
new file mode 100644
index 0000000..4aa0ebf
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol
@@ -0,0 +1,32 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import "../extensions/ERC20Burnable.sol";
+
+/**
+ * @dev {ERC20} token, including:
+ *
+ * - Preminted initial supply
+ * - Ability for holders to burn (destroy) their tokens
+ * - No access control mechanism (for minting/pausing) and hence no governance
+ *
+ * This contract uses {ERC20Burnable} to include burn capabilities - head to
+ * its documentation for details.
+ *
+ * _Available since v3.4._
+ */
+contract ERC20PresetFixedSupply is ERC20Burnable {
+ /**
+ * @dev Mints `initialSupply` amount of token and transfers them to `owner`.
+ *
+ * See {ERC20-constructor}.
+ */
+ constructor(
+ string memory name,
+ string memory symbol,
+ uint256 initialSupply,
+ address owner
+ ) ERC20(name, symbol) {
+ _mint(owner, initialSupply);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol b/node_modules/@openzeppelin/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol
new file mode 100644
index 0000000..60c4762
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol
@@ -0,0 +1,91 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC20.sol";
+import "../extensions/ERC20Burnable.sol";
+import "../extensions/ERC20Pausable.sol";
+import "../../../access/AccessControlEnumerable.sol";
+import "../../../utils/Context.sol";
+
+/**
+ * @dev {ERC20} token, including:
+ *
+ * - ability for holders to burn (destroy) their tokens
+ * - a minter role that allows for token minting (creation)
+ * - a pauser role that allows to stop all token transfers
+ *
+ * This contract uses {AccessControl} to lock permissioned functions using the
+ * different roles - head to its documentation for details.
+ *
+ * The account that deploys the contract will be granted the minter and pauser
+ * roles, as well as the default admin role, which will let it grant both minter
+ * and pauser roles to other accounts.
+ */
+contract ERC20PresetMinterPauser is Context, AccessControlEnumerable, ERC20Burnable, ERC20Pausable {
+ bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
+ bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
+
+ /**
+ * @dev Grants `DEFAULT_ADMIN_ROLE`, `MINTER_ROLE` and `PAUSER_ROLE` to the
+ * account that deploys the contract.
+ *
+ * See {ERC20-constructor}.
+ */
+ constructor(string memory name, string memory symbol) ERC20(name, symbol) {
+ _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
+
+ _setupRole(MINTER_ROLE, _msgSender());
+ _setupRole(PAUSER_ROLE, _msgSender());
+ }
+
+ /**
+ * @dev Creates `amount` new tokens for `to`.
+ *
+ * See {ERC20-_mint}.
+ *
+ * Requirements:
+ *
+ * - the caller must have the `MINTER_ROLE`.
+ */
+ function mint(address to, uint256 amount) public virtual {
+ require(hasRole(MINTER_ROLE, _msgSender()), "ERC20PresetMinterPauser: must have minter role to mint");
+ _mint(to, amount);
+ }
+
+ /**
+ * @dev Pauses all token transfers.
+ *
+ * See {ERC20Pausable} and {Pausable-_pause}.
+ *
+ * Requirements:
+ *
+ * - the caller must have the `PAUSER_ROLE`.
+ */
+ function pause() public virtual {
+ require(hasRole(PAUSER_ROLE, _msgSender()), "ERC20PresetMinterPauser: must have pauser role to pause");
+ _pause();
+ }
+
+ /**
+ * @dev Unpauses all token transfers.
+ *
+ * See {ERC20Pausable} and {Pausable-_unpause}.
+ *
+ * Requirements:
+ *
+ * - the caller must have the `PAUSER_ROLE`.
+ */
+ function unpause() public virtual {
+ require(hasRole(PAUSER_ROLE, _msgSender()), "ERC20PresetMinterPauser: must have pauser role to unpause");
+ _unpause();
+ }
+
+ function _beforeTokenTransfer(
+ address from,
+ address to,
+ uint256 amount
+ ) internal virtual override(ERC20, ERC20Pausable) {
+ super._beforeTokenTransfer(from, to, amount);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol b/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
new file mode 100644
index 0000000..954b270
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
@@ -0,0 +1,98 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../IERC20.sol";
+import "../../../utils/Address.sol";
+
+/**
+ * @title SafeERC20
+ * @dev Wrappers around ERC20 operations that throw on failure (when the token
+ * contract returns false). Tokens that return no value (and instead revert or
+ * throw on failure) are also supported, non-reverting calls are assumed to be
+ * successful.
+ * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
+ * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
+ */
+library SafeERC20 {
+ using Address for address;
+
+ function safeTransfer(
+ IERC20 token,
+ address to,
+ uint256 value
+ ) internal {
+ _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
+ }
+
+ function safeTransferFrom(
+ IERC20 token,
+ address from,
+ address to,
+ uint256 value
+ ) internal {
+ _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
+ }
+
+ /**
+ * @dev Deprecated. This function has issues similar to the ones found in
+ * {IERC20-approve}, and its usage is discouraged.
+ *
+ * Whenever possible, use {safeIncreaseAllowance} and
+ * {safeDecreaseAllowance} instead.
+ */
+ function safeApprove(
+ IERC20 token,
+ address spender,
+ uint256 value
+ ) internal {
+ // safeApprove should only be called when setting an initial allowance,
+ // or when resetting it to zero. To increase and decrease it, use
+ // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
+ require(
+ (value == 0) || (token.allowance(address(this), spender) == 0),
+ "SafeERC20: approve from non-zero to non-zero allowance"
+ );
+ _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
+ }
+
+ function safeIncreaseAllowance(
+ IERC20 token,
+ address spender,
+ uint256 value
+ ) internal {
+ uint256 newAllowance = token.allowance(address(this), spender) + value;
+ _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
+ }
+
+ function safeDecreaseAllowance(
+ IERC20 token,
+ address spender,
+ uint256 value
+ ) internal {
+ unchecked {
+ uint256 oldAllowance = token.allowance(address(this), spender);
+ require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
+ uint256 newAllowance = oldAllowance - value;
+ _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
+ }
+ }
+
+ /**
+ * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
+ * on the return value: the return value is optional (but if data is returned, it must not be false).
+ * @param token The token targeted by the call.
+ * @param data The call data (encoded using abi.encode or one of its variants).
+ */
+ function _callOptionalReturn(IERC20 token, bytes memory data) private {
+ // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
+ // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
+ // the target address contains contract code and also asserts for success in the low-level call.
+
+ bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
+ if (returndata.length > 0) {
+ // Return data is optional
+ require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
+ }
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC20/utils/TokenTimelock.sol b/node_modules/@openzeppelin/contracts/token/ERC20/utils/TokenTimelock.sol
new file mode 100644
index 0000000..0ba42f1
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC20/utils/TokenTimelock.sol
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./SafeERC20.sol";
+
+/**
+ * @dev A token holder contract that will allow a beneficiary to extract the
+ * tokens after a given release time.
+ *
+ * Useful for simple vesting schedules like "advisors get all of their tokens
+ * after 1 year".
+ */
+contract TokenTimelock {
+ using SafeERC20 for IERC20;
+
+ // ERC20 basic token contract being held
+ IERC20 private immutable _token;
+
+ // beneficiary of tokens after they are released
+ address private immutable _beneficiary;
+
+ // timestamp when token release is enabled
+ uint256 private immutable _releaseTime;
+
+ constructor(
+ IERC20 token_,
+ address beneficiary_,
+ uint256 releaseTime_
+ ) {
+ require(releaseTime_ > block.timestamp, "TokenTimelock: release time is before current time");
+ _token = token_;
+ _beneficiary = beneficiary_;
+ _releaseTime = releaseTime_;
+ }
+
+ /**
+ * @return the token being held.
+ */
+ function token() public view virtual returns (IERC20) {
+ return _token;
+ }
+
+ /**
+ * @return the beneficiary of the tokens.
+ */
+ function beneficiary() public view virtual returns (address) {
+ return _beneficiary;
+ }
+
+ /**
+ * @return the time when the tokens are released.
+ */
+ function releaseTime() public view virtual returns (uint256) {
+ return _releaseTime;
+ }
+
+ /**
+ * @notice Transfers tokens held by timelock to beneficiary.
+ */
+ function release() public virtual {
+ require(block.timestamp >= releaseTime(), "TokenTimelock: current time is before release time");
+
+ uint256 amount = token().balanceOf(address(this));
+ require(amount > 0, "TokenTimelock: no tokens to release");
+
+ token().safeTransfer(beneficiary(), amount);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol b/node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol
new file mode 100644
index 0000000..0b37218
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol
@@ -0,0 +1,411 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IERC721.sol";
+import "./IERC721Receiver.sol";
+import "./extensions/IERC721Metadata.sol";
+import "../../utils/Address.sol";
+import "../../utils/Context.sol";
+import "../../utils/Strings.sol";
+import "../../utils/introspection/ERC165.sol";
+
+/**
+ * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
+ * the Metadata extension, but not including the Enumerable extension, which is available separately as
+ * {ERC721Enumerable}.
+ */
+contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
+ using Address for address;
+ using Strings for uint256;
+
+ // Token name
+ string private _name;
+
+ // Token symbol
+ string private _symbol;
+
+ // Mapping from token ID to owner address
+ mapping(uint256 => address) private _owners;
+
+ // Mapping owner address to token count
+ mapping(address => uint256) private _balances;
+
+ // Mapping from token ID to approved address
+ mapping(uint256 => address) private _tokenApprovals;
+
+ // Mapping from owner to operator approvals
+ mapping(address => mapping(address => bool)) private _operatorApprovals;
+
+ /**
+ * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
+ */
+ constructor(string memory name_, string memory symbol_) {
+ _name = name_;
+ _symbol = symbol_;
+ }
+
+ /**
+ * @dev See {IERC165-supportsInterface}.
+ */
+ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
+ return
+ interfaceId == type(IERC721).interfaceId ||
+ interfaceId == type(IERC721Metadata).interfaceId ||
+ super.supportsInterface(interfaceId);
+ }
+
+ /**
+ * @dev See {IERC721-balanceOf}.
+ */
+ function balanceOf(address owner) public view virtual override returns (uint256) {
+ require(owner != address(0), "ERC721: balance query for the zero address");
+ return _balances[owner];
+ }
+
+ /**
+ * @dev See {IERC721-ownerOf}.
+ */
+ function ownerOf(uint256 tokenId) public view virtual override returns (address) {
+ address owner = _owners[tokenId];
+ require(owner != address(0), "ERC721: owner query for nonexistent token");
+ return owner;
+ }
+
+ /**
+ * @dev See {IERC721Metadata-name}.
+ */
+ function name() public view virtual override returns (string memory) {
+ return _name;
+ }
+
+ /**
+ * @dev See {IERC721Metadata-symbol}.
+ */
+ function symbol() public view virtual override returns (string memory) {
+ return _symbol;
+ }
+
+ /**
+ * @dev See {IERC721Metadata-tokenURI}.
+ */
+ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
+ require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
+
+ string memory baseURI = _baseURI();
+ return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
+ }
+
+ /**
+ * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
+ * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
+ * by default, can be overriden in child contracts.
+ */
+ function _baseURI() internal view virtual returns (string memory) {
+ return "";
+ }
+
+ /**
+ * @dev See {IERC721-approve}.
+ */
+ function approve(address to, uint256 tokenId) public virtual override {
+ address owner = ERC721.ownerOf(tokenId);
+ require(to != owner, "ERC721: approval to current owner");
+
+ require(
+ _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
+ "ERC721: approve caller is not owner nor approved for all"
+ );
+
+ _approve(to, tokenId);
+ }
+
+ /**
+ * @dev See {IERC721-getApproved}.
+ */
+ function getApproved(uint256 tokenId) public view virtual override returns (address) {
+ require(_exists(tokenId), "ERC721: approved query for nonexistent token");
+
+ return _tokenApprovals[tokenId];
+ }
+
+ /**
+ * @dev See {IERC721-setApprovalForAll}.
+ */
+ function setApprovalForAll(address operator, bool approved) public virtual override {
+ require(operator != _msgSender(), "ERC721: approve to caller");
+
+ _operatorApprovals[_msgSender()][operator] = approved;
+ emit ApprovalForAll(_msgSender(), operator, approved);
+ }
+
+ /**
+ * @dev See {IERC721-isApprovedForAll}.
+ */
+ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
+ return _operatorApprovals[owner][operator];
+ }
+
+ /**
+ * @dev See {IERC721-transferFrom}.
+ */
+ function transferFrom(
+ address from,
+ address to,
+ uint256 tokenId
+ ) public virtual override {
+ //solhint-disable-next-line max-line-length
+ require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
+
+ _transfer(from, to, tokenId);
+ }
+
+ /**
+ * @dev See {IERC721-safeTransferFrom}.
+ */
+ function safeTransferFrom(
+ address from,
+ address to,
+ uint256 tokenId
+ ) public virtual override {
+ safeTransferFrom(from, to, tokenId, "");
+ }
+
+ /**
+ * @dev See {IERC721-safeTransferFrom}.
+ */
+ function safeTransferFrom(
+ address from,
+ address to,
+ uint256 tokenId,
+ bytes memory _data
+ ) public virtual override {
+ require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
+ _safeTransfer(from, to, tokenId, _data);
+ }
+
+ /**
+ * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
+ * are aware of the ERC721 protocol to prevent tokens from being forever locked.
+ *
+ * `_data` is additional data, it has no specified format and it is sent in call to `to`.
+ *
+ * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
+ * implement alternative mechanisms to perform token transfer, such as signature-based.
+ *
+ * Requirements:
+ *
+ * - `from` cannot be the zero address.
+ * - `to` cannot be the zero address.
+ * - `tokenId` token must exist and be owned by `from`.
+ * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
+ *
+ * Emits a {Transfer} event.
+ */
+ function _safeTransfer(
+ address from,
+ address to,
+ uint256 tokenId,
+ bytes memory _data
+ ) internal virtual {
+ _transfer(from, to, tokenId);
+ require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
+ }
+
+ /**
+ * @dev Returns whether `tokenId` exists.
+ *
+ * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
+ *
+ * Tokens start existing when they are minted (`_mint`),
+ * and stop existing when they are burned (`_burn`).
+ */
+ function _exists(uint256 tokenId) internal view virtual returns (bool) {
+ return _owners[tokenId] != address(0);
+ }
+
+ /**
+ * @dev Returns whether `spender` is allowed to manage `tokenId`.
+ *
+ * Requirements:
+ *
+ * - `tokenId` must exist.
+ */
+ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
+ require(_exists(tokenId), "ERC721: operator query for nonexistent token");
+ address owner = ERC721.ownerOf(tokenId);
+ return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
+ }
+
+ /**
+ * @dev Safely mints `tokenId` and transfers it to `to`.
+ *
+ * Requirements:
+ *
+ * - `tokenId` must not exist.
+ * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
+ *
+ * Emits a {Transfer} event.
+ */
+ function _safeMint(address to, uint256 tokenId) internal virtual {
+ _safeMint(to, tokenId, "");
+ }
+
+ /**
+ * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
+ * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
+ */
+ function _safeMint(
+ address to,
+ uint256 tokenId,
+ bytes memory _data
+ ) internal virtual {
+ _mint(to, tokenId);
+ require(
+ _checkOnERC721Received(address(0), to, tokenId, _data),
+ "ERC721: transfer to non ERC721Receiver implementer"
+ );
+ }
+
+ /**
+ * @dev Mints `tokenId` and transfers it to `to`.
+ *
+ * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
+ *
+ * Requirements:
+ *
+ * - `tokenId` must not exist.
+ * - `to` cannot be the zero address.
+ *
+ * Emits a {Transfer} event.
+ */
+ function _mint(address to, uint256 tokenId) internal virtual {
+ require(to != address(0), "ERC721: mint to the zero address");
+ require(!_exists(tokenId), "ERC721: token already minted");
+
+ _beforeTokenTransfer(address(0), to, tokenId);
+
+ _balances[to] += 1;
+ _owners[tokenId] = to;
+
+ emit Transfer(address(0), to, tokenId);
+ }
+
+ /**
+ * @dev Destroys `tokenId`.
+ * The approval is cleared when the token is burned.
+ *
+ * Requirements:
+ *
+ * - `tokenId` must exist.
+ *
+ * Emits a {Transfer} event.
+ */
+ function _burn(uint256 tokenId) internal virtual {
+ address owner = ERC721.ownerOf(tokenId);
+
+ _beforeTokenTransfer(owner, address(0), tokenId);
+
+ // Clear approvals
+ _approve(address(0), tokenId);
+
+ _balances[owner] -= 1;
+ delete _owners[tokenId];
+
+ emit Transfer(owner, address(0), tokenId);
+ }
+
+ /**
+ * @dev Transfers `tokenId` from `from` to `to`.
+ * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
+ *
+ * Requirements:
+ *
+ * - `to` cannot be the zero address.
+ * - `tokenId` token must be owned by `from`.
+ *
+ * Emits a {Transfer} event.
+ */
+ function _transfer(
+ address from,
+ address to,
+ uint256 tokenId
+ ) internal virtual {
+ require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
+ require(to != address(0), "ERC721: transfer to the zero address");
+
+ _beforeTokenTransfer(from, to, tokenId);
+
+ // Clear approvals from the previous owner
+ _approve(address(0), tokenId);
+
+ _balances[from] -= 1;
+ _balances[to] += 1;
+ _owners[tokenId] = to;
+
+ emit Transfer(from, to, tokenId);
+ }
+
+ /**
+ * @dev Approve `to` to operate on `tokenId`
+ *
+ * Emits a {Approval} event.
+ */
+ function _approve(address to, uint256 tokenId) internal virtual {
+ _tokenApprovals[tokenId] = to;
+ emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
+ }
+
+ /**
+ * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
+ * The call is not executed if the target address is not a contract.
+ *
+ * @param from address representing the previous owner of the given token ID
+ * @param to target address that will receive the tokens
+ * @param tokenId uint256 ID of the token to be transferred
+ * @param _data bytes optional data to send along with the call
+ * @return bool whether the call correctly returned the expected magic value
+ */
+ function _checkOnERC721Received(
+ address from,
+ address to,
+ uint256 tokenId,
+ bytes memory _data
+ ) private returns (bool) {
+ if (to.isContract()) {
+ try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
+ return retval == IERC721Receiver.onERC721Received.selector;
+ } catch (bytes memory reason) {
+ if (reason.length == 0) {
+ revert("ERC721: transfer to non ERC721Receiver implementer");
+ } else {
+ assembly {
+ revert(add(32, reason), mload(reason))
+ }
+ }
+ }
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * @dev Hook that is called before any token transfer. This includes minting
+ * and burning.
+ *
+ * Calling conditions:
+ *
+ * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
+ * transferred to `to`.
+ * - When `from` is zero, `tokenId` will be minted for `to`.
+ * - When `to` is zero, ``from``'s `tokenId` will be burned.
+ * - `from` and `to` are never both zero.
+ *
+ * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
+ */
+ function _beforeTokenTransfer(
+ address from,
+ address to,
+ uint256 tokenId
+ ) internal virtual {}
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol b/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol
new file mode 100644
index 0000000..873ec67
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol
@@ -0,0 +1,142 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../../utils/introspection/IERC165.sol";
+
+/**
+ * @dev Required interface of an ERC721 compliant contract.
+ */
+interface IERC721 is IERC165 {
+ /**
+ * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
+ */
+ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
+
+ /**
+ * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
+ */
+ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
+
+ /**
+ * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
+ */
+ event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
+
+ /**
+ * @dev Returns the number of tokens in ``owner``'s account.
+ */
+ function balanceOf(address owner) external view returns (uint256 balance);
+
+ /**
+ * @dev Returns the owner of the `tokenId` token.
+ *
+ * Requirements:
+ *
+ * - `tokenId` must exist.
+ */
+ function ownerOf(uint256 tokenId) external view returns (address owner);
+
+ /**
+ * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
+ * are aware of the ERC721 protocol to prevent tokens from being forever locked.
+ *
+ * Requirements:
+ *
+ * - `from` cannot be the zero address.
+ * - `to` cannot be the zero address.
+ * - `tokenId` token must exist and be owned by `from`.
+ * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
+ * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
+ *
+ * Emits a {Transfer} event.
+ */
+ function safeTransferFrom(
+ address from,
+ address to,
+ uint256 tokenId
+ ) external;
+
+ /**
+ * @dev Transfers `tokenId` token from `from` to `to`.
+ *
+ * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
+ *
+ * Requirements:
+ *
+ * - `from` cannot be the zero address.
+ * - `to` cannot be the zero address.
+ * - `tokenId` token must be owned by `from`.
+ * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
+ *
+ * Emits a {Transfer} event.
+ */
+ function transferFrom(
+ address from,
+ address to,
+ uint256 tokenId
+ ) external;
+
+ /**
+ * @dev Gives permission to `to` to transfer `tokenId` token to another account.
+ * The approval is cleared when the token is transferred.
+ *
+ * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
+ *
+ * Requirements:
+ *
+ * - The caller must own the token or be an approved operator.
+ * - `tokenId` must exist.
+ *
+ * Emits an {Approval} event.
+ */
+ function approve(address to, uint256 tokenId) external;
+
+ /**
+ * @dev Returns the account approved for `tokenId` token.
+ *
+ * Requirements:
+ *
+ * - `tokenId` must exist.
+ */
+ function getApproved(uint256 tokenId) external view returns (address operator);
+
+ /**
+ * @dev Approve or remove `operator` as an operator for the caller.
+ * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
+ *
+ * Requirements:
+ *
+ * - The `operator` cannot be the caller.
+ *
+ * Emits an {ApprovalForAll} event.
+ */
+ function setApprovalForAll(address operator, bool _approved) external;
+
+ /**
+ * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
+ *
+ * See {setApprovalForAll}
+ */
+ function isApprovedForAll(address owner, address operator) external view returns (bool);
+
+ /**
+ * @dev Safely transfers `tokenId` token from `from` to `to`.
+ *
+ * Requirements:
+ *
+ * - `from` cannot be the zero address.
+ * - `to` cannot be the zero address.
+ * - `tokenId` token must exist and be owned by `from`.
+ * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
+ * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
+ *
+ * Emits a {Transfer} event.
+ */
+ function safeTransferFrom(
+ address from,
+ address to,
+ uint256 tokenId,
+ bytes calldata data
+ ) external;
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol b/node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
new file mode 100644
index 0000000..9683f4a
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
@@ -0,0 +1,26 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @title ERC721 token receiver interface
+ * @dev Interface for any contract that wants to support safeTransfers
+ * from ERC721 asset contracts.
+ */
+interface IERC721Receiver {
+ /**
+ * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
+ * by `operator` from `from`, this function is called.
+ *
+ * It must return its Solidity selector to confirm the token transfer.
+ * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
+ *
+ * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
+ */
+ function onERC721Received(
+ address operator,
+ address from,
+ uint256 tokenId,
+ bytes calldata data
+ ) external returns (bytes4);
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol b/node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol
new file mode 100644
index 0000000..b0512f0
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol
@@ -0,0 +1,25 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC721.sol";
+import "../../../utils/Context.sol";
+
+/**
+ * @title ERC721 Burnable Token
+ * @dev ERC721 Token that can be irreversibly burned (destroyed).
+ */
+abstract contract ERC721Burnable is Context, ERC721 {
+ /**
+ * @dev Burns `tokenId`. See {ERC721-_burn}.
+ *
+ * Requirements:
+ *
+ * - The caller must own `tokenId` or be an approved operator.
+ */
+ function burn(uint256 tokenId) public virtual {
+ //solhint-disable-next-line max-line-length
+ require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
+ _burn(tokenId);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol b/node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol
new file mode 100644
index 0000000..d064bdd
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol
@@ -0,0 +1,162 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC721.sol";
+import "./IERC721Enumerable.sol";
+
+/**
+ * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
+ * enumerability of all the token ids in the contract as well as all token ids owned by each
+ * account.
+ */
+abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
+ // Mapping from owner to list of owned token IDs
+ mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
+
+ // Mapping from token ID to index of the owner tokens list
+ mapping(uint256 => uint256) private _ownedTokensIndex;
+
+ // Array with all token ids, used for enumeration
+ uint256[] private _allTokens;
+
+ // Mapping from token id to position in the allTokens array
+ mapping(uint256 => uint256) private _allTokensIndex;
+
+ /**
+ * @dev See {IERC165-supportsInterface}.
+ */
+ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
+ return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
+ }
+
+ /**
+ * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
+ */
+ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
+ require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
+ return _ownedTokens[owner][index];
+ }
+
+ /**
+ * @dev See {IERC721Enumerable-totalSupply}.
+ */
+ function totalSupply() public view virtual override returns (uint256) {
+ return _allTokens.length;
+ }
+
+ /**
+ * @dev See {IERC721Enumerable-tokenByIndex}.
+ */
+ function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
+ require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
+ return _allTokens[index];
+ }
+
+ /**
+ * @dev Hook that is called before any token transfer. This includes minting
+ * and burning.
+ *
+ * Calling conditions:
+ *
+ * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
+ * transferred to `to`.
+ * - When `from` is zero, `tokenId` will be minted for `to`.
+ * - When `to` is zero, ``from``'s `tokenId` will be burned.
+ * - `from` cannot be the zero address.
+ * - `to` cannot be the zero address.
+ *
+ * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
+ */
+ function _beforeTokenTransfer(
+ address from,
+ address to,
+ uint256 tokenId
+ ) internal virtual override {
+ super._beforeTokenTransfer(from, to, tokenId);
+
+ if (from == address(0)) {
+ _addTokenToAllTokensEnumeration(tokenId);
+ } else if (from != to) {
+ _removeTokenFromOwnerEnumeration(from, tokenId);
+ }
+ if (to == address(0)) {
+ _removeTokenFromAllTokensEnumeration(tokenId);
+ } else if (to != from) {
+ _addTokenToOwnerEnumeration(to, tokenId);
+ }
+ }
+
+ /**
+ * @dev Private function to add a token to this extension's ownership-tracking data structures.
+ * @param to address representing the new owner of the given token ID
+ * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
+ */
+ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
+ uint256 length = ERC721.balanceOf(to);
+ _ownedTokens[to][length] = tokenId;
+ _ownedTokensIndex[tokenId] = length;
+ }
+
+ /**
+ * @dev Private function to add a token to this extension's token tracking data structures.
+ * @param tokenId uint256 ID of the token to be added to the tokens list
+ */
+ function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
+ _allTokensIndex[tokenId] = _allTokens.length;
+ _allTokens.push(tokenId);
+ }
+
+ /**
+ * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
+ * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
+ * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
+ * This has O(1) time complexity, but alters the order of the _ownedTokens array.
+ * @param from address representing the previous owner of the given token ID
+ * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
+ */
+ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
+ // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
+ // then delete the last slot (swap and pop).
+
+ uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
+ uint256 tokenIndex = _ownedTokensIndex[tokenId];
+
+ // When the token to delete is the last token, the swap operation is unnecessary
+ if (tokenIndex != lastTokenIndex) {
+ uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
+
+ _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
+ _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
+ }
+
+ // This also deletes the contents at the last position of the array
+ delete _ownedTokensIndex[tokenId];
+ delete _ownedTokens[from][lastTokenIndex];
+ }
+
+ /**
+ * @dev Private function to remove a token from this extension's token tracking data structures.
+ * This has O(1) time complexity, but alters the order of the _allTokens array.
+ * @param tokenId uint256 ID of the token to be removed from the tokens list
+ */
+ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
+ // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
+ // then delete the last slot (swap and pop).
+
+ uint256 lastTokenIndex = _allTokens.length - 1;
+ uint256 tokenIndex = _allTokensIndex[tokenId];
+
+ // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
+ // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
+ // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
+ uint256 lastTokenId = _allTokens[lastTokenIndex];
+
+ _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
+ _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
+
+ // This also deletes the contents at the last position of the array
+ delete _allTokensIndex[tokenId];
+ _allTokens.pop();
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol b/node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol
new file mode 100644
index 0000000..2949b3c
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol
@@ -0,0 +1,32 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC721.sol";
+import "../../../security/Pausable.sol";
+
+/**
+ * @dev ERC721 token with pausable token transfers, minting and burning.
+ *
+ * Useful for scenarios such as preventing trades until the end of an evaluation
+ * period, or having an emergency switch for freezing all token transfers in the
+ * event of a large bug.
+ */
+abstract contract ERC721Pausable is ERC721, Pausable {
+ /**
+ * @dev See {ERC721-_beforeTokenTransfer}.
+ *
+ * Requirements:
+ *
+ * - the contract must not be paused.
+ */
+ function _beforeTokenTransfer(
+ address from,
+ address to,
+ uint256 tokenId
+ ) internal virtual override {
+ super._beforeTokenTransfer(from, to, tokenId);
+
+ require(!paused(), "ERC721Pausable: token transfer while paused");
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol b/node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol
new file mode 100644
index 0000000..5b96e70
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol
@@ -0,0 +1,66 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC721.sol";
+
+/**
+ * @dev ERC721 token with storage based token URI management.
+ */
+abstract contract ERC721URIStorage is ERC721 {
+ using Strings for uint256;
+
+ // Optional mapping for token URIs
+ mapping(uint256 => string) private _tokenURIs;
+
+ /**
+ * @dev See {IERC721Metadata-tokenURI}.
+ */
+ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
+ require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");
+
+ string memory _tokenURI = _tokenURIs[tokenId];
+ string memory base = _baseURI();
+
+ // If there is no base URI, return the token URI.
+ if (bytes(base).length == 0) {
+ return _tokenURI;
+ }
+ // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
+ if (bytes(_tokenURI).length > 0) {
+ return string(abi.encodePacked(base, _tokenURI));
+ }
+
+ return super.tokenURI(tokenId);
+ }
+
+ /**
+ * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
+ *
+ * Requirements:
+ *
+ * - `tokenId` must exist.
+ */
+ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
+ require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
+ _tokenURIs[tokenId] = _tokenURI;
+ }
+
+ /**
+ * @dev Destroys `tokenId`.
+ * The approval is cleared when the token is burned.
+ *
+ * Requirements:
+ *
+ * - `tokenId` must exist.
+ *
+ * Emits a {Transfer} event.
+ */
+ function _burn(uint256 tokenId) internal virtual override {
+ super._burn(tokenId);
+
+ if (bytes(_tokenURIs[tokenId]).length != 0) {
+ delete _tokenURIs[tokenId];
+ }
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol b/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
new file mode 100644
index 0000000..c04295b
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
@@ -0,0 +1,28 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../IERC721.sol";
+
+/**
+ * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
+ * @dev See https://eips.ethereum.org/EIPS/eip-721
+ */
+interface IERC721Enumerable is IERC721 {
+ /**
+ * @dev Returns the total amount of tokens stored by the contract.
+ */
+ function totalSupply() external view returns (uint256);
+
+ /**
+ * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
+ * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
+ */
+ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
+
+ /**
+ * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
+ * Use along with {totalSupply} to enumerate all tokens.
+ */
+ function tokenByIndex(uint256 index) external view returns (uint256);
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol b/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
new file mode 100644
index 0000000..cb9af00
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
@@ -0,0 +1,26 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../IERC721.sol";
+
+/**
+ * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
+ * @dev See https://eips.ethereum.org/EIPS/eip-721
+ */
+interface IERC721Metadata is IERC721 {
+ /**
+ * @dev Returns the token collection name.
+ */
+ function name() external view returns (string memory);
+
+ /**
+ * @dev Returns the token collection symbol.
+ */
+ function symbol() external view returns (string memory);
+
+ /**
+ * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
+ */
+ function tokenURI(uint256 tokenId) external view returns (string memory);
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC721/presets/ERC721PresetMinterPauserAutoId.sol b/node_modules/@openzeppelin/contracts/token/ERC721/presets/ERC721PresetMinterPauserAutoId.sol
new file mode 100644
index 0000000..c231765
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC721/presets/ERC721PresetMinterPauserAutoId.sol
@@ -0,0 +1,136 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../ERC721.sol";
+import "../extensions/ERC721Enumerable.sol";
+import "../extensions/ERC721Burnable.sol";
+import "../extensions/ERC721Pausable.sol";
+import "../../../access/AccessControlEnumerable.sol";
+import "../../../utils/Context.sol";
+import "../../../utils/Counters.sol";
+
+/**
+ * @dev {ERC721} token, including:
+ *
+ * - ability for holders to burn (destroy) their tokens
+ * - a minter role that allows for token minting (creation)
+ * - a pauser role that allows to stop all token transfers
+ * - token ID and URI autogeneration
+ *
+ * This contract uses {AccessControl} to lock permissioned functions using the
+ * different roles - head to its documentation for details.
+ *
+ * The account that deploys the contract will be granted the minter and pauser
+ * roles, as well as the default admin role, which will let it grant both minter
+ * and pauser roles to other accounts.
+ */
+contract ERC721PresetMinterPauserAutoId is
+ Context,
+ AccessControlEnumerable,
+ ERC721Enumerable,
+ ERC721Burnable,
+ ERC721Pausable
+{
+ using Counters for Counters.Counter;
+
+ bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
+ bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
+
+ Counters.Counter private _tokenIdTracker;
+
+ string private _baseTokenURI;
+
+ /**
+ * @dev Grants `DEFAULT_ADMIN_ROLE`, `MINTER_ROLE` and `PAUSER_ROLE` to the
+ * account that deploys the contract.
+ *
+ * Token URIs will be autogenerated based on `baseURI` and their token IDs.
+ * See {ERC721-tokenURI}.
+ */
+ constructor(
+ string memory name,
+ string memory symbol,
+ string memory baseTokenURI
+ ) ERC721(name, symbol) {
+ _baseTokenURI = baseTokenURI;
+
+ _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
+
+ _setupRole(MINTER_ROLE, _msgSender());
+ _setupRole(PAUSER_ROLE, _msgSender());
+ }
+
+ function _baseURI() internal view virtual override returns (string memory) {
+ return _baseTokenURI;
+ }
+
+ /**
+ * @dev Creates a new token for `to`. Its token ID will be automatically
+ * assigned (and available on the emitted {IERC721-Transfer} event), and the token
+ * URI autogenerated based on the base URI passed at construction.
+ *
+ * See {ERC721-_mint}.
+ *
+ * Requirements:
+ *
+ * - the caller must have the `MINTER_ROLE`.
+ */
+ function mint(address to) public virtual {
+ require(hasRole(MINTER_ROLE, _msgSender()), "ERC721PresetMinterPauserAutoId: must have minter role to mint");
+
+ // We cannot just use balanceOf to create the new tokenId because tokens
+ // can be burned (destroyed), so we need a separate counter.
+ _mint(to, _tokenIdTracker.current());
+ _tokenIdTracker.increment();
+ }
+
+ /**
+ * @dev Pauses all token transfers.
+ *
+ * See {ERC721Pausable} and {Pausable-_pause}.
+ *
+ * Requirements:
+ *
+ * - the caller must have the `PAUSER_ROLE`.
+ */
+ function pause() public virtual {
+ require(hasRole(PAUSER_ROLE, _msgSender()), "ERC721PresetMinterPauserAutoId: must have pauser role to pause");
+ _pause();
+ }
+
+ /**
+ * @dev Unpauses all token transfers.
+ *
+ * See {ERC721Pausable} and {Pausable-_unpause}.
+ *
+ * Requirements:
+ *
+ * - the caller must have the `PAUSER_ROLE`.
+ */
+ function unpause() public virtual {
+ require(hasRole(PAUSER_ROLE, _msgSender()), "ERC721PresetMinterPauserAutoId: must have pauser role to unpause");
+ _unpause();
+ }
+
+ function _beforeTokenTransfer(
+ address from,
+ address to,
+ uint256 tokenId
+ ) internal virtual override(ERC721, ERC721Enumerable, ERC721Pausable) {
+ super._beforeTokenTransfer(from, to, tokenId);
+ }
+
+ /**
+ * @dev See {IERC165-supportsInterface}.
+ */
+ function supportsInterface(bytes4 interfaceId)
+ public
+ view
+ virtual
+ override(AccessControlEnumerable, ERC721, ERC721Enumerable)
+ returns (bool)
+ {
+ return super.supportsInterface(interfaceId);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol b/node_modules/@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol
new file mode 100644
index 0000000..6446380
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol
@@ -0,0 +1,27 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../IERC721Receiver.sol";
+
+/**
+ * @dev Implementation of the {IERC721Receiver} interface.
+ *
+ * Accepts all token transfers.
+ * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
+ */
+contract ERC721Holder is IERC721Receiver {
+ /**
+ * @dev See {IERC721Receiver-onERC721Received}.
+ *
+ * Always returns `IERC721Receiver.onERC721Received.selector`.
+ */
+ function onERC721Received(
+ address,
+ address,
+ uint256,
+ bytes memory
+ ) public virtual override returns (bytes4) {
+ return this.onERC721Received.selector;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC777/ERC777.sol b/node_modules/@openzeppelin/contracts/token/ERC777/ERC777.sol
new file mode 100644
index 0000000..35296a0
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC777/ERC777.sol
@@ -0,0 +1,538 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IERC777.sol";
+import "./IERC777Recipient.sol";
+import "./IERC777Sender.sol";
+import "../ERC20/IERC20.sol";
+import "../../utils/Address.sol";
+import "../../utils/Context.sol";
+import "../../utils/introspection/IERC1820Registry.sol";
+
+/**
+ * @dev Implementation of the {IERC777} interface.
+ *
+ * This implementation is agnostic to the way tokens are created. This means
+ * that a supply mechanism has to be added in a derived contract using {_mint}.
+ *
+ * Support for ERC20 is included in this contract, as specified by the EIP: both
+ * the ERC777 and ERC20 interfaces can be safely used when interacting with it.
+ * Both {IERC777-Sent} and {IERC20-Transfer} events are emitted on token
+ * movements.
+ *
+ * Additionally, the {IERC777-granularity} value is hard-coded to `1`, meaning that there
+ * are no special restrictions in the amount of tokens that created, moved, or
+ * destroyed. This makes integration with ERC20 applications seamless.
+ */
+contract ERC777 is Context, IERC777, IERC20 {
+ using Address for address;
+
+ IERC1820Registry internal constant _ERC1820_REGISTRY = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);
+
+ mapping(address => uint256) private _balances;
+
+ uint256 private _totalSupply;
+
+ string private _name;
+ string private _symbol;
+
+ bytes32 private constant _TOKENS_SENDER_INTERFACE_HASH = keccak256("ERC777TokensSender");
+ bytes32 private constant _TOKENS_RECIPIENT_INTERFACE_HASH = keccak256("ERC777TokensRecipient");
+
+ // This isn't ever read from - it's only used to respond to the defaultOperators query.
+ address[] private _defaultOperatorsArray;
+
+ // Immutable, but accounts may revoke them (tracked in __revokedDefaultOperators).
+ mapping(address => bool) private _defaultOperators;
+
+ // For each account, a mapping of its operators and revoked default operators.
+ mapping(address => mapping(address => bool)) private _operators;
+ mapping(address => mapping(address => bool)) private _revokedDefaultOperators;
+
+ // ERC20-allowances
+ mapping(address => mapping(address => uint256)) private _allowances;
+
+ /**
+ * @dev `defaultOperators` may be an empty array.
+ */
+ constructor(
+ string memory name_,
+ string memory symbol_,
+ address[] memory defaultOperators_
+ ) {
+ _name = name_;
+ _symbol = symbol_;
+
+ _defaultOperatorsArray = defaultOperators_;
+ for (uint256 i = 0; i < defaultOperators_.length; i++) {
+ _defaultOperators[defaultOperators_[i]] = true;
+ }
+
+ // register interfaces
+ _ERC1820_REGISTRY.setInterfaceImplementer(address(this), keccak256("ERC777Token"), address(this));
+ _ERC1820_REGISTRY.setInterfaceImplementer(address(this), keccak256("ERC20Token"), address(this));
+ }
+
+ /**
+ * @dev See {IERC777-name}.
+ */
+ function name() public view virtual override returns (string memory) {
+ return _name;
+ }
+
+ /**
+ * @dev See {IERC777-symbol}.
+ */
+ function symbol() public view virtual override returns (string memory) {
+ return _symbol;
+ }
+
+ /**
+ * @dev See {ERC20-decimals}.
+ *
+ * Always returns 18, as per the
+ * [ERC777 EIP](https://eips.ethereum.org/EIPS/eip-777#backward-compatibility).
+ */
+ function decimals() public pure virtual returns (uint8) {
+ return 18;
+ }
+
+ /**
+ * @dev See {IERC777-granularity}.
+ *
+ * This implementation always returns `1`.
+ */
+ function granularity() public view virtual override returns (uint256) {
+ return 1;
+ }
+
+ /**
+ * @dev See {IERC777-totalSupply}.
+ */
+ function totalSupply() public view virtual override(IERC20, IERC777) returns (uint256) {
+ return _totalSupply;
+ }
+
+ /**
+ * @dev Returns the amount of tokens owned by an account (`tokenHolder`).
+ */
+ function balanceOf(address tokenHolder) public view virtual override(IERC20, IERC777) returns (uint256) {
+ return _balances[tokenHolder];
+ }
+
+ /**
+ * @dev See {IERC777-send}.
+ *
+ * Also emits a {IERC20-Transfer} event for ERC20 compatibility.
+ */
+ function send(
+ address recipient,
+ uint256 amount,
+ bytes memory data
+ ) public virtual override {
+ _send(_msgSender(), recipient, amount, data, "", true);
+ }
+
+ /**
+ * @dev See {IERC20-transfer}.
+ *
+ * Unlike `send`, `recipient` is _not_ required to implement the {IERC777Recipient}
+ * interface if it is a contract.
+ *
+ * Also emits a {Sent} event.
+ */
+ function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
+ require(recipient != address(0), "ERC777: transfer to the zero address");
+
+ address from = _msgSender();
+
+ _callTokensToSend(from, from, recipient, amount, "", "");
+
+ _move(from, from, recipient, amount, "", "");
+
+ _callTokensReceived(from, from, recipient, amount, "", "", false);
+
+ return true;
+ }
+
+ /**
+ * @dev See {IERC777-burn}.
+ *
+ * Also emits a {IERC20-Transfer} event for ERC20 compatibility.
+ */
+ function burn(uint256 amount, bytes memory data) public virtual override {
+ _burn(_msgSender(), amount, data, "");
+ }
+
+ /**
+ * @dev See {IERC777-isOperatorFor}.
+ */
+ function isOperatorFor(address operator, address tokenHolder) public view virtual override returns (bool) {
+ return
+ operator == tokenHolder ||
+ (_defaultOperators[operator] && !_revokedDefaultOperators[tokenHolder][operator]) ||
+ _operators[tokenHolder][operator];
+ }
+
+ /**
+ * @dev See {IERC777-authorizeOperator}.
+ */
+ function authorizeOperator(address operator) public virtual override {
+ require(_msgSender() != operator, "ERC777: authorizing self as operator");
+
+ if (_defaultOperators[operator]) {
+ delete _revokedDefaultOperators[_msgSender()][operator];
+ } else {
+ _operators[_msgSender()][operator] = true;
+ }
+
+ emit AuthorizedOperator(operator, _msgSender());
+ }
+
+ /**
+ * @dev See {IERC777-revokeOperator}.
+ */
+ function revokeOperator(address operator) public virtual override {
+ require(operator != _msgSender(), "ERC777: revoking self as operator");
+
+ if (_defaultOperators[operator]) {
+ _revokedDefaultOperators[_msgSender()][operator] = true;
+ } else {
+ delete _operators[_msgSender()][operator];
+ }
+
+ emit RevokedOperator(operator, _msgSender());
+ }
+
+ /**
+ * @dev See {IERC777-defaultOperators}.
+ */
+ function defaultOperators() public view virtual override returns (address[] memory) {
+ return _defaultOperatorsArray;
+ }
+
+ /**
+ * @dev See {IERC777-operatorSend}.
+ *
+ * Emits {Sent} and {IERC20-Transfer} events.
+ */
+ function operatorSend(
+ address sender,
+ address recipient,
+ uint256 amount,
+ bytes memory data,
+ bytes memory operatorData
+ ) public virtual override {
+ require(isOperatorFor(_msgSender(), sender), "ERC777: caller is not an operator for holder");
+ _send(sender, recipient, amount, data, operatorData, true);
+ }
+
+ /**
+ * @dev See {IERC777-operatorBurn}.
+ *
+ * Emits {Burned} and {IERC20-Transfer} events.
+ */
+ function operatorBurn(
+ address account,
+ uint256 amount,
+ bytes memory data,
+ bytes memory operatorData
+ ) public virtual override {
+ require(isOperatorFor(_msgSender(), account), "ERC777: caller is not an operator for holder");
+ _burn(account, amount, data, operatorData);
+ }
+
+ /**
+ * @dev See {IERC20-allowance}.
+ *
+ * Note that operator and allowance concepts are orthogonal: operators may
+ * not have allowance, and accounts with allowance may not be operators
+ * themselves.
+ */
+ function allowance(address holder, address spender) public view virtual override returns (uint256) {
+ return _allowances[holder][spender];
+ }
+
+ /**
+ * @dev See {IERC20-approve}.
+ *
+ * Note that accounts cannot have allowance issued by their operators.
+ */
+ function approve(address spender, uint256 value) public virtual override returns (bool) {
+ address holder = _msgSender();
+ _approve(holder, spender, value);
+ return true;
+ }
+
+ /**
+ * @dev See {IERC20-transferFrom}.
+ *
+ * Note that operator and allowance concepts are orthogonal: operators cannot
+ * call `transferFrom` (unless they have allowance), and accounts with
+ * allowance cannot call `operatorSend` (unless they are operators).
+ *
+ * Emits {Sent}, {IERC20-Transfer} and {IERC20-Approval} events.
+ */
+ function transferFrom(
+ address holder,
+ address recipient,
+ uint256 amount
+ ) public virtual override returns (bool) {
+ require(recipient != address(0), "ERC777: transfer to the zero address");
+ require(holder != address(0), "ERC777: transfer from the zero address");
+
+ address spender = _msgSender();
+
+ _callTokensToSend(spender, holder, recipient, amount, "", "");
+
+ _move(spender, holder, recipient, amount, "", "");
+
+ uint256 currentAllowance = _allowances[holder][spender];
+ require(currentAllowance >= amount, "ERC777: transfer amount exceeds allowance");
+ _approve(holder, spender, currentAllowance - amount);
+
+ _callTokensReceived(spender, holder, recipient, amount, "", "", false);
+
+ return true;
+ }
+
+ /**
+ * @dev Creates `amount` tokens and assigns them to `account`, increasing
+ * the total supply.
+ *
+ * If a send hook is registered for `account`, the corresponding function
+ * will be called with `operator`, `data` and `operatorData`.
+ *
+ * See {IERC777Sender} and {IERC777Recipient}.
+ *
+ * Emits {Minted} and {IERC20-Transfer} events.
+ *
+ * Requirements
+ *
+ * - `account` cannot be the zero address.
+ * - if `account` is a contract, it must implement the {IERC777Recipient}
+ * interface.
+ */
+ function _mint(
+ address account,
+ uint256 amount,
+ bytes memory userData,
+ bytes memory operatorData
+ ) internal virtual {
+ _mint(account, amount, userData, operatorData, true);
+ }
+
+ /**
+ * @dev Creates `amount` tokens and assigns them to `account`, increasing
+ * the total supply.
+ *
+ * If `requireReceptionAck` is set to true, and if a send hook is
+ * registered for `account`, the corresponding function will be called with
+ * `operator`, `data` and `operatorData`.
+ *
+ * See {IERC777Sender} and {IERC777Recipient}.
+ *
+ * Emits {Minted} and {IERC20-Transfer} events.
+ *
+ * Requirements
+ *
+ * - `account` cannot be the zero address.
+ * - if `account` is a contract, it must implement the {IERC777Recipient}
+ * interface.
+ */
+ function _mint(
+ address account,
+ uint256 amount,
+ bytes memory userData,
+ bytes memory operatorData,
+ bool requireReceptionAck
+ ) internal virtual {
+ require(account != address(0), "ERC777: mint to the zero address");
+
+ address operator = _msgSender();
+
+ _beforeTokenTransfer(operator, address(0), account, amount);
+
+ // Update state variables
+ _totalSupply += amount;
+ _balances[account] += amount;
+
+ _callTokensReceived(operator, address(0), account, amount, userData, operatorData, requireReceptionAck);
+
+ emit Minted(operator, account, amount, userData, operatorData);
+ emit Transfer(address(0), account, amount);
+ }
+
+ /**
+ * @dev Send tokens
+ * @param from address token holder address
+ * @param to address recipient address
+ * @param amount uint256 amount of tokens to transfer
+ * @param userData bytes extra information provided by the token holder (if any)
+ * @param operatorData bytes extra information provided by the operator (if any)
+ * @param requireReceptionAck if true, contract recipients are required to implement ERC777TokensRecipient
+ */
+ function _send(
+ address from,
+ address to,
+ uint256 amount,
+ bytes memory userData,
+ bytes memory operatorData,
+ bool requireReceptionAck
+ ) internal virtual {
+ require(from != address(0), "ERC777: send from the zero address");
+ require(to != address(0), "ERC777: send to the zero address");
+
+ address operator = _msgSender();
+
+ _callTokensToSend(operator, from, to, amount, userData, operatorData);
+
+ _move(operator, from, to, amount, userData, operatorData);
+
+ _callTokensReceived(operator, from, to, amount, userData, operatorData, requireReceptionAck);
+ }
+
+ /**
+ * @dev Burn tokens
+ * @param from address token holder address
+ * @param amount uint256 amount of tokens to burn
+ * @param data bytes extra information provided by the token holder
+ * @param operatorData bytes extra information provided by the operator (if any)
+ */
+ function _burn(
+ address from,
+ uint256 amount,
+ bytes memory data,
+ bytes memory operatorData
+ ) internal virtual {
+ require(from != address(0), "ERC777: burn from the zero address");
+
+ address operator = _msgSender();
+
+ _callTokensToSend(operator, from, address(0), amount, data, operatorData);
+
+ _beforeTokenTransfer(operator, from, address(0), amount);
+
+ // Update state variables
+ uint256 fromBalance = _balances[from];
+ require(fromBalance >= amount, "ERC777: burn amount exceeds balance");
+ unchecked {
+ _balances[from] = fromBalance - amount;
+ }
+ _totalSupply -= amount;
+
+ emit Burned(operator, from, amount, data, operatorData);
+ emit Transfer(from, address(0), amount);
+ }
+
+ function _move(
+ address operator,
+ address from,
+ address to,
+ uint256 amount,
+ bytes memory userData,
+ bytes memory operatorData
+ ) private {
+ _beforeTokenTransfer(operator, from, to, amount);
+
+ uint256 fromBalance = _balances[from];
+ require(fromBalance >= amount, "ERC777: transfer amount exceeds balance");
+ unchecked {
+ _balances[from] = fromBalance - amount;
+ }
+ _balances[to] += amount;
+
+ emit Sent(operator, from, to, amount, userData, operatorData);
+ emit Transfer(from, to, amount);
+ }
+
+ /**
+ * @dev See {ERC20-_approve}.
+ *
+ * Note that accounts cannot have allowance issued by their operators.
+ */
+ function _approve(
+ address holder,
+ address spender,
+ uint256 value
+ ) internal {
+ require(holder != address(0), "ERC777: approve from the zero address");
+ require(spender != address(0), "ERC777: approve to the zero address");
+
+ _allowances[holder][spender] = value;
+ emit Approval(holder, spender, value);
+ }
+
+ /**
+ * @dev Call from.tokensToSend() if the interface is registered
+ * @param operator address operator requesting the transfer
+ * @param from address token holder address
+ * @param to address recipient address
+ * @param amount uint256 amount of tokens to transfer
+ * @param userData bytes extra information provided by the token holder (if any)
+ * @param operatorData bytes extra information provided by the operator (if any)
+ */
+ function _callTokensToSend(
+ address operator,
+ address from,
+ address to,
+ uint256 amount,
+ bytes memory userData,
+ bytes memory operatorData
+ ) private {
+ address implementer = _ERC1820_REGISTRY.getInterfaceImplementer(from, _TOKENS_SENDER_INTERFACE_HASH);
+ if (implementer != address(0)) {
+ IERC777Sender(implementer).tokensToSend(operator, from, to, amount, userData, operatorData);
+ }
+ }
+
+ /**
+ * @dev Call to.tokensReceived() if the interface is registered. Reverts if the recipient is a contract but
+ * tokensReceived() was not registered for the recipient
+ * @param operator address operator requesting the transfer
+ * @param from address token holder address
+ * @param to address recipient address
+ * @param amount uint256 amount of tokens to transfer
+ * @param userData bytes extra information provided by the token holder (if any)
+ * @param operatorData bytes extra information provided by the operator (if any)
+ * @param requireReceptionAck if true, contract recipients are required to implement ERC777TokensRecipient
+ */
+ function _callTokensReceived(
+ address operator,
+ address from,
+ address to,
+ uint256 amount,
+ bytes memory userData,
+ bytes memory operatorData,
+ bool requireReceptionAck
+ ) private {
+ address implementer = _ERC1820_REGISTRY.getInterfaceImplementer(to, _TOKENS_RECIPIENT_INTERFACE_HASH);
+ if (implementer != address(0)) {
+ IERC777Recipient(implementer).tokensReceived(operator, from, to, amount, userData, operatorData);
+ } else if (requireReceptionAck) {
+ require(!to.isContract(), "ERC777: token recipient contract has no implementer for ERC777TokensRecipient");
+ }
+ }
+
+ /**
+ * @dev Hook that is called before any token transfer. This includes
+ * calls to {send}, {transfer}, {operatorSend}, minting and burning.
+ *
+ * Calling conditions:
+ *
+ * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
+ * will be to transferred to `to`.
+ * - when `from` is zero, `amount` tokens will be minted for `to`.
+ * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
+ * - `from` and `to` are never both zero.
+ *
+ * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
+ */
+ function _beforeTokenTransfer(
+ address operator,
+ address from,
+ address to,
+ uint256 amount
+ ) internal virtual {}
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC777/IERC777.sol b/node_modules/@openzeppelin/contracts/token/ERC777/IERC777.sol
new file mode 100644
index 0000000..c037d1a
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC777/IERC777.sol
@@ -0,0 +1,192 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Interface of the ERC777Token standard as defined in the EIP.
+ *
+ * This contract uses the
+ * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 registry standard] to let
+ * token holders and recipients react to token movements by using setting implementers
+ * for the associated interfaces in said registry. See {IERC1820Registry} and
+ * {ERC1820Implementer}.
+ */
+interface IERC777 {
+ /**
+ * @dev Returns the name of the token.
+ */
+ function name() external view returns (string memory);
+
+ /**
+ * @dev Returns the symbol of the token, usually a shorter version of the
+ * name.
+ */
+ function symbol() external view returns (string memory);
+
+ /**
+ * @dev Returns the smallest part of the token that is not divisible. This
+ * means all token operations (creation, movement and destruction) must have
+ * amounts that are a multiple of this number.
+ *
+ * For most token contracts, this value will equal 1.
+ */
+ function granularity() external view returns (uint256);
+
+ /**
+ * @dev Returns the amount of tokens in existence.
+ */
+ function totalSupply() external view returns (uint256);
+
+ /**
+ * @dev Returns the amount of tokens owned by an account (`owner`).
+ */
+ function balanceOf(address owner) external view returns (uint256);
+
+ /**
+ * @dev Moves `amount` tokens from the caller's account to `recipient`.
+ *
+ * If send or receive hooks are registered for the caller and `recipient`,
+ * the corresponding functions will be called with `data` and empty
+ * `operatorData`. See {IERC777Sender} and {IERC777Recipient}.
+ *
+ * Emits a {Sent} event.
+ *
+ * Requirements
+ *
+ * - the caller must have at least `amount` tokens.
+ * - `recipient` cannot be the zero address.
+ * - if `recipient` is a contract, it must implement the {IERC777Recipient}
+ * interface.
+ */
+ function send(
+ address recipient,
+ uint256 amount,
+ bytes calldata data
+ ) external;
+
+ /**
+ * @dev Destroys `amount` tokens from the caller's account, reducing the
+ * total supply.
+ *
+ * If a send hook is registered for the caller, the corresponding function
+ * will be called with `data` and empty `operatorData`. See {IERC777Sender}.
+ *
+ * Emits a {Burned} event.
+ *
+ * Requirements
+ *
+ * - the caller must have at least `amount` tokens.
+ */
+ function burn(uint256 amount, bytes calldata data) external;
+
+ /**
+ * @dev Returns true if an account is an operator of `tokenHolder`.
+ * Operators can send and burn tokens on behalf of their owners. All
+ * accounts are their own operator.
+ *
+ * See {operatorSend} and {operatorBurn}.
+ */
+ function isOperatorFor(address operator, address tokenHolder) external view returns (bool);
+
+ /**
+ * @dev Make an account an operator of the caller.
+ *
+ * See {isOperatorFor}.
+ *
+ * Emits an {AuthorizedOperator} event.
+ *
+ * Requirements
+ *
+ * - `operator` cannot be calling address.
+ */
+ function authorizeOperator(address operator) external;
+
+ /**
+ * @dev Revoke an account's operator status for the caller.
+ *
+ * See {isOperatorFor} and {defaultOperators}.
+ *
+ * Emits a {RevokedOperator} event.
+ *
+ * Requirements
+ *
+ * - `operator` cannot be calling address.
+ */
+ function revokeOperator(address operator) external;
+
+ /**
+ * @dev Returns the list of default operators. These accounts are operators
+ * for all token holders, even if {authorizeOperator} was never called on
+ * them.
+ *
+ * This list is immutable, but individual holders may revoke these via
+ * {revokeOperator}, in which case {isOperatorFor} will return false.
+ */
+ function defaultOperators() external view returns (address[] memory);
+
+ /**
+ * @dev Moves `amount` tokens from `sender` to `recipient`. The caller must
+ * be an operator of `sender`.
+ *
+ * If send or receive hooks are registered for `sender` and `recipient`,
+ * the corresponding functions will be called with `data` and
+ * `operatorData`. See {IERC777Sender} and {IERC777Recipient}.
+ *
+ * Emits a {Sent} event.
+ *
+ * Requirements
+ *
+ * - `sender` cannot be the zero address.
+ * - `sender` must have at least `amount` tokens.
+ * - the caller must be an operator for `sender`.
+ * - `recipient` cannot be the zero address.
+ * - if `recipient` is a contract, it must implement the {IERC777Recipient}
+ * interface.
+ */
+ function operatorSend(
+ address sender,
+ address recipient,
+ uint256 amount,
+ bytes calldata data,
+ bytes calldata operatorData
+ ) external;
+
+ /**
+ * @dev Destroys `amount` tokens from `account`, reducing the total supply.
+ * The caller must be an operator of `account`.
+ *
+ * If a send hook is registered for `account`, the corresponding function
+ * will be called with `data` and `operatorData`. See {IERC777Sender}.
+ *
+ * Emits a {Burned} event.
+ *
+ * Requirements
+ *
+ * - `account` cannot be the zero address.
+ * - `account` must have at least `amount` tokens.
+ * - the caller must be an operator for `account`.
+ */
+ function operatorBurn(
+ address account,
+ uint256 amount,
+ bytes calldata data,
+ bytes calldata operatorData
+ ) external;
+
+ event Sent(
+ address indexed operator,
+ address indexed from,
+ address indexed to,
+ uint256 amount,
+ bytes data,
+ bytes operatorData
+ );
+
+ event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData);
+
+ event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData);
+
+ event AuthorizedOperator(address indexed operator, address indexed tokenHolder);
+
+ event RevokedOperator(address indexed operator, address indexed tokenHolder);
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC777/IERC777Recipient.sol b/node_modules/@openzeppelin/contracts/token/ERC777/IERC777Recipient.sol
new file mode 100644
index 0000000..a897691
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC777/IERC777Recipient.sol
@@ -0,0 +1,34 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Interface of the ERC777TokensRecipient standard as defined in the EIP.
+ *
+ * Accounts can be notified of {IERC777} tokens being sent to them by having a
+ * contract implement this interface (contract holders can be their own
+ * implementer) and registering it on the
+ * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 global registry].
+ *
+ * See {IERC1820Registry} and {ERC1820Implementer}.
+ */
+interface IERC777Recipient {
+ /**
+ * @dev Called by an {IERC777} token contract whenever tokens are being
+ * moved or created into a registered account (`to`). The type of operation
+ * is conveyed by `from` being the zero address or not.
+ *
+ * This call occurs _after_ the token contract's state is updated, so
+ * {IERC777-balanceOf}, etc., can be used to query the post-operation state.
+ *
+ * This function may revert to prevent the operation from being executed.
+ */
+ function tokensReceived(
+ address operator,
+ address from,
+ address to,
+ uint256 amount,
+ bytes calldata userData,
+ bytes calldata operatorData
+ ) external;
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC777/IERC777Sender.sol b/node_modules/@openzeppelin/contracts/token/ERC777/IERC777Sender.sol
new file mode 100644
index 0000000..172f69e
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC777/IERC777Sender.sol
@@ -0,0 +1,34 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Interface of the ERC777TokensSender standard as defined in the EIP.
+ *
+ * {IERC777} Token holders can be notified of operations performed on their
+ * tokens by having a contract implement this interface (contract holders can be
+ * their own implementer) and registering it on the
+ * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 global registry].
+ *
+ * See {IERC1820Registry} and {ERC1820Implementer}.
+ */
+interface IERC777Sender {
+ /**
+ * @dev Called by an {IERC777} token contract whenever a registered holder's
+ * (`from`) tokens are about to be moved or destroyed. The type of operation
+ * is conveyed by `to` being the zero address or not.
+ *
+ * This call occurs _before_ the token contract's state is updated, so
+ * {IERC777-balanceOf}, etc., can be used to query the pre-operation state.
+ *
+ * This function may revert to prevent the operation from being executed.
+ */
+ function tokensToSend(
+ address operator,
+ address from,
+ address to,
+ uint256 amount,
+ bytes calldata userData,
+ bytes calldata operatorData
+ ) external;
+}
diff --git a/node_modules/@openzeppelin/contracts/token/ERC777/presets/ERC777PresetFixedSupply.sol b/node_modules/@openzeppelin/contracts/token/ERC777/presets/ERC777PresetFixedSupply.sol
new file mode 100644
index 0000000..fb9a6ce
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/token/ERC777/presets/ERC777PresetFixedSupply.sol
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import "../ERC777.sol";
+
+/**
+ * @dev {ERC777} token, including:
+ *
+ * - Preminted initial supply
+ * - No access control mechanism (for minting/pausing) and hence no governance
+ *
+ * _Available since v3.4._
+ */
+contract ERC777PresetFixedSupply is ERC777 {
+ /**
+ * @dev Mints `initialSupply` amount of token and transfers them to `owner`.
+ *
+ * See {ERC777-constructor}.
+ */
+ constructor(
+ string memory name,
+ string memory symbol,
+ address[] memory defaultOperators,
+ uint256 initialSupply,
+ address owner
+ ) ERC777(name, symbol, defaultOperators) {
+ _mint(owner, initialSupply, "", "");
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/Address.sol b/node_modules/@openzeppelin/contracts/utils/Address.sol
new file mode 100644
index 0000000..0bb4a55
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/Address.sol
@@ -0,0 +1,216 @@
+// SPDX-License-Identifier: MIT
+
+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);
+ }
+ }
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/Arrays.sol b/node_modules/@openzeppelin/contracts/utils/Arrays.sol
new file mode 100644
index 0000000..1ad43db
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/Arrays.sol
@@ -0,0 +1,47 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./math/Math.sol";
+
+/**
+ * @dev Collection of functions related to array types.
+ */
+library Arrays {
+ /**
+ * @dev Searches a sorted `array` and returns the first index that contains
+ * a value greater or equal to `element`. If no such index exists (i.e. all
+ * values in the array are strictly less than `element`), the array length is
+ * returned. Time complexity O(log n).
+ *
+ * `array` is expected to be sorted in ascending order, and to contain no
+ * repeated elements.
+ */
+ function findUpperBound(uint256[] storage array, uint256 element) internal view returns (uint256) {
+ if (array.length == 0) {
+ return 0;
+ }
+
+ uint256 low = 0;
+ uint256 high = array.length;
+
+ while (low < high) {
+ uint256 mid = Math.average(low, high);
+
+ // Note that mid will always be strictly less than high (i.e. it will be a valid array index)
+ // because Math.average rounds down (it does integer division with truncation).
+ if (array[mid] > element) {
+ high = mid;
+ } else {
+ low = mid + 1;
+ }
+ }
+
+ // At this point `low` is the exclusive upper bound. We will return the inclusive upper bound.
+ if (low > 0 && array[low - 1] == element) {
+ return low - 1;
+ } else {
+ return low;
+ }
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/Context.sol b/node_modules/@openzeppelin/contracts/utils/Context.sol
new file mode 100644
index 0000000..d03dc5f
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/Context.sol
@@ -0,0 +1,23 @@
+// SPDX-License-Identifier: MIT
+
+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;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/Counters.sol b/node_modules/@openzeppelin/contracts/utils/Counters.sol
new file mode 100644
index 0000000..624055c
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/Counters.sol
@@ -0,0 +1,42 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @title Counters
+ * @author Matt Condon (@shrugs)
+ * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
+ * of elements in a mapping, issuing ERC721 ids, or counting request ids.
+ *
+ * Include with `using Counters for Counters.Counter;`
+ */
+library Counters {
+ struct Counter {
+ // This variable should never be directly accessed by users of the library: interactions must be restricted to
+ // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
+ // this feature: see https://github.com/ethereum/solidity/issues/4637
+ uint256 _value; // default: 0
+ }
+
+ function current(Counter storage counter) internal view returns (uint256) {
+ return counter._value;
+ }
+
+ function increment(Counter storage counter) internal {
+ unchecked {
+ counter._value += 1;
+ }
+ }
+
+ function decrement(Counter storage counter) internal {
+ uint256 value = counter._value;
+ require(value > 0, "Counter: decrement overflow");
+ unchecked {
+ counter._value = value - 1;
+ }
+ }
+
+ function reset(Counter storage counter) internal {
+ counter._value = 0;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/Create2.sol b/node_modules/@openzeppelin/contracts/utils/Create2.sol
new file mode 100644
index 0000000..72377d6
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/Create2.sol
@@ -0,0 +1,64 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.
+ * `CREATE2` can be used to compute in advance the address where a smart
+ * contract will be deployed, which allows for interesting new mechanisms known
+ * as 'counterfactual interactions'.
+ *
+ * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more
+ * information.
+ */
+library Create2 {
+ /**
+ * @dev Deploys a contract using `CREATE2`. The address where the contract
+ * will be deployed can be known in advance via {computeAddress}.
+ *
+ * The bytecode for a contract can be obtained from Solidity with
+ * `type(contractName).creationCode`.
+ *
+ * Requirements:
+ *
+ * - `bytecode` must not be empty.
+ * - `salt` must have not been used for `bytecode` already.
+ * - the factory must have a balance of at least `amount`.
+ * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.
+ */
+ function deploy(
+ uint256 amount,
+ bytes32 salt,
+ bytes memory bytecode
+ ) internal returns (address) {
+ address addr;
+ require(address(this).balance >= amount, "Create2: insufficient balance");
+ require(bytecode.length != 0, "Create2: bytecode length is zero");
+ assembly {
+ addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)
+ }
+ require(addr != address(0), "Create2: Failed on deploy");
+ return addr;
+ }
+
+ /**
+ * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the
+ * `bytecodeHash` or `salt` will result in a new destination address.
+ */
+ function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {
+ return computeAddress(salt, bytecodeHash, address(this));
+ }
+
+ /**
+ * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at
+ * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.
+ */
+ function computeAddress(
+ bytes32 salt,
+ bytes32 bytecodeHash,
+ address deployer
+ ) internal pure returns (address) {
+ bytes32 _data = keccak256(abi.encodePacked(bytes1(0xff), deployer, salt, bytecodeHash));
+ return address(uint160(uint256(_data)));
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/Multicall.sol b/node_modules/@openzeppelin/contracts/utils/Multicall.sol
new file mode 100644
index 0000000..06912a0
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/Multicall.sol
@@ -0,0 +1,23 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./Address.sol";
+
+/**
+ * @dev Provides a function to batch together multiple calls in a single external call.
+ *
+ * _Available since v4.1._
+ */
+abstract contract Multicall {
+ /**
+ * @dev Receives and executes a batch of function calls on this contract.
+ */
+ function multicall(bytes[] calldata data) external returns (bytes[] memory results) {
+ results = new bytes[](data.length);
+ for (uint256 i = 0; i < data.length; i++) {
+ results[i] = Address.functionDelegateCall(address(this), data[i]);
+ }
+ return results;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/StorageSlot.sol b/node_modules/@openzeppelin/contracts/utils/StorageSlot.sol
new file mode 100644
index 0000000..00aa4ec
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/StorageSlot.sol
@@ -0,0 +1,83 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Library for reading and writing primitive types to specific storage slots.
+ *
+ * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
+ * This library helps with reading and writing to such slots without the need for inline assembly.
+ *
+ * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
+ *
+ * Example usage to set ERC1967 implementation slot:
+ * ```
+ * contract ERC1967 {
+ * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
+ *
+ * function _getImplementation() internal view returns (address) {
+ * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
+ * }
+ *
+ * function _setImplementation(address newImplementation) internal {
+ * require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
+ * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
+ * }
+ * }
+ * ```
+ *
+ * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._
+ */
+library StorageSlot {
+ struct AddressSlot {
+ address value;
+ }
+
+ struct BooleanSlot {
+ bool value;
+ }
+
+ struct Bytes32Slot {
+ bytes32 value;
+ }
+
+ struct Uint256Slot {
+ uint256 value;
+ }
+
+ /**
+ * @dev Returns an `AddressSlot` with member `value` located at `slot`.
+ */
+ function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
+ assembly {
+ r.slot := slot
+ }
+ }
+
+ /**
+ * @dev Returns an `BooleanSlot` with member `value` located at `slot`.
+ */
+ function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
+ assembly {
+ r.slot := slot
+ }
+ }
+
+ /**
+ * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
+ */
+ function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
+ assembly {
+ r.slot := slot
+ }
+ }
+
+ /**
+ * @dev Returns an `Uint256Slot` with member `value` located at `slot`.
+ */
+ function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
+ assembly {
+ r.slot := slot
+ }
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/Strings.sol b/node_modules/@openzeppelin/contracts/utils/Strings.sol
new file mode 100644
index 0000000..8f3d41e
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/Strings.sol
@@ -0,0 +1,66 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev String operations.
+ */
+library Strings {
+ bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
+
+ /**
+ * @dev Converts a `uint256` to its ASCII `string` decimal representation.
+ */
+ function toString(uint256 value) internal pure returns (string memory) {
+ // Inspired by OraclizeAPI's implementation - MIT licence
+ // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
+
+ if (value == 0) {
+ return "0";
+ }
+ uint256 temp = value;
+ uint256 digits;
+ while (temp != 0) {
+ digits++;
+ temp /= 10;
+ }
+ bytes memory buffer = new bytes(digits);
+ while (value != 0) {
+ digits -= 1;
+ buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
+ value /= 10;
+ }
+ return string(buffer);
+ }
+
+ /**
+ * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
+ */
+ function toHexString(uint256 value) internal pure returns (string memory) {
+ if (value == 0) {
+ return "0x00";
+ }
+ uint256 temp = value;
+ uint256 length = 0;
+ while (temp != 0) {
+ length++;
+ temp >>= 8;
+ }
+ return toHexString(value, length);
+ }
+
+ /**
+ * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
+ */
+ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
+ bytes memory buffer = new bytes(2 * length + 2);
+ buffer[0] = "0";
+ buffer[1] = "x";
+ for (uint256 i = 2 * length + 1; i > 1; --i) {
+ buffer[i] = _HEX_SYMBOLS[value & 0xf];
+ value >>= 4;
+ }
+ require(value == 0, "Strings: hex length insufficient");
+ return string(buffer);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/Timers.sol b/node_modules/@openzeppelin/contracts/utils/Timers.sol
new file mode 100644
index 0000000..c692666
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/Timers.sol
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Tooling for timepoints, timers and delays
+ */
+library Timers {
+ struct Timestamp {
+ uint64 _deadline;
+ }
+
+ function getDeadline(Timestamp memory timer) internal pure returns (uint64) {
+ return timer._deadline;
+ }
+
+ function setDeadline(Timestamp storage timer, uint64 timestamp) internal {
+ timer._deadline = timestamp;
+ }
+
+ function reset(Timestamp storage timer) internal {
+ timer._deadline = 0;
+ }
+
+ function isUnset(Timestamp memory timer) internal pure returns (bool) {
+ return timer._deadline == 0;
+ }
+
+ function isStarted(Timestamp memory timer) internal pure returns (bool) {
+ return timer._deadline > 0;
+ }
+
+ function isPending(Timestamp memory timer) internal view returns (bool) {
+ return timer._deadline > block.timestamp;
+ }
+
+ function isExpired(Timestamp memory timer) internal view returns (bool) {
+ return isStarted(timer) && timer._deadline <= block.timestamp;
+ }
+
+ struct BlockNumber {
+ uint64 _deadline;
+ }
+
+ function getDeadline(BlockNumber memory timer) internal pure returns (uint64) {
+ return timer._deadline;
+ }
+
+ function setDeadline(BlockNumber storage timer, uint64 timestamp) internal {
+ timer._deadline = timestamp;
+ }
+
+ function reset(BlockNumber storage timer) internal {
+ timer._deadline = 0;
+ }
+
+ function isUnset(BlockNumber memory timer) internal pure returns (bool) {
+ return timer._deadline == 0;
+ }
+
+ function isStarted(BlockNumber memory timer) internal pure returns (bool) {
+ return timer._deadline > 0;
+ }
+
+ function isPending(BlockNumber memory timer) internal view returns (bool) {
+ return timer._deadline > block.number;
+ }
+
+ function isExpired(BlockNumber memory timer) internal view returns (bool) {
+ return isStarted(timer) && timer._deadline <= block.number;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol b/node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol
new file mode 100644
index 0000000..0f8a3a5
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol
@@ -0,0 +1,219 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
+ *
+ * These functions can be used to verify that a message was signed by the holder
+ * of the private keys of a given address.
+ */
+library ECDSA {
+ enum RecoverError {
+ NoError,
+ InvalidSignature,
+ InvalidSignatureLength,
+ InvalidSignatureS,
+ InvalidSignatureV
+ }
+
+ function _throwError(RecoverError error) private pure {
+ if (error == RecoverError.NoError) {
+ return; // no error: do nothing
+ } else if (error == RecoverError.InvalidSignature) {
+ revert("ECDSA: invalid signature");
+ } else if (error == RecoverError.InvalidSignatureLength) {
+ revert("ECDSA: invalid signature length");
+ } else if (error == RecoverError.InvalidSignatureS) {
+ revert("ECDSA: invalid signature 's' value");
+ } else if (error == RecoverError.InvalidSignatureV) {
+ revert("ECDSA: invalid signature 'v' value");
+ }
+ }
+
+ /**
+ * @dev Returns the address that signed a hashed message (`hash`) with
+ * `signature` or error string. This address can then be used for verification purposes.
+ *
+ * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
+ * this function rejects them by requiring the `s` value to be in the lower
+ * half order, and the `v` value to be either 27 or 28.
+ *
+ * IMPORTANT: `hash` _must_ be the result of a hash operation for the
+ * verification to be secure: it is possible to craft signatures that
+ * recover to arbitrary addresses for non-hashed data. A safe way to ensure
+ * this is by receiving a hash of the original message (which may otherwise
+ * be too long), and then calling {toEthSignedMessageHash} on it.
+ *
+ * Documentation for signature generation:
+ * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
+ * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
+ *
+ * _Available since v4.3._
+ */
+ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
+ // Check the signature length
+ // - case 65: r,s,v signature (standard)
+ // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
+ if (signature.length == 65) {
+ bytes32 r;
+ bytes32 s;
+ uint8 v;
+ // ecrecover takes the signature parameters, and the only way to get them
+ // currently is to use assembly.
+ assembly {
+ r := mload(add(signature, 0x20))
+ s := mload(add(signature, 0x40))
+ v := byte(0, mload(add(signature, 0x60)))
+ }
+ return tryRecover(hash, v, r, s);
+ } else if (signature.length == 64) {
+ bytes32 r;
+ bytes32 vs;
+ // ecrecover takes the signature parameters, and the only way to get them
+ // currently is to use assembly.
+ assembly {
+ r := mload(add(signature, 0x20))
+ vs := mload(add(signature, 0x40))
+ }
+ return tryRecover(hash, r, vs);
+ } else {
+ return (address(0), RecoverError.InvalidSignatureLength);
+ }
+ }
+
+ /**
+ * @dev Returns the address that signed a hashed message (`hash`) with
+ * `signature`. This address can then be used for verification purposes.
+ *
+ * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
+ * this function rejects them by requiring the `s` value to be in the lower
+ * half order, and the `v` value to be either 27 or 28.
+ *
+ * IMPORTANT: `hash` _must_ be the result of a hash operation for the
+ * verification to be secure: it is possible to craft signatures that
+ * recover to arbitrary addresses for non-hashed data. A safe way to ensure
+ * this is by receiving a hash of the original message (which may otherwise
+ * be too long), and then calling {toEthSignedMessageHash} on it.
+ */
+ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
+ (address recovered, RecoverError error) = tryRecover(hash, signature);
+ _throwError(error);
+ return recovered;
+ }
+
+ /**
+ * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
+ *
+ * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
+ *
+ * _Available since v4.3._
+ */
+ function tryRecover(
+ bytes32 hash,
+ bytes32 r,
+ bytes32 vs
+ ) internal pure returns (address, RecoverError) {
+ bytes32 s;
+ uint8 v;
+ assembly {
+ s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
+ v := add(shr(255, vs), 27)
+ }
+ return tryRecover(hash, v, r, s);
+ }
+
+ /**
+ * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
+ *
+ * _Available since v4.2._
+ */
+ function recover(
+ bytes32 hash,
+ bytes32 r,
+ bytes32 vs
+ ) internal pure returns (address) {
+ (address recovered, RecoverError error) = tryRecover(hash, r, vs);
+ _throwError(error);
+ return recovered;
+ }
+
+ /**
+ * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
+ * `r` and `s` signature fields separately.
+ *
+ * _Available since v4.3._
+ */
+ function tryRecover(
+ bytes32 hash,
+ uint8 v,
+ bytes32 r,
+ bytes32 s
+ ) internal pure returns (address, RecoverError) {
+ // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
+ // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
+ // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
+ // signatures from current libraries generate a unique signature with an s-value in the lower half order.
+ //
+ // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
+ // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
+ // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
+ // these malleable signatures as well.
+ if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
+ return (address(0), RecoverError.InvalidSignatureS);
+ }
+ if (v != 27 && v != 28) {
+ return (address(0), RecoverError.InvalidSignatureV);
+ }
+
+ // If the signature is valid (and not malleable), return the signer address
+ address signer = ecrecover(hash, v, r, s);
+ if (signer == address(0)) {
+ return (address(0), RecoverError.InvalidSignature);
+ }
+
+ return (signer, RecoverError.NoError);
+ }
+
+ /**
+ * @dev Overload of {ECDSA-recover} that receives the `v`,
+ * `r` and `s` signature fields separately.
+ */
+ function recover(
+ bytes32 hash,
+ uint8 v,
+ bytes32 r,
+ bytes32 s
+ ) internal pure returns (address) {
+ (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
+ _throwError(error);
+ return recovered;
+ }
+
+ /**
+ * @dev Returns an Ethereum Signed Message, created from a `hash`. This
+ * produces hash corresponding to the one signed with the
+ * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
+ * JSON-RPC method as part of EIP-191.
+ *
+ * See {recover}.
+ */
+ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
+ // 32 is the length in bytes of hash,
+ // enforced by the type signature above
+ return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
+ }
+
+ /**
+ * @dev Returns an Ethereum Signed Typed Data, created from a
+ * `domainSeparator` and a `structHash`. This produces hash corresponding
+ * to the one signed with the
+ * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
+ * JSON-RPC method as part of EIP-712.
+ *
+ * See {recover}.
+ */
+ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
+ return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol b/node_modules/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol
new file mode 100644
index 0000000..b3b4871
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol
@@ -0,0 +1,43 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev These functions deal with verification of Merkle Trees proofs.
+ *
+ * The proofs can be generated using the JavaScript library
+ * https://github.com/miguelmota/merkletreejs[merkletreejs].
+ * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
+ *
+ * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
+ */
+library MerkleProof {
+ /**
+ * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
+ * defined by `root`. For this, a `proof` must be provided, containing
+ * sibling hashes on the branch from the leaf to the root of the tree. Each
+ * pair of leaves and each pair of pre-images are assumed to be sorted.
+ */
+ function verify(
+ bytes32[] memory proof,
+ bytes32 root,
+ bytes32 leaf
+ ) internal pure returns (bool) {
+ bytes32 computedHash = leaf;
+
+ for (uint256 i = 0; i < proof.length; i++) {
+ bytes32 proofElement = proof[i];
+
+ if (computedHash <= proofElement) {
+ // Hash(current computed hash + current element of the proof)
+ computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
+ } else {
+ // Hash(current element of the proof + current computed hash)
+ computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
+ }
+ }
+
+ // Check if the computed hash (root) is equal to the provided root
+ return computedHash == root;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol b/node_modules/@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol
new file mode 100644
index 0000000..71e30eb
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol
@@ -0,0 +1,35 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./ECDSA.sol";
+import "../Address.sol";
+import "../../interfaces/IERC1271.sol";
+
+/**
+ * @dev Signature verification helper: Provide a single mechanism to verify both private-key (EOA) ECDSA signature and
+ * ERC1271 contract sigantures. Using this instead of ECDSA.recover in your contract will make them compatible with
+ * smart contract wallets such as Argent and Gnosis.
+ *
+ * Note: unlike ECDSA signatures, contract signature's are revocable, and the outcome of this function can thus change
+ * through time. It could return true at block N and false at block N+1 (or the opposite).
+ *
+ * _Available since v4.1._
+ */
+library SignatureChecker {
+ function isValidSignatureNow(
+ address signer,
+ bytes32 hash,
+ bytes memory signature
+ ) internal view returns (bool) {
+ (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);
+ if (error == ECDSA.RecoverError.NoError && recovered == signer) {
+ return true;
+ }
+
+ (bool success, bytes memory result) = signer.staticcall(
+ abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)
+ );
+ return (success && result.length == 32 && abi.decode(result, (bytes4)) == IERC1271.isValidSignature.selector);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol b/node_modules/@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol
new file mode 100644
index 0000000..2d45fa4
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol
@@ -0,0 +1,101 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./ECDSA.sol";
+
+/**
+ * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.
+ *
+ * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,
+ * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding
+ * they need in their contracts using a combination of `abi.encode` and `keccak256`.
+ *
+ * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding
+ * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA
+ * ({_hashTypedDataV4}).
+ *
+ * The implementation of the domain separator was designed to be as efficient as possible while still properly updating
+ * the chain id to protect against replay attacks on an eventual fork of the chain.
+ *
+ * NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method
+ * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].
+ *
+ * _Available since v3.4._
+ */
+abstract contract EIP712 {
+ /* solhint-disable var-name-mixedcase */
+ // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to
+ // invalidate the cached domain separator if the chain id changes.
+ bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;
+ uint256 private immutable _CACHED_CHAIN_ID;
+
+ bytes32 private immutable _HASHED_NAME;
+ bytes32 private immutable _HASHED_VERSION;
+ bytes32 private immutable _TYPE_HASH;
+
+ /* solhint-enable var-name-mixedcase */
+
+ /**
+ * @dev Initializes the domain separator and parameter caches.
+ *
+ * The meaning of `name` and `version` is specified in
+ * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:
+ *
+ * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.
+ * - `version`: the current major version of the signing domain.
+ *
+ * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart
+ * contract upgrade].
+ */
+ constructor(string memory name, string memory version) {
+ bytes32 hashedName = keccak256(bytes(name));
+ bytes32 hashedVersion = keccak256(bytes(version));
+ bytes32 typeHash = keccak256(
+ "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
+ );
+ _HASHED_NAME = hashedName;
+ _HASHED_VERSION = hashedVersion;
+ _CACHED_CHAIN_ID = block.chainid;
+ _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);
+ _TYPE_HASH = typeHash;
+ }
+
+ /**
+ * @dev Returns the domain separator for the current chain.
+ */
+ function _domainSeparatorV4() internal view returns (bytes32) {
+ if (block.chainid == _CACHED_CHAIN_ID) {
+ return _CACHED_DOMAIN_SEPARATOR;
+ } else {
+ return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);
+ }
+ }
+
+ function _buildDomainSeparator(
+ bytes32 typeHash,
+ bytes32 nameHash,
+ bytes32 versionHash
+ ) private view returns (bytes32) {
+ return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));
+ }
+
+ /**
+ * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this
+ * function returns the hash of the fully encoded EIP712 message for this domain.
+ *
+ * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:
+ *
+ * ```solidity
+ * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(
+ * keccak256("Mail(address to,string contents)"),
+ * mailTo,
+ * keccak256(bytes(mailContents))
+ * )));
+ * address signer = ECDSA.recover(digest, signature);
+ * ```
+ */
+ function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {
+ return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/escrow/ConditionalEscrow.sol b/node_modules/@openzeppelin/contracts/utils/escrow/ConditionalEscrow.sol
new file mode 100644
index 0000000..d1e5587
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/escrow/ConditionalEscrow.sol
@@ -0,0 +1,24 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./Escrow.sol";
+
+/**
+ * @title ConditionalEscrow
+ * @dev Base abstract escrow to only allow withdrawal if a condition is met.
+ * @dev Intended usage: See {Escrow}. Same usage guidelines apply here.
+ */
+abstract contract ConditionalEscrow is Escrow {
+ /**
+ * @dev Returns whether an address is allowed to withdraw their funds. To be
+ * implemented by derived contracts.
+ * @param payee The destination address of the funds.
+ */
+ function withdrawalAllowed(address payee) public view virtual returns (bool);
+
+ function withdraw(address payable payee) public virtual override {
+ require(withdrawalAllowed(payee), "ConditionalEscrow: payee is not allowed to withdraw");
+ super.withdraw(payee);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/escrow/Escrow.sol b/node_modules/@openzeppelin/contracts/utils/escrow/Escrow.sol
new file mode 100644
index 0000000..c5ed191
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/escrow/Escrow.sol
@@ -0,0 +1,62 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../../access/Ownable.sol";
+import "../Address.sol";
+
+/**
+ * @title Escrow
+ * @dev Base escrow contract, holds funds designated for a payee until they
+ * withdraw them.
+ *
+ * Intended usage: This contract (and derived escrow contracts) should be a
+ * standalone contract, that only interacts with the contract that instantiated
+ * it. That way, it is guaranteed that all Ether will be handled according to
+ * the `Escrow` rules, and there is no need to check for payable functions or
+ * transfers in the inheritance tree. The contract that uses the escrow as its
+ * payment method should be its owner, and provide public methods redirecting
+ * to the escrow's deposit and withdraw.
+ */
+contract Escrow is Ownable {
+ using Address for address payable;
+
+ event Deposited(address indexed payee, uint256 weiAmount);
+ event Withdrawn(address indexed payee, uint256 weiAmount);
+
+ mapping(address => uint256) private _deposits;
+
+ function depositsOf(address payee) public view returns (uint256) {
+ return _deposits[payee];
+ }
+
+ /**
+ * @dev Stores the sent amount as credit to be withdrawn.
+ * @param payee The destination address of the funds.
+ */
+ function deposit(address payee) public payable virtual onlyOwner {
+ uint256 amount = msg.value;
+ _deposits[payee] += amount;
+ emit Deposited(payee, amount);
+ }
+
+ /**
+ * @dev Withdraw accumulated balance for a payee, forwarding all gas to the
+ * recipient.
+ *
+ * WARNING: Forwarding all gas opens the door to reentrancy vulnerabilities.
+ * Make sure you trust the recipient, or are either following the
+ * checks-effects-interactions pattern or using {ReentrancyGuard}.
+ *
+ * @param payee The address whose funds will be withdrawn and transferred to.
+ */
+ function withdraw(address payable payee) public virtual onlyOwner {
+ uint256 payment = _deposits[payee];
+
+ _deposits[payee] = 0;
+
+ payee.sendValue(payment);
+
+ emit Withdrawn(payee, payment);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/escrow/RefundEscrow.sol b/node_modules/@openzeppelin/contracts/utils/escrow/RefundEscrow.sol
new file mode 100644
index 0000000..ac8ce60
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/escrow/RefundEscrow.sol
@@ -0,0 +1,99 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./ConditionalEscrow.sol";
+
+/**
+ * @title RefundEscrow
+ * @dev Escrow that holds funds for a beneficiary, deposited from multiple
+ * parties.
+ * @dev Intended usage: See {Escrow}. Same usage guidelines apply here.
+ * @dev The owner account (that is, the contract that instantiates this
+ * contract) may deposit, close the deposit period, and allow for either
+ * withdrawal by the beneficiary, or refunds to the depositors. All interactions
+ * with `RefundEscrow` will be made through the owner contract.
+ */
+contract RefundEscrow is ConditionalEscrow {
+ using Address for address payable;
+
+ enum State {
+ Active,
+ Refunding,
+ Closed
+ }
+
+ event RefundsClosed();
+ event RefundsEnabled();
+
+ State private _state;
+ address payable private immutable _beneficiary;
+
+ /**
+ * @dev Constructor.
+ * @param beneficiary_ The beneficiary of the deposits.
+ */
+ constructor(address payable beneficiary_) {
+ require(beneficiary_ != address(0), "RefundEscrow: beneficiary is the zero address");
+ _beneficiary = beneficiary_;
+ _state = State.Active;
+ }
+
+ /**
+ * @return The current state of the escrow.
+ */
+ function state() public view virtual returns (State) {
+ return _state;
+ }
+
+ /**
+ * @return The beneficiary of the escrow.
+ */
+ function beneficiary() public view virtual returns (address payable) {
+ return _beneficiary;
+ }
+
+ /**
+ * @dev Stores funds that may later be refunded.
+ * @param refundee The address funds will be sent to if a refund occurs.
+ */
+ function deposit(address refundee) public payable virtual override {
+ require(state() == State.Active, "RefundEscrow: can only deposit while active");
+ super.deposit(refundee);
+ }
+
+ /**
+ * @dev Allows for the beneficiary to withdraw their funds, rejecting
+ * further deposits.
+ */
+ function close() public virtual onlyOwner {
+ require(state() == State.Active, "RefundEscrow: can only close while active");
+ _state = State.Closed;
+ emit RefundsClosed();
+ }
+
+ /**
+ * @dev Allows for refunds to take place, rejecting further deposits.
+ */
+ function enableRefunds() public virtual onlyOwner {
+ require(state() == State.Active, "RefundEscrow: can only enable refunds while active");
+ _state = State.Refunding;
+ emit RefundsEnabled();
+ }
+
+ /**
+ * @dev Withdraws the beneficiary's funds.
+ */
+ function beneficiaryWithdraw() public virtual {
+ require(state() == State.Closed, "RefundEscrow: beneficiary can only withdraw while closed");
+ beneficiary().sendValue(address(this).balance);
+ }
+
+ /**
+ * @dev Returns whether refundees can withdraw their deposits (be refunded). The overridden function receives a
+ * 'payee' argument, but we ignore it here since the condition is global, not per-payee.
+ */
+ function withdrawalAllowed(address) public view override returns (bool) {
+ return state() == State.Refunding;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol b/node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol
new file mode 100644
index 0000000..fc9b52f
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol
@@ -0,0 +1,28 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IERC165.sol";
+
+/**
+ * @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;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/introspection/ERC165Checker.sol b/node_modules/@openzeppelin/contracts/utils/introspection/ERC165Checker.sol
new file mode 100644
index 0000000..dbd86a9
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/introspection/ERC165Checker.sol
@@ -0,0 +1,112 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IERC165.sol";
+
+/**
+ * @dev Library used to query support of an interface declared via {IERC165}.
+ *
+ * Note that these functions return the actual result of the query: they do not
+ * `revert` if an interface is not supported. It is up to the caller to decide
+ * what to do in these cases.
+ */
+library ERC165Checker {
+ // As per the EIP-165 spec, no interface should ever match 0xffffffff
+ bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;
+
+ /**
+ * @dev Returns true if `account` supports the {IERC165} interface,
+ */
+ function supportsERC165(address account) internal view returns (bool) {
+ // Any contract that implements ERC165 must explicitly indicate support of
+ // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid
+ return
+ _supportsERC165Interface(account, type(IERC165).interfaceId) &&
+ !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);
+ }
+
+ /**
+ * @dev Returns true if `account` supports the interface defined by
+ * `interfaceId`. Support for {IERC165} itself is queried automatically.
+ *
+ * See {IERC165-supportsInterface}.
+ */
+ function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {
+ // query support of both ERC165 as per the spec and support of _interfaceId
+ return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);
+ }
+
+ /**
+ * @dev Returns a boolean array where each value corresponds to the
+ * interfaces passed in and whether they're supported or not. This allows
+ * you to batch check interfaces for a contract where your expectation
+ * is that some interfaces may not be supported.
+ *
+ * See {IERC165-supportsInterface}.
+ *
+ * _Available since v3.4._
+ */
+ function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)
+ internal
+ view
+ returns (bool[] memory)
+ {
+ // an array of booleans corresponding to interfaceIds and whether they're supported or not
+ bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);
+
+ // query support of ERC165 itself
+ if (supportsERC165(account)) {
+ // query support of each interface in interfaceIds
+ for (uint256 i = 0; i < interfaceIds.length; i++) {
+ interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);
+ }
+ }
+
+ return interfaceIdsSupported;
+ }
+
+ /**
+ * @dev Returns true if `account` supports all the interfaces defined in
+ * `interfaceIds`. Support for {IERC165} itself is queried automatically.
+ *
+ * Batch-querying can lead to gas savings by skipping repeated checks for
+ * {IERC165} support.
+ *
+ * See {IERC165-supportsInterface}.
+ */
+ function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {
+ // query support of ERC165 itself
+ if (!supportsERC165(account)) {
+ return false;
+ }
+
+ // query support of each interface in _interfaceIds
+ for (uint256 i = 0; i < interfaceIds.length; i++) {
+ if (!_supportsERC165Interface(account, interfaceIds[i])) {
+ return false;
+ }
+ }
+
+ // all interfaces supported
+ return true;
+ }
+
+ /**
+ * @notice Query if a contract implements an interface, does not check ERC165 support
+ * @param account The address of the contract to query for support of an interface
+ * @param interfaceId The interface identifier, as specified in ERC-165
+ * @return true if the contract at account indicates support of the interface with
+ * identifier interfaceId, false otherwise
+ * @dev Assumes that account contains a contract that supports ERC165, otherwise
+ * the behavior of this method is undefined. This precondition can be checked
+ * with {supportsERC165}.
+ * Interface identification is specified in ERC-165.
+ */
+ function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {
+ bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);
+ (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);
+ if (result.length < 32) return false;
+ return success && abi.decode(result, (bool));
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/introspection/ERC165Storage.sol b/node_modules/@openzeppelin/contracts/utils/introspection/ERC165Storage.sol
new file mode 100644
index 0000000..02a97db
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/introspection/ERC165Storage.sol
@@ -0,0 +1,41 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./ERC165.sol";
+
+/**
+ * @dev Storage based implementation of the {IERC165} interface.
+ *
+ * Contracts may inherit from this and call {_registerInterface} to declare
+ * their support of an interface.
+ */
+abstract contract ERC165Storage is ERC165 {
+ /**
+ * @dev Mapping of interface ids to whether or not it's supported.
+ */
+ mapping(bytes4 => bool) private _supportedInterfaces;
+
+ /**
+ * @dev See {IERC165-supportsInterface}.
+ */
+ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
+ return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];
+ }
+
+ /**
+ * @dev Registers the contract as an implementer of the interface defined by
+ * `interfaceId`. Support of the actual ERC165 interface is automatic and
+ * registering its interface id is not required.
+ *
+ * See {IERC165-supportsInterface}.
+ *
+ * Requirements:
+ *
+ * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).
+ */
+ function _registerInterface(bytes4 interfaceId) internal virtual {
+ require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
+ _supportedInterfaces[interfaceId] = true;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/introspection/ERC1820Implementer.sol b/node_modules/@openzeppelin/contracts/utils/introspection/ERC1820Implementer.sol
new file mode 100644
index 0000000..15a8759
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/introspection/ERC1820Implementer.sol
@@ -0,0 +1,43 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./IERC1820Implementer.sol";
+
+/**
+ * @dev Implementation of the {IERC1820Implementer} interface.
+ *
+ * Contracts may inherit from this and call {_registerInterfaceForAddress} to
+ * declare their willingness to be implementers.
+ * {IERC1820Registry-setInterfaceImplementer} should then be called for the
+ * registration to be complete.
+ */
+contract ERC1820Implementer is IERC1820Implementer {
+ bytes32 private constant _ERC1820_ACCEPT_MAGIC = keccak256("ERC1820_ACCEPT_MAGIC");
+
+ mapping(bytes32 => mapping(address => bool)) private _supportedInterfaces;
+
+ /**
+ * @dev See {IERC1820Implementer-canImplementInterfaceForAddress}.
+ */
+ function canImplementInterfaceForAddress(bytes32 interfaceHash, address account)
+ public
+ view
+ virtual
+ override
+ returns (bytes32)
+ {
+ return _supportedInterfaces[interfaceHash][account] ? _ERC1820_ACCEPT_MAGIC : bytes32(0x00);
+ }
+
+ /**
+ * @dev Declares the contract as willing to be an implementer of
+ * `interfaceHash` for `account`.
+ *
+ * See {IERC1820Registry-setInterfaceImplementer} and
+ * {IERC1820Registry-interfaceHash}.
+ */
+ function _registerInterfaceForAddress(bytes32 interfaceHash, address account) internal virtual {
+ _supportedInterfaces[interfaceHash][account] = true;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol b/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol
new file mode 100644
index 0000000..01c9c08
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol
@@ -0,0 +1,24 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Interface of the ERC165 standard, as defined in the
+ * https://eips.ethereum.org/EIPS/eip-165[EIP].
+ *
+ * Implementers can declare support of contract interfaces, which can then be
+ * queried by others ({ERC165Checker}).
+ *
+ * For an implementation, see {ERC165}.
+ */
+interface IERC165 {
+ /**
+ * @dev Returns true if this contract implements the interface defined by
+ * `interfaceId`. See the corresponding
+ * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
+ * to learn more about how these ids are created.
+ *
+ * This function call must use less than 30 000 gas.
+ */
+ function supportsInterface(bytes4 interfaceId) external view returns (bool);
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/introspection/IERC1820Implementer.sol b/node_modules/@openzeppelin/contracts/utils/introspection/IERC1820Implementer.sol
new file mode 100644
index 0000000..a7c1ce0
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/introspection/IERC1820Implementer.sol
@@ -0,0 +1,19 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Interface for an ERC1820 implementer, as defined in the
+ * https://eips.ethereum.org/EIPS/eip-1820#interface-implementation-erc1820implementerinterface[EIP].
+ * Used by contracts that will be registered as implementers in the
+ * {IERC1820Registry}.
+ */
+interface IERC1820Implementer {
+ /**
+ * @dev Returns a special value (`ERC1820_ACCEPT_MAGIC`) if this contract
+ * implements `interfaceHash` for `account`.
+ *
+ * See {IERC1820Registry-setInterfaceImplementer}.
+ */
+ function canImplementInterfaceForAddress(bytes32 interfaceHash, address account) external view returns (bytes32);
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/introspection/IERC1820Registry.sol b/node_modules/@openzeppelin/contracts/utils/introspection/IERC1820Registry.sol
new file mode 100644
index 0000000..a93e37b
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/introspection/IERC1820Registry.sol
@@ -0,0 +1,115 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Interface of the global ERC1820 Registry, as defined in the
+ * https://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register
+ * implementers for interfaces in this registry, as well as query support.
+ *
+ * Implementers may be shared by multiple accounts, and can also implement more
+ * than a single interface for each account. Contracts can implement interfaces
+ * for themselves, but externally-owned accounts (EOA) must delegate this to a
+ * contract.
+ *
+ * {IERC165} interfaces can also be queried via the registry.
+ *
+ * For an in-depth explanation and source code analysis, see the EIP text.
+ */
+interface IERC1820Registry {
+ /**
+ * @dev Sets `newManager` as the manager for `account`. A manager of an
+ * account is able to set interface implementers for it.
+ *
+ * By default, each account is its own manager. Passing a value of `0x0` in
+ * `newManager` will reset the manager to this initial state.
+ *
+ * Emits a {ManagerChanged} event.
+ *
+ * Requirements:
+ *
+ * - the caller must be the current manager for `account`.
+ */
+ function setManager(address account, address newManager) external;
+
+ /**
+ * @dev Returns the manager for `account`.
+ *
+ * See {setManager}.
+ */
+ function getManager(address account) external view returns (address);
+
+ /**
+ * @dev Sets the `implementer` contract as ``account``'s implementer for
+ * `interfaceHash`.
+ *
+ * `account` being the zero address is an alias for the caller's address.
+ * The zero address can also be used in `implementer` to remove an old one.
+ *
+ * See {interfaceHash} to learn how these are created.
+ *
+ * Emits an {InterfaceImplementerSet} event.
+ *
+ * Requirements:
+ *
+ * - the caller must be the current manager for `account`.
+ * - `interfaceHash` must not be an {IERC165} interface id (i.e. it must not
+ * end in 28 zeroes).
+ * - `implementer` must implement {IERC1820Implementer} and return true when
+ * queried for support, unless `implementer` is the caller. See
+ * {IERC1820Implementer-canImplementInterfaceForAddress}.
+ */
+ function setInterfaceImplementer(
+ address account,
+ bytes32 _interfaceHash,
+ address implementer
+ ) external;
+
+ /**
+ * @dev Returns the implementer of `interfaceHash` for `account`. If no such
+ * implementer is registered, returns the zero address.
+ *
+ * If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28
+ * zeroes), `account` will be queried for support of it.
+ *
+ * `account` being the zero address is an alias for the caller's address.
+ */
+ function getInterfaceImplementer(address account, bytes32 _interfaceHash) external view returns (address);
+
+ /**
+ * @dev Returns the interface hash for an `interfaceName`, as defined in the
+ * corresponding
+ * https://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the EIP].
+ */
+ function interfaceHash(string calldata interfaceName) external pure returns (bytes32);
+
+ /**
+ * @notice Updates the cache with whether the contract implements an ERC165 interface or not.
+ * @param account Address of the contract for which to update the cache.
+ * @param interfaceId ERC165 interface for which to update the cache.
+ */
+ function updateERC165Cache(address account, bytes4 interfaceId) external;
+
+ /**
+ * @notice Checks whether a contract implements an ERC165 interface or not.
+ * If the result is not cached a direct lookup on the contract address is performed.
+ * If the result is not cached or the cached value is out-of-date, the cache MUST be updated manually by calling
+ * {updateERC165Cache} with the contract address.
+ * @param account Address of the contract to check.
+ * @param interfaceId ERC165 interface to check.
+ * @return True if `account` implements `interfaceId`, false otherwise.
+ */
+ function implementsERC165Interface(address account, bytes4 interfaceId) external view returns (bool);
+
+ /**
+ * @notice Checks whether a contract implements an ERC165 interface or not without using nor updating the cache.
+ * @param account Address of the contract to check.
+ * @param interfaceId ERC165 interface to check.
+ * @return True if `account` implements `interfaceId`, false otherwise.
+ */
+ function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) external view returns (bool);
+
+ event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer);
+
+ event ManagerChanged(address indexed account, address indexed newManager);
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/math/Math.sol b/node_modules/@openzeppelin/contracts/utils/math/Math.sol
new file mode 100644
index 0000000..7280bdd
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/math/Math.sol
@@ -0,0 +1,42 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Standard math utilities missing in the Solidity language.
+ */
+library Math {
+ /**
+ * @dev Returns the largest of two numbers.
+ */
+ function max(uint256 a, uint256 b) internal pure returns (uint256) {
+ return a >= b ? a : b;
+ }
+
+ /**
+ * @dev Returns the smallest of two numbers.
+ */
+ function min(uint256 a, uint256 b) internal pure returns (uint256) {
+ return a < b ? a : b;
+ }
+
+ /**
+ * @dev Returns the average of two numbers. The result is rounded towards
+ * zero.
+ */
+ function average(uint256 a, uint256 b) internal pure returns (uint256) {
+ // (a + b) / 2 can overflow.
+ return (a & b) + (a ^ b) / 2;
+ }
+
+ /**
+ * @dev Returns the ceiling of the division of two numbers.
+ *
+ * This differs from standard division with `/` in that it rounds up instead
+ * of rounding down.
+ */
+ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
+ // (a + b - 1) / b can overflow on addition, so we distribute.
+ return a / b + (a % b == 0 ? 0 : 1);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol b/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol
new file mode 100644
index 0000000..8f54e39
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol
@@ -0,0 +1,240 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
+ * checks.
+ *
+ * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
+ * easily result in undesired exploitation or bugs, since developers usually
+ * assume that overflows raise errors. `SafeCast` restores this intuition by
+ * reverting the transaction when such an operation overflows.
+ *
+ * Using this library instead of the unchecked operations eliminates an entire
+ * class of bugs, so it's recommended to use it always.
+ *
+ * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing
+ * all math on `uint256` and `int256` and then downcasting.
+ */
+library SafeCast {
+ /**
+ * @dev Returns the downcasted uint224 from uint256, reverting on
+ * overflow (when the input is greater than largest uint224).
+ *
+ * Counterpart to Solidity's `uint224` operator.
+ *
+ * Requirements:
+ *
+ * - input must fit into 224 bits
+ */
+ function toUint224(uint256 value) internal pure returns (uint224) {
+ require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
+ return uint224(value);
+ }
+
+ /**
+ * @dev Returns the downcasted uint128 from uint256, reverting on
+ * overflow (when the input is greater than largest uint128).
+ *
+ * Counterpart to Solidity's `uint128` operator.
+ *
+ * Requirements:
+ *
+ * - input must fit into 128 bits
+ */
+ function toUint128(uint256 value) internal pure returns (uint128) {
+ require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
+ return uint128(value);
+ }
+
+ /**
+ * @dev Returns the downcasted uint96 from uint256, reverting on
+ * overflow (when the input is greater than largest uint96).
+ *
+ * Counterpart to Solidity's `uint96` operator.
+ *
+ * Requirements:
+ *
+ * - input must fit into 96 bits
+ */
+ function toUint96(uint256 value) internal pure returns (uint96) {
+ require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
+ return uint96(value);
+ }
+
+ /**
+ * @dev Returns the downcasted uint64 from uint256, reverting on
+ * overflow (when the input is greater than largest uint64).
+ *
+ * Counterpart to Solidity's `uint64` operator.
+ *
+ * Requirements:
+ *
+ * - input must fit into 64 bits
+ */
+ function toUint64(uint256 value) internal pure returns (uint64) {
+ require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
+ return uint64(value);
+ }
+
+ /**
+ * @dev Returns the downcasted uint32 from uint256, reverting on
+ * overflow (when the input is greater than largest uint32).
+ *
+ * Counterpart to Solidity's `uint32` operator.
+ *
+ * Requirements:
+ *
+ * - input must fit into 32 bits
+ */
+ function toUint32(uint256 value) internal pure returns (uint32) {
+ require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
+ return uint32(value);
+ }
+
+ /**
+ * @dev Returns the downcasted uint16 from uint256, reverting on
+ * overflow (when the input is greater than largest uint16).
+ *
+ * Counterpart to Solidity's `uint16` operator.
+ *
+ * Requirements:
+ *
+ * - input must fit into 16 bits
+ */
+ function toUint16(uint256 value) internal pure returns (uint16) {
+ require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
+ return uint16(value);
+ }
+
+ /**
+ * @dev Returns the downcasted uint8 from uint256, reverting on
+ * overflow (when the input is greater than largest uint8).
+ *
+ * Counterpart to Solidity's `uint8` operator.
+ *
+ * Requirements:
+ *
+ * - input must fit into 8 bits.
+ */
+ function toUint8(uint256 value) internal pure returns (uint8) {
+ require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
+ return uint8(value);
+ }
+
+ /**
+ * @dev Converts a signed int256 into an unsigned uint256.
+ *
+ * Requirements:
+ *
+ * - input must be greater than or equal to 0.
+ */
+ function toUint256(int256 value) internal pure returns (uint256) {
+ require(value >= 0, "SafeCast: value must be positive");
+ return uint256(value);
+ }
+
+ /**
+ * @dev Returns the downcasted int128 from int256, reverting on
+ * overflow (when the input is less than smallest int128 or
+ * greater than largest int128).
+ *
+ * Counterpart to Solidity's `int128` operator.
+ *
+ * Requirements:
+ *
+ * - input must fit into 128 bits
+ *
+ * _Available since v3.1._
+ */
+ function toInt128(int256 value) internal pure returns (int128) {
+ require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
+ return int128(value);
+ }
+
+ /**
+ * @dev Returns the downcasted int64 from int256, reverting on
+ * overflow (when the input is less than smallest int64 or
+ * greater than largest int64).
+ *
+ * Counterpart to Solidity's `int64` operator.
+ *
+ * Requirements:
+ *
+ * - input must fit into 64 bits
+ *
+ * _Available since v3.1._
+ */
+ function toInt64(int256 value) internal pure returns (int64) {
+ require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
+ return int64(value);
+ }
+
+ /**
+ * @dev Returns the downcasted int32 from int256, reverting on
+ * overflow (when the input is less than smallest int32 or
+ * greater than largest int32).
+ *
+ * Counterpart to Solidity's `int32` operator.
+ *
+ * Requirements:
+ *
+ * - input must fit into 32 bits
+ *
+ * _Available since v3.1._
+ */
+ function toInt32(int256 value) internal pure returns (int32) {
+ require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
+ return int32(value);
+ }
+
+ /**
+ * @dev Returns the downcasted int16 from int256, reverting on
+ * overflow (when the input is less than smallest int16 or
+ * greater than largest int16).
+ *
+ * Counterpart to Solidity's `int16` operator.
+ *
+ * Requirements:
+ *
+ * - input must fit into 16 bits
+ *
+ * _Available since v3.1._
+ */
+ function toInt16(int256 value) internal pure returns (int16) {
+ require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
+ return int16(value);
+ }
+
+ /**
+ * @dev Returns the downcasted int8 from int256, reverting on
+ * overflow (when the input is less than smallest int8 or
+ * greater than largest int8).
+ *
+ * Counterpart to Solidity's `int8` operator.
+ *
+ * Requirements:
+ *
+ * - input must fit into 8 bits.
+ *
+ * _Available since v3.1._
+ */
+ function toInt8(int256 value) internal pure returns (int8) {
+ require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
+ return int8(value);
+ }
+
+ /**
+ * @dev Converts an unsigned uint256 into a signed int256.
+ *
+ * Requirements:
+ *
+ * - input must be less than or equal to maxInt256.
+ */
+ function toInt256(uint256 value) internal pure returns (int256) {
+ // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
+ require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
+ return int256(value);
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/math/SafeMath.sol b/node_modules/@openzeppelin/contracts/utils/math/SafeMath.sol
new file mode 100644
index 0000000..112eed1
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/math/SafeMath.sol
@@ -0,0 +1,226 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+// CAUTION
+// This version of SafeMath should only be used with Solidity 0.8 or later,
+// because it relies on the compiler's built in overflow checks.
+
+/**
+ * @dev Wrappers over Solidity's arithmetic operations.
+ *
+ * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
+ * now has built in overflow checking.
+ */
+library SafeMath {
+ /**
+ * @dev Returns the addition of two unsigned integers, with an overflow flag.
+ *
+ * _Available since v3.4._
+ */
+ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
+ unchecked {
+ uint256 c = a + b;
+ if (c < a) return (false, 0);
+ return (true, c);
+ }
+ }
+
+ /**
+ * @dev Returns the substraction of two unsigned integers, with an overflow flag.
+ *
+ * _Available since v3.4._
+ */
+ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
+ unchecked {
+ if (b > a) return (false, 0);
+ return (true, a - b);
+ }
+ }
+
+ /**
+ * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
+ *
+ * _Available since v3.4._
+ */
+ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
+ unchecked {
+ // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
+ // benefit is lost if 'b' is also tested.
+ // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
+ if (a == 0) return (true, 0);
+ uint256 c = a * b;
+ if (c / a != b) return (false, 0);
+ return (true, c);
+ }
+ }
+
+ /**
+ * @dev Returns the division of two unsigned integers, with a division by zero flag.
+ *
+ * _Available since v3.4._
+ */
+ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
+ unchecked {
+ if (b == 0) return (false, 0);
+ return (true, a / b);
+ }
+ }
+
+ /**
+ * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
+ *
+ * _Available since v3.4._
+ */
+ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
+ unchecked {
+ if (b == 0) return (false, 0);
+ return (true, a % b);
+ }
+ }
+
+ /**
+ * @dev Returns the addition of two unsigned integers, reverting on
+ * overflow.
+ *
+ * Counterpart to Solidity's `+` operator.
+ *
+ * Requirements:
+ *
+ * - Addition cannot overflow.
+ */
+ function add(uint256 a, uint256 b) internal pure returns (uint256) {
+ return a + b;
+ }
+
+ /**
+ * @dev Returns the subtraction of two unsigned integers, reverting on
+ * overflow (when the result is negative).
+ *
+ * Counterpart to Solidity's `-` operator.
+ *
+ * Requirements:
+ *
+ * - Subtraction cannot overflow.
+ */
+ function sub(uint256 a, uint256 b) internal pure returns (uint256) {
+ return a - b;
+ }
+
+ /**
+ * @dev Returns the multiplication of two unsigned integers, reverting on
+ * overflow.
+ *
+ * Counterpart to Solidity's `*` operator.
+ *
+ * Requirements:
+ *
+ * - Multiplication cannot overflow.
+ */
+ function mul(uint256 a, uint256 b) internal pure returns (uint256) {
+ return a * b;
+ }
+
+ /**
+ * @dev Returns the integer division of two unsigned integers, reverting on
+ * division by zero. The result is rounded towards zero.
+ *
+ * Counterpart to Solidity's `/` operator.
+ *
+ * Requirements:
+ *
+ * - The divisor cannot be zero.
+ */
+ function div(uint256 a, uint256 b) internal pure returns (uint256) {
+ return a / b;
+ }
+
+ /**
+ * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
+ * reverting when dividing by zero.
+ *
+ * Counterpart to Solidity's `%` operator. This function uses a `revert`
+ * opcode (which leaves remaining gas untouched) while Solidity uses an
+ * invalid opcode to revert (consuming all remaining gas).
+ *
+ * Requirements:
+ *
+ * - The divisor cannot be zero.
+ */
+ function mod(uint256 a, uint256 b) internal pure returns (uint256) {
+ return a % b;
+ }
+
+ /**
+ * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
+ * overflow (when the result is negative).
+ *
+ * CAUTION: This function is deprecated because it requires allocating memory for the error
+ * message unnecessarily. For custom revert reasons use {trySub}.
+ *
+ * Counterpart to Solidity's `-` operator.
+ *
+ * Requirements:
+ *
+ * - Subtraction cannot overflow.
+ */
+ function sub(
+ uint256 a,
+ uint256 b,
+ string memory errorMessage
+ ) internal pure returns (uint256) {
+ unchecked {
+ require(b <= a, errorMessage);
+ return a - b;
+ }
+ }
+
+ /**
+ * @dev Returns the integer division of two unsigned integers, reverting with custom message on
+ * division by zero. The result is rounded towards zero.
+ *
+ * Counterpart to Solidity's `/` operator. Note: this function uses a
+ * `revert` opcode (which leaves remaining gas untouched) while Solidity
+ * uses an invalid opcode to revert (consuming all remaining gas).
+ *
+ * Requirements:
+ *
+ * - The divisor cannot be zero.
+ */
+ function div(
+ uint256 a,
+ uint256 b,
+ string memory errorMessage
+ ) internal pure returns (uint256) {
+ unchecked {
+ require(b > 0, errorMessage);
+ return a / b;
+ }
+ }
+
+ /**
+ * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
+ * reverting with custom message when dividing by zero.
+ *
+ * CAUTION: This function is deprecated because it requires allocating memory for the error
+ * message unnecessarily. For custom revert reasons use {tryMod}.
+ *
+ * Counterpart to Solidity's `%` operator. This function uses a `revert`
+ * opcode (which leaves remaining gas untouched) while Solidity uses an
+ * invalid opcode to revert (consuming all remaining gas).
+ *
+ * Requirements:
+ *
+ * - The divisor cannot be zero.
+ */
+ function mod(
+ uint256 a,
+ uint256 b,
+ string memory errorMessage
+ ) internal pure returns (uint256) {
+ unchecked {
+ require(b > 0, errorMessage);
+ return a % b;
+ }
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/math/SignedSafeMath.sol b/node_modules/@openzeppelin/contracts/utils/math/SignedSafeMath.sol
new file mode 100644
index 0000000..d54b8ff
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/math/SignedSafeMath.sol
@@ -0,0 +1,67 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Wrappers over Solidity's arithmetic operations.
+ *
+ * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler
+ * now has built in overflow checking.
+ */
+library SignedSafeMath {
+ /**
+ * @dev Returns the multiplication of two signed integers, reverting on
+ * overflow.
+ *
+ * Counterpart to Solidity's `*` operator.
+ *
+ * Requirements:
+ *
+ * - Multiplication cannot overflow.
+ */
+ function mul(int256 a, int256 b) internal pure returns (int256) {
+ return a * b;
+ }
+
+ /**
+ * @dev Returns the integer division of two signed integers. Reverts on
+ * division by zero. The result is rounded towards zero.
+ *
+ * Counterpart to Solidity's `/` operator.
+ *
+ * Requirements:
+ *
+ * - The divisor cannot be zero.
+ */
+ function div(int256 a, int256 b) internal pure returns (int256) {
+ return a / b;
+ }
+
+ /**
+ * @dev Returns the subtraction of two signed integers, reverting on
+ * overflow.
+ *
+ * Counterpart to Solidity's `-` operator.
+ *
+ * Requirements:
+ *
+ * - Subtraction cannot overflow.
+ */
+ function sub(int256 a, int256 b) internal pure returns (int256) {
+ return a - b;
+ }
+
+ /**
+ * @dev Returns the addition of two signed integers, reverting on
+ * overflow.
+ *
+ * Counterpart to Solidity's `+` operator.
+ *
+ * Requirements:
+ *
+ * - Addition cannot overflow.
+ */
+ function add(int256 a, int256 b) internal pure returns (int256) {
+ return a + b;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/structs/BitMaps.sol b/node_modules/@openzeppelin/contracts/utils/structs/BitMaps.sol
new file mode 100644
index 0000000..eff8180
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/structs/BitMaps.sol
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Library for managing uint256 to bool mapping in a compact and efficient way, providing the keys are sequential.
+ * Largelly inspired by Uniswap's https://github.com/Uniswap/merkle-distributor/blob/master/contracts/MerkleDistributor.sol[merkle-distributor].
+ */
+library BitMaps {
+ struct BitMap {
+ mapping(uint256 => uint256) _data;
+ }
+
+ /**
+ * @dev Returns whether the bit at `index` is set.
+ */
+ function get(BitMap storage bitmap, uint256 index) internal view returns (bool) {
+ uint256 bucket = index >> 8;
+ uint256 mask = 1 << (index & 0xff);
+ return bitmap._data[bucket] & mask != 0;
+ }
+
+ /**
+ * @dev Sets the bit at `index` to the boolean `value`.
+ */
+ function setTo(
+ BitMap storage bitmap,
+ uint256 index,
+ bool value
+ ) internal {
+ if (value) {
+ set(bitmap, index);
+ } else {
+ unset(bitmap, index);
+ }
+ }
+
+ /**
+ * @dev Sets the bit at `index`.
+ */
+ function set(BitMap storage bitmap, uint256 index) internal {
+ uint256 bucket = index >> 8;
+ uint256 mask = 1 << (index & 0xff);
+ bitmap._data[bucket] |= mask;
+ }
+
+ /**
+ * @dev Unsets the bit at `index`.
+ */
+ function unset(BitMap storage bitmap, uint256 index) internal {
+ uint256 bucket = index >> 8;
+ uint256 mask = 1 << (index & 0xff);
+ bitmap._data[bucket] &= ~mask;
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/structs/EnumerableMap.sol b/node_modules/@openzeppelin/contracts/utils/structs/EnumerableMap.sol
new file mode 100644
index 0000000..a853f3b
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/structs/EnumerableMap.sol
@@ -0,0 +1,239 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./EnumerableSet.sol";
+
+/**
+ * @dev Library for managing an enumerable variant of Solidity's
+ * https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`]
+ * type.
+ *
+ * Maps have the following properties:
+ *
+ * - Entries are added, removed, and checked for existence in constant time
+ * (O(1)).
+ * - Entries are enumerated in O(n). No guarantees are made on the ordering.
+ *
+ * ```
+ * contract Example {
+ * // Add the library methods
+ * using EnumerableMap for EnumerableMap.UintToAddressMap;
+ *
+ * // Declare a set state variable
+ * EnumerableMap.UintToAddressMap private myMap;
+ * }
+ * ```
+ *
+ * As of v3.0.0, only maps of type `uint256 -> address` (`UintToAddressMap`) are
+ * supported.
+ */
+library EnumerableMap {
+ using EnumerableSet for EnumerableSet.Bytes32Set;
+
+ // To implement this library for multiple types with as little code
+ // repetition as possible, we write it in terms of a generic Map type with
+ // bytes32 keys and values.
+ // The Map implementation uses private functions, and user-facing
+ // implementations (such as Uint256ToAddressMap) are just wrappers around
+ // the underlying Map.
+ // This means that we can only create new EnumerableMaps for types that fit
+ // in bytes32.
+
+ struct Map {
+ // Storage of keys
+ EnumerableSet.Bytes32Set _keys;
+ mapping(bytes32 => bytes32) _values;
+ }
+
+ /**
+ * @dev Adds a key-value pair to a map, or updates the value for an existing
+ * key. O(1).
+ *
+ * Returns true if the key was added to the map, that is if it was not
+ * already present.
+ */
+ function _set(
+ Map storage map,
+ bytes32 key,
+ bytes32 value
+ ) private returns (bool) {
+ map._values[key] = value;
+ return map._keys.add(key);
+ }
+
+ /**
+ * @dev Removes a key-value pair from a map. O(1).
+ *
+ * Returns true if the key was removed from the map, that is if it was present.
+ */
+ function _remove(Map storage map, bytes32 key) private returns (bool) {
+ delete map._values[key];
+ return map._keys.remove(key);
+ }
+
+ /**
+ * @dev Returns true if the key is in the map. O(1).
+ */
+ function _contains(Map storage map, bytes32 key) private view returns (bool) {
+ return map._keys.contains(key);
+ }
+
+ /**
+ * @dev Returns the number of key-value pairs in the map. O(1).
+ */
+ function _length(Map storage map) private view returns (uint256) {
+ return map._keys.length();
+ }
+
+ /**
+ * @dev Returns the key-value pair stored at position `index` in the map. O(1).
+ *
+ * Note that there are no guarantees on the ordering of entries inside the
+ * array, and it may change when more entries are added or removed.
+ *
+ * Requirements:
+ *
+ * - `index` must be strictly less than {length}.
+ */
+ function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {
+ bytes32 key = map._keys.at(index);
+ return (key, map._values[key]);
+ }
+
+ /**
+ * @dev Tries to returns the value associated with `key`. O(1).
+ * Does not revert if `key` is not in the map.
+ */
+ function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {
+ bytes32 value = map._values[key];
+ if (value == bytes32(0)) {
+ return (_contains(map, key), bytes32(0));
+ } else {
+ return (true, value);
+ }
+ }
+
+ /**
+ * @dev Returns the value associated with `key`. O(1).
+ *
+ * Requirements:
+ *
+ * - `key` must be in the map.
+ */
+ function _get(Map storage map, bytes32 key) private view returns (bytes32) {
+ bytes32 value = map._values[key];
+ require(value != 0 || _contains(map, key), "EnumerableMap: nonexistent key");
+ return value;
+ }
+
+ /**
+ * @dev Same as {_get}, with a custom error message when `key` is not in the map.
+ *
+ * CAUTION: This function is deprecated because it requires allocating memory for the error
+ * message unnecessarily. For custom revert reasons use {_tryGet}.
+ */
+ function _get(
+ Map storage map,
+ bytes32 key,
+ string memory errorMessage
+ ) private view returns (bytes32) {
+ bytes32 value = map._values[key];
+ require(value != 0 || _contains(map, key), errorMessage);
+ return value;
+ }
+
+ // UintToAddressMap
+
+ struct UintToAddressMap {
+ Map _inner;
+ }
+
+ /**
+ * @dev Adds a key-value pair to a map, or updates the value for an existing
+ * key. O(1).
+ *
+ * Returns true if the key was added to the map, that is if it was not
+ * already present.
+ */
+ function set(
+ UintToAddressMap storage map,
+ uint256 key,
+ address value
+ ) internal returns (bool) {
+ return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));
+ }
+
+ /**
+ * @dev Removes a value from a set. O(1).
+ *
+ * Returns true if the key was removed from the map, that is if it was present.
+ */
+ function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {
+ return _remove(map._inner, bytes32(key));
+ }
+
+ /**
+ * @dev Returns true if the key is in the map. O(1).
+ */
+ function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {
+ return _contains(map._inner, bytes32(key));
+ }
+
+ /**
+ * @dev Returns the number of elements in the map. O(1).
+ */
+ function length(UintToAddressMap storage map) internal view returns (uint256) {
+ return _length(map._inner);
+ }
+
+ /**
+ * @dev Returns the element stored at position `index` in the set. O(1).
+ * Note that there are no guarantees on the ordering of values inside the
+ * array, and it may change when more values are added or removed.
+ *
+ * Requirements:
+ *
+ * - `index` must be strictly less than {length}.
+ */
+ function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {
+ (bytes32 key, bytes32 value) = _at(map._inner, index);
+ return (uint256(key), address(uint160(uint256(value))));
+ }
+
+ /**
+ * @dev Tries to returns the value associated with `key`. O(1).
+ * Does not revert if `key` is not in the map.
+ *
+ * _Available since v3.4._
+ */
+ function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {
+ (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));
+ return (success, address(uint160(uint256(value))));
+ }
+
+ /**
+ * @dev Returns the value associated with `key`. O(1).
+ *
+ * Requirements:
+ *
+ * - `key` must be in the map.
+ */
+ function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {
+ return address(uint160(uint256(_get(map._inner, bytes32(key)))));
+ }
+
+ /**
+ * @dev Same as {get}, with a custom error message when `key` is not in the map.
+ *
+ * CAUTION: This function is deprecated because it requires allocating memory for the error
+ * message unnecessarily. For custom revert reasons use {tryGet}.
+ */
+ function get(
+ UintToAddressMap storage map,
+ uint256 key,
+ string memory errorMessage
+ ) internal view returns (address) {
+ return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));
+ }
+}
diff --git a/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol b/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol
new file mode 100644
index 0000000..e3cf13f
--- /dev/null
+++ b/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol
@@ -0,0 +1,356 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+/**
+ * @dev Library for managing
+ * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
+ * types.
+ *
+ * Sets have the following properties:
+ *
+ * - Elements are added, removed, and checked for existence in constant time
+ * (O(1)).
+ * - Elements are enumerated in O(n). No guarantees are made on the ordering.
+ *
+ * ```
+ * contract Example {
+ * // Add the library methods
+ * using EnumerableSet for EnumerableSet.AddressSet;
+ *
+ * // Declare a set state variable
+ * EnumerableSet.AddressSet private mySet;
+ * }
+ * ```
+ *
+ * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
+ * and `uint256` (`UintSet`) are supported.
+ */
+library EnumerableSet {
+ // To implement this library for multiple types with as little code
+ // repetition as possible, we write it in terms of a generic Set type with
+ // bytes32 values.
+ // The Set implementation uses private functions, and user-facing
+ // implementations (such as AddressSet) are just wrappers around the
+ // underlying Set.
+ // This means that we can only create new EnumerableSets for types that fit
+ // in bytes32.
+
+ struct Set {
+ // Storage of set values
+ bytes32[] _values;
+ // Position of the value in the `values` array, plus 1 because index 0
+ // means a value is not in the set.
+ mapping(bytes32 => uint256) _indexes;
+ }
+
+ /**
+ * @dev Add a value to a set. O(1).
+ *
+ * Returns true if the value was added to the set, that is if it was not
+ * already present.
+ */
+ function _add(Set storage set, bytes32 value) private returns (bool) {
+ if (!_contains(set, value)) {
+ set._values.push(value);
+ // The value is stored at length-1, but we add 1 to all indexes
+ // and use 0 as a sentinel value
+ set._indexes[value] = set._values.length;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * @dev Removes a value from a set. O(1).
+ *
+ * Returns true if the value was removed from the set, that is if it was
+ * present.
+ */
+ function _remove(Set storage set, bytes32 value) private returns (bool) {
+ // We read and store the value's index to prevent multiple reads from the same storage slot
+ uint256 valueIndex = set._indexes[value];
+
+ if (valueIndex != 0) {
+ // Equivalent to contains(set, value)
+ // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
+ // the array, and then remove the last element (sometimes called as 'swap and pop').
+ // This modifies the order of the array, as noted in {at}.
+
+ uint256 toDeleteIndex = valueIndex - 1;
+ uint256 lastIndex = set._values.length - 1;
+
+ if (lastIndex != toDeleteIndex) {
+ bytes32 lastvalue = set._values[lastIndex];
+
+ // Move the last value to the index where the value to delete is
+ set._values[toDeleteIndex] = lastvalue;
+ // Update the index for the moved value
+ set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex
+ }
+
+ // Delete the slot where the moved value was stored
+ set._values.pop();
+
+ // Delete the index for the deleted slot
+ delete set._indexes[value];
+
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * @dev Returns true if the value is in the set. O(1).
+ */
+ function _contains(Set storage set, bytes32 value) private view returns (bool) {
+ return set._indexes[value] != 0;
+ }
+
+ /**
+ * @dev Returns the number of values on the set. O(1).
+ */
+ function _length(Set storage set) private view returns (uint256) {
+ return set._values.length;
+ }
+
+ /**
+ * @dev Returns the value stored at position `index` in the set. O(1).
+ *
+ * Note that there are no guarantees on the ordering of values inside the
+ * array, and it may change when more values are added or removed.
+ *
+ * Requirements:
+ *
+ * - `index` must be strictly less than {length}.
+ */
+ function _at(Set storage set, uint256 index) private view returns (bytes32) {
+ return set._values[index];
+ }
+
+ /**
+ * @dev Return the entire set in an array
+ *
+ * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
+ * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
+ * this function has an unbounded cost, and using it as part of a state-changing function may render the function
+ * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
+ */
+ function _values(Set storage set) private view returns (bytes32[] memory) {
+ return set._values;
+ }
+
+ // Bytes32Set
+
+ struct Bytes32Set {
+ Set _inner;
+ }
+
+ /**
+ * @dev Add a value to a set. O(1).
+ *
+ * Returns true if the value was added to the set, that is if it was not
+ * already present.
+ */
+ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
+ return _add(set._inner, value);
+ }
+
+ /**
+ * @dev Removes a value from a set. O(1).
+ *
+ * Returns true if the value was removed from the set, that is if it was
+ * present.
+ */
+ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
+ return _remove(set._inner, value);
+ }
+
+ /**
+ * @dev Returns true if the value is in the set. O(1).
+ */
+ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
+ return _contains(set._inner, value);
+ }
+
+ /**
+ * @dev Returns the number of values in the set. O(1).
+ */
+ function length(Bytes32Set storage set) internal view returns (uint256) {
+ return _length(set._inner);
+ }
+
+ /**
+ * @dev Returns the value stored at position `index` in the set. O(1).
+ *
+ * Note that there are no guarantees on the ordering of values inside the
+ * array, and it may change when more values are added or removed.
+ *
+ * Requirements:
+ *
+ * - `index` must be strictly less than {length}.
+ */
+ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
+ return _at(set._inner, index);
+ }
+
+ /**
+ * @dev Return the entire set in an array
+ *
+ * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
+ * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
+ * this function has an unbounded cost, and using it as part of a state-changing function may render the function
+ * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
+ */
+ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
+ return _values(set._inner);
+ }
+
+ // AddressSet
+
+ struct AddressSet {
+ Set _inner;
+ }
+
+ /**
+ * @dev Add a value to a set. O(1).
+ *
+ * Returns true if the value was added to the set, that is if it was not
+ * already present.
+ */
+ function add(AddressSet storage set, address value) internal returns (bool) {
+ return _add(set._inner, bytes32(uint256(uint160(value))));
+ }
+
+ /**
+ * @dev Removes a value from a set. O(1).
+ *
+ * Returns true if the value was removed from the set, that is if it was
+ * present.
+ */
+ function remove(AddressSet storage set, address value) internal returns (bool) {
+ return _remove(set._inner, bytes32(uint256(uint160(value))));
+ }
+
+ /**
+ * @dev Returns true if the value is in the set. O(1).
+ */
+ function contains(AddressSet storage set, address value) internal view returns (bool) {
+ return _contains(set._inner, bytes32(uint256(uint160(value))));
+ }
+
+ /**
+ * @dev Returns the number of values in the set. O(1).
+ */
+ function length(AddressSet storage set) internal view returns (uint256) {
+ return _length(set._inner);
+ }
+
+ /**
+ * @dev Returns the value stored at position `index` in the set. O(1).
+ *
+ * Note that there are no guarantees on the ordering of values inside the
+ * array, and it may change when more values are added or removed.
+ *
+ * Requirements:
+ *
+ * - `index` must be strictly less than {length}.
+ */
+ function at(AddressSet storage set, uint256 index) internal view returns (address) {
+ return address(uint160(uint256(_at(set._inner, index))));
+ }
+
+ /**
+ * @dev Return the entire set in an array
+ *
+ * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
+ * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
+ * this function has an unbounded cost, and using it as part of a state-changing function may render the function
+ * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
+ */
+ function values(AddressSet storage set) internal view returns (address[] memory) {
+ bytes32[] memory store = _values(set._inner);
+ address[] memory result;
+
+ assembly {
+ result := store
+ }
+
+ return result;
+ }
+
+ // UintSet
+
+ struct UintSet {
+ Set _inner;
+ }
+
+ /**
+ * @dev Add a value to a set. O(1).
+ *
+ * Returns true if the value was added to the set, that is if it was not
+ * already present.
+ */
+ function add(UintSet storage set, uint256 value) internal returns (bool) {
+ return _add(set._inner, bytes32(value));
+ }
+
+ /**
+ * @dev Removes a value from a set. O(1).
+ *
+ * Returns true if the value was removed from the set, that is if it was
+ * present.
+ */
+ function remove(UintSet storage set, uint256 value) internal returns (bool) {
+ return _remove(set._inner, bytes32(value));
+ }
+
+ /**
+ * @dev Returns true if the value is in the set. O(1).
+ */
+ function contains(UintSet storage set, uint256 value) internal view returns (bool) {
+ return _contains(set._inner, bytes32(value));
+ }
+
+ /**
+ * @dev Returns the number of values on the set. O(1).
+ */
+ function length(UintSet storage set) internal view returns (uint256) {
+ return _length(set._inner);
+ }
+
+ /**
+ * @dev Returns the value stored at position `index` in the set. O(1).
+ *
+ * Note that there are no guarantees on the ordering of values inside the
+ * array, and it may change when more values are added or removed.
+ *
+ * Requirements:
+ *
+ * - `index` must be strictly less than {length}.
+ */
+ function at(UintSet storage set, uint256 index) internal view returns (uint256) {
+ return uint256(_at(set._inner, index));
+ }
+
+ /**
+ * @dev Return the entire set in an array
+ *
+ * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
+ * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
+ * this function has an unbounded cost, and using it as part of a state-changing function may render the function
+ * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
+ */
+ function values(UintSet storage set) internal view returns (uint256[] memory) {
+ bytes32[] memory store = _values(set._inner);
+ uint256[] memory result;
+
+ assembly {
+ result := store
+ }
+
+ return result;
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..b90e732
--- /dev/null
+++ b/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "firstnft",
+ "version": "1.0.0",
+ "description": "",
+ "main": "truffle-config.js",
+ "directories": {
+ "test": "test"
+ },
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "@openzeppelin/contracts": "^4.3.1"
+ }
+}
diff --git a/test/.gitkeep b/test/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/truffle-config.js b/truffle-config.js
new file mode 100644
index 0000000..84f7829
--- /dev/null
+++ b/truffle-config.js
@@ -0,0 +1,116 @@
+/**
+ * Use this file to configure your truffle project. It's seeded with some
+ * common settings for different networks and features like migrations,
+ * compilation and testing. Uncomment the ones you need or modify
+ * them to suit your project as necessary.
+ *
+ * More information about configuration can be found at:
+ *
+ * trufflesuite.com/docs/advanced/configuration
+ *
+ * To deploy via Infura you'll need a wallet provider (like @truffle/hdwallet-provider)
+ * to sign your transactions before they're sent to a remote public node. Infura accounts
+ * are available for free at: infura.io/register.
+ *
+ * You'll also need a mnemonic - the twelve word phrase the wallet uses to generate
+ * public/private key pairs. If you're publishing your code to GitHub make sure you load this
+ * phrase from a file you've .gitignored so it doesn't accidentally become public.
+ *
+ */
+
+// const HDWalletProvider = require('@truffle/hdwallet-provider');
+//
+// const fs = require('fs');
+// const mnemonic = fs.readFileSync(".secret").toString().trim();
+
+module.exports = {
+ /**
+ * Networks define how you connect to your ethereum client and let you set the
+ * defaults web3 uses to send transactions. If you don't specify one truffle
+ * will spin up a development blockchain for you on port 9545 when you
+ * run `develop` or `test`. You can ask a truffle command to use a specific
+ * network from the command line, e.g
+ *
+ * $ truffle test --network
+ */
+
+ networks: {
+ // Useful for testing. The `development` name is special - truffle uses it by default
+ // if it's defined here and no other network is specified at the command line.
+ // You should run a client (like ganache-cli, geth or parity) in a separate terminal
+ // tab if you use this network and you must also set the `host`, `port` and `network_id`
+ // options below to some value.
+ //
+ development: {
+ host: "127.0.0.1", // Localhost (default: none)
+ port: 8545, // Standard Ethereum port (default: none)
+ network_id: "*", // Any network (default: none)
+ },
+ // Another network with more advanced options...
+ // advanced: {
+ // port: 8777, // Custom port
+ // network_id: 1342, // Custom network
+ // gas: 8500000, // Gas sent with each transaction (default: ~6700000)
+ // gasPrice: 20000000000, // 20 gwei (in wei) (default: 100 gwei)
+ // from: , // Account to send txs from (default: accounts[0])
+ // websocket: true // Enable EventEmitter interface for web3 (default: false)
+ // },
+ // Useful for deploying to a public network.
+ // NB: It's important to wrap the provider as a function.
+ // ropsten: {
+ // provider: () => new HDWalletProvider(mnemonic, `https://ropsten.infura.io/v3/YOUR-PROJECT-ID`),
+ // network_id: 3, // Ropsten's id
+ // gas: 5500000, // Ropsten has a lower block limit than mainnet
+ // confirmations: 2, // # of confs to wait between deployments. (default: 0)
+ // timeoutBlocks: 200, // # of blocks before a deployment times out (minimum/default: 50)
+ // skipDryRun: true // Skip dry run before migrations? (default: false for public nets )
+ // },
+ // Useful for private networks
+ // private: {
+ // provider: () => new HDWalletProvider(mnemonic, `https://network.io`),
+ // network_id: 2111, // This network is yours, in the cloud.
+ // production: true // Treats this network as if it was a public net. (default: false)
+ // }
+ },
+
+ // Set default mocha options here, use special reporters etc.
+ mocha: {
+ // timeout: 100000
+ },
+
+ // Configure your compilers
+ compilers: {
+ solc: {
+ version: "0.8.6", // Fetch exact version from solc-bin (default: truffle's version)
+ // docker: true, // Use "0.5.1" you've installed locally with docker (default: false)
+ // settings: { // See the solidity docs for advice about optimization and evmVersion
+ optimizer: {
+ enabled: false,
+ runs: 200
+ },
+ // evmVersion: "byzantium"
+ // }
+ }
+ },
+
+ // Truffle DB is currently disabled by default; to enable it, change enabled:
+ // false to enabled: true. The default storage location can also be
+ // overridden by specifying the adapter settings, as shown in the commented code below.
+ //
+ // NOTE: It is not possible to migrate your contracts to truffle DB and you should
+ // make a backup of your artifacts to a safe location before enabling this feature.
+ //
+ // After you backed up your artifacts you can utilize db by running migrate as follows:
+ // $ truffle migrate --reset --compile-all
+ //
+ // db: {
+ // enabled: false,
+ // host: "127.0.0.1",
+ // adapter: {
+ // name: "sqlite",
+ // settings: {
+ // directory: ".db"
+ // }
+ // }
+ // }
+};
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..9eb64e1
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,8 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@openzeppelin/contracts@^4.3.1":
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.3.1.tgz#c01f791ce6c9d3989ac1a643267501dbe336b9e3"
+ integrity sha512-QjgbPPlmDK2clK1hzjw2ROfY8KA5q+PfhDUUxZFEBCZP9fi6d5FuNoh/Uq0oCTMEKPmue69vhX2jcl0N/tFKGw==