{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldUpdater",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newUpdater",
          "type": "address"
        }
      ],
      "name": "NewUpdater",
      "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": "uint32",
          "name": "homeDomain",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "oldRoot",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "Update",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "committedRoot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "homeDomainHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "localDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "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": [],
      "name": "state",
      "outputs": [
        {
          "internalType": "enum NomadBase.States",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updater",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "committedRoot()": "67a6771d",
    "homeDomainHash()": "45630b1a",
    "localDomain()": "8d3638f4",
    "owner()": "8da5cb5b",
    "renounceOwnership()": "715018a6",
    "state()": "c19d93fb",
    "transferOwnership(address)": "f2fde38b",
    "updater()": "df034cd0"
  },
  "ast": {
    "absolutePath": "packages/contracts-core/contracts/NomadBase.sol",
    "id": 43999,
    "exportedSymbols": {
      "ECDSA": [
        26496
      ],
      "Initializable": [
        23676
      ],
      "Message": [
        45831
      ],
      "NomadBase": [
        43998
      ],
      "OwnableUpgradeable": [
        23168
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:4529:65",
    "nodes": [
      {
        "id": 43828,
        "nodeType": "PragmaDirective",
        "src": "46:22:65",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 43830,
        "nodeType": "ImportDirective",
        "src": "116:43:65",
        "absolutePath": "packages/contracts-core/contracts/libs/Message.sol",
        "file": "./libs/Message.sol",
        "scope": 43999,
        "sourceUnit": 45832,
        "symbolAliases": [
          {
            "foreign": {
              "id": 43829,
              "name": "Message",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:7:65",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 43832,
        "nodeType": "ImportDirective",
        "src": "206:69:65",
        "absolutePath": "node_modules/@openzeppelin/contracts/cryptography/ECDSA.sol",
        "file": "@openzeppelin/contracts/cryptography/ECDSA.sol",
        "scope": 43999,
        "sourceUnit": 26497,
        "symbolAliases": [
          {
            "foreign": {
              "id": 43831,
              "name": "ECDSA",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "214:5:65",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 43834,
        "nodeType": "ImportDirective",
        "src": "276:90:65",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/proxy/Initializable.sol",
        "file": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol",
        "scope": 43999,
        "sourceUnit": 23677,
        "symbolAliases": [
          {
            "foreign": {
              "id": 43833,
              "name": "Initializable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "284:13:65",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 43836,
        "nodeType": "ImportDirective",
        "src": "367:101:65",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "scope": 43999,
        "sourceUnit": 23169,
        "symbolAliases": [
          {
            "foreign": {
              "id": 43835,
              "name": "OwnableUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "375:18:65",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 43998,
        "nodeType": "ContractDefinition",
        "src": "585:3989:65",
        "nodes": [
          {
            "id": 43845,
            "nodeType": "EnumDefinition",
            "src": "1076:73:65",
            "canonicalName": "NomadBase.States",
            "members": [
              {
                "id": 43842,
                "name": "UnInitialized",
                "nodeType": "EnumValue",
                "src": "1098:13:65"
              },
              {
                "id": 43843,
                "name": "Active",
                "nodeType": "EnumValue",
                "src": "1121:6:65"
              },
              {
                "id": 43844,
                "name": "Failed",
                "nodeType": "EnumValue",
                "src": "1137:6:65"
              }
            ],
            "name": "States"
          },
          {
            "id": 43847,
            "nodeType": "VariableDeclaration",
            "src": "1266:35:65",
            "constant": false,
            "functionSelector": "8d3638f4",
            "mutability": "immutable",
            "name": "localDomain",
            "scope": 43998,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 43846,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "1266:6:65",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 43849,
            "nodeType": "VariableDeclaration",
            "src": "1392:22:65",
            "constant": false,
            "functionSelector": "df034cd0",
            "mutability": "mutable",
            "name": "updater",
            "scope": 43998,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 43848,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1392:7:65",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "id": 43851,
            "nodeType": "VariableDeclaration",
            "src": "1453:19:65",
            "constant": false,
            "functionSelector": "c19d93fb",
            "mutability": "mutable",
            "name": "state",
            "scope": 43998,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_enum$_States_$43845",
              "typeString": "enum NomadBase.States"
            },
            "typeName": {
              "id": 43850,
              "name": "States",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 43845,
              "src": "1453:6:65",
              "typeDescriptions": {
                "typeIdentifier": "t_enum$_States_$43845",
                "typeString": "enum NomadBase.States"
              }
            },
            "visibility": "public"
          },
          {
            "id": 43853,
            "nodeType": "VariableDeclaration",
            "src": "1537:28:65",
            "constant": false,
            "functionSelector": "67a6771d",
            "mutability": "mutable",
            "name": "committedRoot",
            "scope": 43998,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 43852,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1537:7:65",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 43857,
            "nodeType": "VariableDeclaration",
            "src": "1648:25:65",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 43998,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$47_storage",
              "typeString": "uint256[47]"
            },
            "typeName": {
              "baseType": {
                "id": 43854,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1648:7:65",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 43856,
              "length": {
                "hexValue": "3437",
                "id": 43855,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1656:2:65",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_47_by_1",
                  "typeString": "int_const 47"
                },
                "value": "47"
              },
              "nodeType": "ArrayTypeName",
              "src": "1648:11:65",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$47_storage_ptr",
                "typeString": "uint256[47]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 43868,
            "nodeType": "EventDefinition",
            "src": "2042:145:65",
            "anonymous": false,
            "documentation": {
              "id": 43858,
              "nodeType": "StructuredDocumentation",
              "src": "1721:316:65",
              "text": " @notice Emitted when update is made on Home\n or unconfirmed update root is submitted on Replica\n @param homeDomain Domain of home contract\n @param oldRoot Old merkle root\n @param newRoot New merkle root\n @param signature Updater's signature on `oldRoot` and `newRoot`"
            },
            "name": "Update",
            "parameters": {
              "id": 43867,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43860,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "homeDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 43868,
                  "src": "2064:25:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 43859,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2064:6:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43862,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "oldRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 43868,
                  "src": "2099:23:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43861,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2099:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43864,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "newRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 43868,
                  "src": "2132:23:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43863,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2132:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43866,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 43868,
                  "src": "2165:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 43865,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2165:5:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2054:132:65"
            }
          },
          {
            "id": 43875,
            "nodeType": "EventDefinition",
            "src": "2368:57:65",
            "anonymous": false,
            "documentation": {
              "id": 43869,
              "nodeType": "StructuredDocumentation",
              "src": "2193:170:65",
              "text": " @notice Emitted when Updater is rotated\n @param oldUpdater The address of the old updater\n @param newUpdater The address of the new updater"
            },
            "name": "NewUpdater",
            "parameters": {
              "id": 43874,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43871,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "oldUpdater",
                  "nodeType": "VariableDeclaration",
                  "scope": 43875,
                  "src": "2385:18:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 43870,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2385:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43873,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newUpdater",
                  "nodeType": "VariableDeclaration",
                  "scope": 43875,
                  "src": "2405:18:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 43872,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2405:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2384:40:65"
            }
          },
          {
            "id": 43885,
            "nodeType": "FunctionDefinition",
            "src": "2477:76:65",
            "body": {
              "id": 43884,
              "nodeType": "Block",
              "src": "2510:43:65",
              "statements": [
                {
                  "expression": {
                    "id": 43882,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 43880,
                      "name": "localDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43847,
                      "src": "2520:11:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 43881,
                      "name": "_localDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43877,
                      "src": "2534:12:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "2520:26:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 43883,
                  "nodeType": "ExpressionStatement",
                  "src": "2520:26:65"
                }
              ]
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "parameters": {
              "id": 43878,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43877,
                  "mutability": "mutable",
                  "name": "_localDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 43885,
                  "src": "2489:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 43876,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2489:6:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2488:21:65"
            },
            "returnParameters": {
              "id": 43879,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2510:0:65"
            },
            "scope": 43998,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 43905,
            "nodeType": "FunctionDefinition",
            "src": "2605:166:65",
            "body": {
              "id": 43904,
              "nodeType": "Block",
              "src": "2676:95:65",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 43892,
                      "name": "__Ownable_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23067,
                      "src": "2686:14:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 43893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2686:16:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43894,
                  "nodeType": "ExpressionStatement",
                  "src": "2686:16:65"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 43896,
                        "name": "_updater",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43887,
                        "src": "2724:8:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 43895,
                      "name": "_setUpdater",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43948,
                      "src": "2712:11:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 43897,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2712:21:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43898,
                  "nodeType": "ExpressionStatement",
                  "src": "2712:21:65"
                },
                {
                  "expression": {
                    "id": 43902,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 43899,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43851,
                      "src": "2743:5:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_States_$43845",
                        "typeString": "enum NomadBase.States"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 43900,
                        "name": "States",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43845,
                        "src": "2751:6:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_States_$43845_$",
                          "typeString": "type(enum NomadBase.States)"
                        }
                      },
                      "id": 43901,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Active",
                      "nodeType": "MemberAccess",
                      "src": "2751:13:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_States_$43845",
                        "typeString": "enum NomadBase.States"
                      }
                    },
                    "src": "2743:21:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_States_$43845",
                      "typeString": "enum NomadBase.States"
                    }
                  },
                  "id": 43903,
                  "nodeType": "ExpressionStatement",
                  "src": "2743:21:65"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 43890,
                "modifierName": {
                  "id": 43889,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23659,
                  "src": "2664:11:65",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2664:11:65"
              }
            ],
            "name": "__NomadBase_initialize",
            "parameters": {
              "id": 43888,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43887,
                  "mutability": "mutable",
                  "name": "_updater",
                  "nodeType": "VariableDeclaration",
                  "scope": 43905,
                  "src": "2637:16:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 43886,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2637:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2636:18:65"
            },
            "returnParameters": {
              "id": 43891,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2676:0:65"
            },
            "scope": 43998,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 43911,
            "nodeType": "FunctionDefinition",
            "src": "2905:64:65",
            "documentation": {
              "id": 43906,
              "nodeType": "StructuredDocumentation",
              "src": "2828:72:65",
              "text": " @notice Hash of Home domain concatenated with \"NOMAD\""
            },
            "functionSelector": "45630b1a",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "homeDomainHash",
            "parameters": {
              "id": 43907,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2928:2:65"
            },
            "returnParameters": {
              "id": 43910,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43909,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 43911,
                  "src": "2960:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43908,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2960:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2959:9:65"
            },
            "scope": 43998,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 43928,
            "nodeType": "FunctionDefinition",
            "src": "3155:178:65",
            "body": {
              "id": 43927,
              "nodeType": "Block",
              "src": "3260:73:65",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 43922,
                            "name": "_homeDomain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43914,
                            "src": "3304:11:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "hexValue": "4e4f4d4144",
                            "id": 43923,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3317:7:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_9575c28759500ffc4f6c6f4c4cadbcae7547a19ca8c280029c45619d5d101314",
                              "typeString": "literal_string \"NOMAD\""
                            },
                            "value": "NOMAD"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_9575c28759500ffc4f6c6f4c4cadbcae7547a19ca8c280029c45619d5d101314",
                              "typeString": "literal_string \"NOMAD\""
                            }
                          ],
                          "expression": {
                            "id": 43920,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "3287:3:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 43921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "3287:16:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 43924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3287:38:65",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 43919,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "3277:9:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 43925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3277:49:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 43918,
                  "id": 43926,
                  "nodeType": "Return",
                  "src": "3270:56:65"
                }
              ]
            },
            "documentation": {
              "id": 43912,
              "nodeType": "StructuredDocumentation",
              "src": "3028:122:65",
              "text": " @notice Hash of Home domain concatenated with \"NOMAD\"\n @param _homeDomain the Home domain to hash"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_homeDomainHash",
            "parameters": {
              "id": 43915,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43914,
                  "mutability": "mutable",
                  "name": "_homeDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 43928,
                  "src": "3180:18:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 43913,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3180:6:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3179:20:65"
            },
            "returnParameters": {
              "id": 43918,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43917,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 43928,
                  "src": "3247:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43916,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3247:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3246:9:65"
            },
            "scope": 43998,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 43948,
            "nodeType": "FunctionDefinition",
            "src": "3439:179:65",
            "body": {
              "id": 43947,
              "nodeType": "Block",
              "src": "3490:128:65",
              "statements": [
                {
                  "assignments": [
                    43935
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 43935,
                      "mutability": "mutable",
                      "name": "_oldUpdater",
                      "nodeType": "VariableDeclaration",
                      "scope": 43947,
                      "src": "3500:19:65",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 43934,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3500:7:65",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 43937,
                  "initialValue": {
                    "id": 43936,
                    "name": "updater",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 43849,
                    "src": "3522:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3500:29:65"
                },
                {
                  "expression": {
                    "id": 43940,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 43938,
                      "name": "updater",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43849,
                      "src": "3539:7:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 43939,
                      "name": "_newUpdater",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43931,
                      "src": "3549:11:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3539:21:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 43941,
                  "nodeType": "ExpressionStatement",
                  "src": "3539:21:65"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 43943,
                        "name": "_oldUpdater",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43935,
                        "src": "3586:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 43944,
                        "name": "_newUpdater",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43931,
                        "src": "3599:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 43942,
                      "name": "NewUpdater",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43875,
                      "src": "3575:10:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 43945,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3575:36:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43946,
                  "nodeType": "EmitStatement",
                  "src": "3570:41:65"
                }
              ]
            },
            "documentation": {
              "id": 43929,
              "nodeType": "StructuredDocumentation",
              "src": "3339:95:65",
              "text": " @notice Set the Updater\n @param _newUpdater Address of the new Updater"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setUpdater",
            "parameters": {
              "id": 43932,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43931,
                  "mutability": "mutable",
                  "name": "_newUpdater",
                  "nodeType": "VariableDeclaration",
                  "scope": 43948,
                  "src": "3460:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 43930,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3460:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3459:21:65"
            },
            "returnParameters": {
              "id": 43933,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3490:0:65"
            },
            "scope": 43998,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 43989,
            "nodeType": "FunctionDefinition",
            "src": "3903:392:65",
            "body": {
              "id": 43988,
              "nodeType": "Block",
              "src": "4052:243:65",
              "statements": [
                {
                  "assignments": [
                    43961
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 43961,
                      "mutability": "mutable",
                      "name": "_digest",
                      "nodeType": "VariableDeclaration",
                      "scope": 43988,
                      "src": "4062:15:65",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 43960,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "4062:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 43971,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 43965,
                              "name": "homeDomainHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 43911,
                              "src": "4120:14:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                                "typeString": "function () view returns (bytes32)"
                              }
                            },
                            "id": 43966,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4120:16:65",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 43967,
                            "name": "_oldRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43951,
                            "src": "4138:8:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 43968,
                            "name": "_newRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43953,
                            "src": "4148:8:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 43963,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "4103:3:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 43964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "4103:16:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 43969,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4103:54:65",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 43962,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "4080:9:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 43970,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4080:87:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4062:105:65"
                },
                {
                  "expression": {
                    "id": 43977,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 43972,
                      "name": "_digest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43961,
                      "src": "4177:7:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 43975,
                          "name": "_digest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43961,
                          "src": "4216:7:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 43973,
                          "name": "ECDSA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26496,
                          "src": "4187:5:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ECDSA_$26496_$",
                            "typeString": "type(library ECDSA)"
                          }
                        },
                        "id": 43974,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "toEthSignedMessageHash",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 26495,
                        "src": "4187:28:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 43976,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4187:37:65",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4177:47:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 43978,
                  "nodeType": "ExpressionStatement",
                  "src": "4177:47:65"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 43985,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 43981,
                              "name": "_digest",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 43961,
                              "src": "4256:7:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 43982,
                              "name": "_signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 43955,
                              "src": "4265:10:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 43979,
                              "name": "ECDSA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26496,
                              "src": "4242:5:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ECDSA_$26496_$",
                                "typeString": "type(library ECDSA)"
                              }
                            },
                            "id": 43980,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "recover",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 26421,
                            "src": "4242:13:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                              "typeString": "function (bytes32,bytes memory) pure returns (address)"
                            }
                          },
                          "id": 43983,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4242:34:65",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 43984,
                          "name": "updater",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43849,
                          "src": "4280:7:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "4242:45:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 43986,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "4241:47:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 43959,
                  "id": 43987,
                  "nodeType": "Return",
                  "src": "4234:54:65"
                }
              ]
            },
            "documentation": {
              "id": 43949,
              "nodeType": "StructuredDocumentation",
              "src": "3624:274:65",
              "text": " @notice Checks that signature was signed by Updater\n @param _oldRoot Old merkle root\n @param _newRoot New merkle root\n @param _signature Signature on `_oldRoot` and `_newRoot`\n @return TRUE iff signature is valid signed by updater*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isUpdaterSignature",
            "parameters": {
              "id": 43956,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43951,
                  "mutability": "mutable",
                  "name": "_oldRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 43989,
                  "src": "3941:16:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43950,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3941:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43953,
                  "mutability": "mutable",
                  "name": "_newRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 43989,
                  "src": "3967:16:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43952,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3967:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43955,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 43989,
                  "src": "3993:23:65",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 43954,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3993:5:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3931:91:65"
            },
            "returnParameters": {
              "id": 43959,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43958,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 43989,
                  "src": "4046:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 43957,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4046:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4045:6:65"
            },
            "scope": 43998,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 43997,
            "nodeType": "FunctionDefinition",
            "src": "4488:84:65",
            "body": {
              "id": 43996,
              "nodeType": "Block",
              "src": "4543:29:65",
              "statements": []
            },
            "baseFunctions": [
              23135
            ],
            "documentation": {
              "id": 43990,
              "nodeType": "StructuredDocumentation",
              "src": "4301:182:65",
              "text": " @dev should be impossible to renounce ownership;\n we override OpenZeppelin OwnableUpgradeable's\n implementation of renounceOwnership to make it a no-op"
            },
            "functionSelector": "715018a6",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 43994,
                "modifierName": {
                  "id": 43993,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "4533:9:65",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4533:9:65"
              }
            ],
            "name": "renounceOwnership",
            "overrides": {
              "id": 43992,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4524:8:65"
            },
            "parameters": {
              "id": 43991,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4514:2:65"
            },
            "returnParameters": {
              "id": 43995,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4543:0:65"
            },
            "scope": 43998,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 43838,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 23676,
              "src": "616:13:65",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$23676",
                "typeString": "contract Initializable"
              }
            },
            "id": 43839,
            "nodeType": "InheritanceSpecifier",
            "src": "616:13:65"
          },
          {
            "baseName": {
              "id": 43840,
              "name": "OwnableUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 23168,
              "src": "631:18:65",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OwnableUpgradeable_$23168",
                "typeString": "contract OwnableUpgradeable"
              }
            },
            "id": 43841,
            "nodeType": "InheritanceSpecifier",
            "src": "631:18:65"
          }
        ],
        "contractDependencies": [
          23168,
          23676,
          25131
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 43837,
          "nodeType": "StructuredDocumentation",
          "src": "470:114:65",
          "text": " @title NomadBase\n @author Illusory Systems Inc.\n @notice Shared utilities between Home and Replica."
        },
        "fullyImplemented": false,
        "linearizedBaseContracts": [
          43998,
          23168,
          25131,
          23676
        ],
        "name": "NomadBase",
        "scope": 43999
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 65
}