{
  "contractName": "ENSRegistry",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "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": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "label",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "NewOwner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "resolver",
          "type": "address"
        }
      ],
      "name": "NewResolver",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "ttl",
          "type": "uint64"
        }
      ],
      "name": "NewTTL",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "resolver",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "ttl",
          "type": "uint64"
        }
      ],
      "name": "setRecord",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "label",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "resolver",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "ttl",
          "type": "uint64"
        }
      ],
      "name": "setSubnodeRecord",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "setOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "label",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "setSubnodeOwner",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "resolver",
          "type": "address"
        }
      ],
      "name": "setResolver",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "internalType": "uint64",
          "name": "ttl",
          "type": "uint64"
        }
      ],
      "name": "setTTL",
      "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": "bytes32",
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "resolver",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "ttl",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "recordExists",
      "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"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"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\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"label\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NewOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"NewResolver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"NewTTL\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"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\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"recordExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"resolver\",\"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\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"setRecord\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"setResolver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"label\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setSubnodeOwner\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"label\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"setSubnodeRecord\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"setTTL\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"ttl\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructs a new ENS registrar.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Query if an address is an authorized operator for another address.\",\"params\":{\"operator\":\"The address that acts on behalf of the owner.\",\"owner\":\"The address that owns the records.\"},\"returns\":{\"_0\":\"True if `operator` is an approved operator for `owner`, false otherwise.\"}},\"owner(bytes32)\":{\"details\":\"Returns the address that owns the specified node.\",\"params\":{\"node\":\"The specified node.\"},\"returns\":{\"_0\":\"address of the owner.\"}},\"recordExists(bytes32)\":{\"details\":\"Returns whether a record has been imported to the registry.\",\"params\":{\"node\":\"The specified node.\"},\"returns\":{\"_0\":\"Bool if record exists\"}},\"resolver(bytes32)\":{\"details\":\"Returns the address of the resolver for the specified node.\",\"params\":{\"node\":\"The specified node.\"},\"returns\":{\"_0\":\"address of the resolver.\"}},\"setApprovalForAll(address,bool)\":{\"details\":\"Enable or disable approval for a third party (\\\"operator\\\") to manage  all of `msg.sender`'s ENS records. Emits the ApprovalForAll event.\",\"params\":{\"approved\":\"True if the operator is approved, false to revoke approval.\",\"operator\":\"Address to add to the set of authorized operators.\"}},\"setOwner(bytes32,address)\":{\"details\":\"Transfers ownership of a node to a new address. May only be called by the current owner of the node.\",\"params\":{\"node\":\"The node to transfer ownership of.\",\"owner\":\"The address of the new owner.\"}},\"setRecord(bytes32,address,address,uint64)\":{\"details\":\"Sets the record for a node.\",\"params\":{\"node\":\"The node to update.\",\"owner\":\"The address of the new owner.\",\"resolver\":\"The address of the resolver.\",\"ttl\":\"The TTL in seconds.\"}},\"setResolver(bytes32,address)\":{\"details\":\"Sets the resolver address for the specified node.\",\"params\":{\"node\":\"The node to update.\",\"resolver\":\"The address of the resolver.\"}},\"setSubnodeOwner(bytes32,bytes32,address)\":{\"details\":\"Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node.\",\"params\":{\"label\":\"The hash of the label specifying the subnode.\",\"node\":\"The parent node.\",\"owner\":\"The address of the new owner.\"}},\"setSubnodeRecord(bytes32,bytes32,address,address,uint64)\":{\"details\":\"Sets the record for a subnode.\",\"params\":{\"label\":\"The hash of the label specifying the subnode.\",\"node\":\"The parent node.\",\"owner\":\"The address of the new owner.\",\"resolver\":\"The address of the resolver.\",\"ttl\":\"The TTL in seconds.\"}},\"setTTL(bytes32,uint64)\":{\"details\":\"Sets the TTL for the specified node.\",\"params\":{\"node\":\"The node to update.\",\"ttl\":\"The TTL in seconds.\"}},\"ttl(bytes32)\":{\"details\":\"Returns the TTL of a node, and any records associated with it.\",\"params\":{\"node\":\"The specified node.\"},\"returns\":{\"_0\":\"ttl of the node.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The ENS registry contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@ensdomains/ens/contracts/ENSRegistry.sol\":\"ENSRegistry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@ensdomains/ens/contracts/ENS.sol\":{\"keccak256\":\"0x376a1ab7c43ac7c922a5b7e39c7fcba8bc66409fb335ebcee2f8f45d485b1f31\",\"urls\":[\"bzz-raw://766025ff22caa14c68bb5341b843616f3da8b739924475f7dc4383b0482138fe\",\"dweb:/ipfs/QmWzCxvb6WnF9qHHX4np7f6QePXMqX59SDMuRu8vogYKAV\"]},\"@ensdomains/ens/contracts/ENSRegistry.sol\":{\"keccak256\":\"0x58ffab29a55073883763416cebdf9dcd3292e00fc24303468d082c8fd6cefb90\",\"urls\":[\"bzz-raw://bf3d02f1d97c0dcbe85067c7ecec744e3e1b12fab31493e9d88eca04184d6db8\",\"dweb:/ipfs/QmZXJoPcmMPVBtk8kcDreKUYRogzcm7jjnZB4JjAPYP7dE\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50336000808060001b815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506110e4806100776000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635b0fc9c3116100715780635b0fc9c3146102b15780635ef2c7f0146102ff578063a22cb4651461038b578063cf408823146103db578063e985e9c51461045d578063f79fe538146104d7576100b4565b80630178b8bf146100b957806302571be31461011157806306ab59231461016957806314ab9038146101d557806316a25cbd146102175780631896f70a14610263575b600080fd5b6100e5600480360360208110156100cf57600080fd5b810190808035906020019092919050505061051b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61013d6004803603602081101561012757600080fd5b810190808035906020019092919050505061055a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101bf6004803603606081101561017f57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105dd565b6040518082815260200191505060405180910390f35b610215600480360360408110156101eb57600080fd5b8101908080359060200190929190803567ffffffffffffffff16906020019092919050505061077c565b005b6102436004803603602081101561022d57600080fd5b8101908080359060200190929190505050610904565b604051808267ffffffffffffffff16815260200191505060405180910390f35b6102af6004803603604081101561027957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610937565b005b6102fd600480360360408110156102c757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ae3565b005b610389600480360360a081101561031557600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190505050610c45565b005b6103d9600480360360408110156103a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050610c67565b005b61045b600480360360808110156103f157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190505050610d66565b005b6104bf6004803603604081101561047357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d81565b60405180821515815260200191505060405180910390f35b610503600480360360208110156104ed57600080fd5b8101908080359060200190929190505050610e15565b60405180821515815260200191505060405180910390f35b600080600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060008084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156105d35760009150506105d8565b809150505b919050565b600083600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806106da5750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6106e357600080fd5b6000868660405160200180838152602001828152602001925050506040516020818303038152906040528051906020012090506107208186610e83565b85877fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8287604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a38093505050509392505050565b81600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806108775750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61088057600080fd5b837f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6884604051808267ffffffffffffffff16815260200191505060405180910390a28260008086815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050565b600080600083815260200190815260200160002060010160149054906101000a900467ffffffffffffffff169050919050565b81600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610a325750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610a3b57600080fd5b837f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a084604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28260008086815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b81600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610bde5750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610be757600080fd5b610bf18484610e83565b837fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26684604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a250505050565b6000610c528686866105dd565b9050610c5f818484610edb565b505050505050565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b610d708484610ae3565b610d7b848383610edb565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b8060008084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610fe6578160008085815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550827f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25b60008084815260200190815260200160002060010160149054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff16146110a9578060008085815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550827f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6882604051808267ffffffffffffffff16815260200191505060405180910390a25b50505056fea2646970667358221220b9b8fe27ffaba9778cb02aa5bea834d1d69a6c656b5fe147294a1e88332d0c1a64736f6c63430007040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80635b0fc9c3116100715780635b0fc9c3146102b15780635ef2c7f0146102ff578063a22cb4651461038b578063cf408823146103db578063e985e9c51461045d578063f79fe538146104d7576100b4565b80630178b8bf146100b957806302571be31461011157806306ab59231461016957806314ab9038146101d557806316a25cbd146102175780631896f70a14610263575b600080fd5b6100e5600480360360208110156100cf57600080fd5b810190808035906020019092919050505061051b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61013d6004803603602081101561012757600080fd5b810190808035906020019092919050505061055a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101bf6004803603606081101561017f57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105dd565b6040518082815260200191505060405180910390f35b610215600480360360408110156101eb57600080fd5b8101908080359060200190929190803567ffffffffffffffff16906020019092919050505061077c565b005b6102436004803603602081101561022d57600080fd5b8101908080359060200190929190505050610904565b604051808267ffffffffffffffff16815260200191505060405180910390f35b6102af6004803603604081101561027957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610937565b005b6102fd600480360360408110156102c757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ae3565b005b610389600480360360a081101561031557600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190505050610c45565b005b6103d9600480360360408110156103a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050610c67565b005b61045b600480360360808110156103f157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190505050610d66565b005b6104bf6004803603604081101561047357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d81565b60405180821515815260200191505060405180910390f35b610503600480360360208110156104ed57600080fd5b8101908080359060200190929190505050610e15565b60405180821515815260200191505060405180910390f35b600080600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060008084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156105d35760009150506105d8565b809150505b919050565b600083600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806106da5750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6106e357600080fd5b6000868660405160200180838152602001828152602001925050506040516020818303038152906040528051906020012090506107208186610e83565b85877fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8287604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a38093505050509392505050565b81600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806108775750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61088057600080fd5b837f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6884604051808267ffffffffffffffff16815260200191505060405180910390a28260008086815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050565b600080600083815260200190815260200160002060010160149054906101000a900467ffffffffffffffff169050919050565b81600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610a325750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610a3b57600080fd5b837f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a084604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28260008086815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b81600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610bde5750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610be757600080fd5b610bf18484610e83565b837fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26684604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a250505050565b6000610c528686866105dd565b9050610c5f818484610edb565b505050505050565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b610d708484610ae3565b610d7b848383610edb565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b8060008084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610fe6578160008085815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550827f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25b60008084815260200190815260200160002060010160149054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff16146110a9578060008085815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550827f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6882604051808267ffffffffffffffff16815260200191505060405180910390a25b50505056fea2646970667358221220b9b8fe27ffaba9778cb02aa5bea834d1d69a6c656b5fe147294a1e88332d0c1a64736f6c63430007040033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "84:6047:11:-:0;;;621:69;;;;;;;;;;673:10;652:7;:12;660:3;652:12;;;;;;;;;;;;;:18;;;:31;;;;;;;;;;;;;;;;;;84:6047;;;;;;",
  "deployedSourceMap": "84:6047:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4461:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4059:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2391:304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3204:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4754:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2870:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1916:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1429:248;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3693:206;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;931:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5490:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5038:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4461:125;4531:7;4557;:13;4565:4;4557:13;;;;;;;;;;;:22;;;;;;;;;;;;4550:29;;4461:125;;;:::o;4059:229::-;4126:7;4145:12;4160:7;:13;4168:4;4160:13;;;;;;;;;;;:19;;;;;;;;;;;;4145:34;;4209:4;4193:21;;:4;:21;;;4189:71;;;4245:3;4230:19;;;;;4189:71;4277:4;4270:11;;;4059:229;;;;:::o;2391:304::-;2509:7;2495:4;432:13;448:7;:13;456:4;448:13;;;;;;;;;;;:19;;;;;;;;;;;;432:35;;494:10;485:19;;:5;:19;;;:51;;;;508:9;:16;518:5;508:16;;;;;;;;;;;;;;;:28;525:10;508:28;;;;;;;;;;;;;;;;;;;;;;;;;485:51;477:60;;;;;;2528:15:::1;2573:4;2579:5;2556:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2546:40;;;;;;2528:58;;2596:25;2606:7;2615:5;2596:9;:25::i;:::-;2651:5;2645:4;2636:28;2658:5;2636:28;;;;;;;;;;;;;;;;;;;;2681:7;2674:14;;;2391:304:::0;;;;;;;:::o;3204:155::-;3281:4;432:13;448:7;:13;456:4;448:13;;;;;;;;;;;:19;;;;;;;;;;;;432:35;;494:10;485:19;;:5;:19;;;:51;;;;508:9;:16;518:5;508:16;;;;;;;;;;;;;;;:28;525:10;508:28;;;;;;;;;;;;;;;;;;;;;;;;;485:51;477:60;;;;;;3309:4:::1;3302:17;3315:3;3302:17;;;;;;;;;;;;;;;;;;;;3349:3;3329:7;:13:::0;3337:4:::1;3329:13;;;;;;;;;;;:17;;;:23;;;;;;;;;;;;;;;;;;3204:155:::0;;;;:::o;4754:114::-;4819:6;4844:7;:13;4852:4;4844:13;;;;;;;;;;;:17;;;;;;;;;;;;4837:24;;4754:114;;;:::o;2870:186::-;2958:4;432:13;448:7;:13;456:4;448:13;;;;;;;;;;;:19;;;;;;;;;;;;432:35;;494:10;485:19;;:5;:19;;;:51;;;;508:9;:16;518:5;508:16;;;;;;;;;;;;;;;:28;525:10;508:28;;;;;;;;;;;;;;;;;;;;;;;;;485:51;477:60;;;;;;2991:4:::1;2979:27;2997:8;2979:27;;;;;;;;;;;;;;;;;;;;3041:8;3016:7;:13:::0;3024:4:::1;3016:13;;;;;;;;;;;:22;;;:33;;;;;;;;;;;;;;;;;;2870:186:::0;;;;:::o;1916:163::-;1998:4;432:13;448:7;:13;456:4;448:13;;;;;;;;;;;:19;;;;;;;;;;;;432:35;;494:10;485:19;;:5;:19;;;:51;;;;508:9;:16;518:5;508:16;;;;;;;;;;;;;;;:28;525:10;508:28;;;;;;;;;;;;;;;;;;;;;;;;;485:51;477:60;;;;;;2014:22:::1;2024:4;2030:5;2014:9;:22::i;:::-;2060:4;2051:21;2066:5;2051:21;;;;;;;;;;;;;;;;;;;;1916:163:::0;;;;:::o;1429:248::-;1565:15;1583:35;1599:4;1605:5;1612;1583:15;:35::i;:::-;1565:53;;1628:42;1647:7;1656:8;1666:3;1628:18;:42::i;:::-;1429:248;;;;;;:::o;3693:206::-;3823:8;3789:9;:21;3799:10;3789:21;;;;;;;;;;;;;;;:31;3811:8;3789:31;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;3873:8;3846:46;;3861:10;3846:46;;;3883:8;3846:46;;;;;;;;;;;;;;;;;;;;3693:206;;:::o;931:191::-;1045:21;1054:4;1060:5;1045:8;:21::i;:::-;1076:39;1095:4;1101:8;1111:3;1076:18;:39::i;:::-;931:191;;;;:::o;5490:155::-;5589:4;5612:9;:16;5622:5;5612:16;;;;;;;;;;;;;;;:26;5629:8;5612:26;;;;;;;;;;;;;;;;;;;;;;;;;5605:33;;5490:155;;;;:::o;5038:139::-;5112:4;5166:3;5135:35;;:7;:13;5143:4;5135:13;;;;;;;;;;;:19;;;;;;;;;;;;:35;;;;5128:42;;5038:139;;;:::o;5651:109::-;5748:5;5726:7;:13;5734:4;5726:13;;;;;;;;;;;:19;;;:27;;;;;;;;;;;;;;;;;;5651:109;;:::o;5766:363::-;5872:7;:13;5880:4;5872:13;;;;;;;;;;;:22;;;;;;;;;;;;5860:34;;:8;:34;;;5857:143;;5935:8;5910:7;:13;5918:4;5910:13;;;;;;;;;;;:22;;;:33;;;;;;;;;;;;;;;;;;5974:4;5962:27;5980:8;5962:27;;;;;;;;;;;;;;;;;;;;5857:143;6020:7;:13;6028:4;6020:13;;;;;;;;;;;:17;;;;;;;;;;;;6013:24;;:3;:24;;;6010:113;;6073:3;6053:7;:13;6061:4;6053:13;;;;;;;;;;;:17;;;:23;;;;;;;;;;;;;;;;;;6102:4;6095:17;6108:3;6095:17;;;;;;;;;;;;;;;;;;;;6010:113;5766:363;;;:::o",
  "source": "pragma solidity ^0.7.0;\n\nimport \"./ENS.sol\";\n\n/**\n * The ENS registry contract.\n */\ncontract ENSRegistry is ENS {\n\n    struct Record {\n        address owner;\n        address resolver;\n        uint64 ttl;\n    }\n\n    mapping (bytes32 => Record) records;\n    mapping (address => mapping(address => bool)) operators;\n\n    // Permits modifications only by the owner of the specified node.\n    modifier authorised(bytes32 node) {\n        address owner = records[node].owner;\n        require(owner == msg.sender || operators[owner][msg.sender]);\n        _;\n    }\n\n    /**\n     * @dev Constructs a new ENS registrar.\n     */\n    constructor() public {\n        records[0x0].owner = msg.sender;\n    }\n\n    /**\n     * @dev Sets the record for a node.\n     * @param node The node to update.\n     * @param owner The address of the new owner.\n     * @param resolver The address of the resolver.\n     * @param ttl The TTL in seconds.\n     */\n    function setRecord(bytes32 node, address owner, address resolver, uint64 ttl) external virtual override {\n        setOwner(node, owner);\n        _setResolverAndTTL(node, resolver, ttl);\n    }\n\n    /**\n     * @dev Sets the record for a subnode.\n     * @param node The parent node.\n     * @param label The hash of the label specifying the subnode.\n     * @param owner The address of the new owner.\n     * @param resolver The address of the resolver.\n     * @param ttl The TTL in seconds.\n     */\n    function setSubnodeRecord(bytes32 node, bytes32 label, address owner, address resolver, uint64 ttl) external virtual override {\n        bytes32 subnode = setSubnodeOwner(node, label, owner);\n        _setResolverAndTTL(subnode, resolver, ttl);\n    }\n\n    /**\n     * @dev Transfers ownership of a node to a new address. May only be called by the current owner of the node.\n     * @param node The node to transfer ownership of.\n     * @param owner The address of the new owner.\n     */\n    function setOwner(bytes32 node, address owner) public virtual override authorised(node) {\n        _setOwner(node, owner);\n        emit Transfer(node, owner);\n    }\n\n    /**\n     * @dev Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node.\n     * @param node The parent node.\n     * @param label The hash of the label specifying the subnode.\n     * @param owner The address of the new owner.\n     */\n    function setSubnodeOwner(bytes32 node, bytes32 label, address owner) public virtual override authorised(node) returns(bytes32) {\n        bytes32 subnode = keccak256(abi.encodePacked(node, label));\n        _setOwner(subnode, owner);\n        emit NewOwner(node, label, owner);\n        return subnode;\n    }\n\n    /**\n     * @dev Sets the resolver address for the specified node.\n     * @param node The node to update.\n     * @param resolver The address of the resolver.\n     */\n    function setResolver(bytes32 node, address resolver) public virtual override authorised(node) {\n        emit NewResolver(node, resolver);\n        records[node].resolver = resolver;\n    }\n\n    /**\n     * @dev Sets the TTL for the specified node.\n     * @param node The node to update.\n     * @param ttl The TTL in seconds.\n     */\n    function setTTL(bytes32 node, uint64 ttl) public virtual override authorised(node) {\n        emit NewTTL(node, ttl);\n        records[node].ttl = ttl;\n    }\n\n    /**\n     * @dev Enable or disable approval for a third party (\"operator\") to manage\n     *  all of `msg.sender`'s ENS records. Emits the ApprovalForAll event.\n     * @param operator Address to add to the set of authorized operators.\n     * @param approved True if the operator is approved, false to revoke approval.\n     */\n    function setApprovalForAll(address operator, bool approved) external virtual override {\n        operators[msg.sender][operator] = approved;\n        emit ApprovalForAll(msg.sender, operator, approved);\n    }\n\n    /**\n     * @dev Returns the address that owns the specified node.\n     * @param node The specified node.\n     * @return address of the owner.\n     */\n    function owner(bytes32 node) public virtual override view returns (address) {\n        address addr = records[node].owner;\n        if (addr == address(this)) {\n            return address(0x0);\n        }\n\n        return addr;\n    }\n\n    /**\n     * @dev Returns the address of the resolver for the specified node.\n     * @param node The specified node.\n     * @return address of the resolver.\n     */\n    function resolver(bytes32 node) public virtual override view returns (address) {\n        return records[node].resolver;\n    }\n\n    /**\n     * @dev Returns the TTL of a node, and any records associated with it.\n     * @param node The specified node.\n     * @return ttl of the node.\n     */\n    function ttl(bytes32 node) public virtual override view returns (uint64) {\n        return records[node].ttl;\n    }\n\n    /**\n     * @dev Returns whether a record has been imported to the registry.\n     * @param node The specified node.\n     * @return Bool if record exists\n     */\n    function recordExists(bytes32 node) public virtual override view returns (bool) {\n        return records[node].owner != address(0x0);\n    }\n\n    /**\n     * @dev Query if an address is an authorized operator for another address.\n     * @param owner The address that owns the records.\n     * @param operator The address that acts on behalf of the owner.\n     * @return True if `operator` is an approved operator for `owner`, false otherwise.\n     */\n    function isApprovedForAll(address owner, address operator) external virtual override view returns (bool) {\n        return operators[owner][operator];\n    }\n\n    function _setOwner(bytes32 node, address owner) internal virtual {\n        records[node].owner = owner;\n    }\n\n    function _setResolverAndTTL(bytes32 node, address resolver, uint64 ttl) internal {\n        if(resolver != records[node].resolver) {\n            records[node].resolver = resolver;\n            emit NewResolver(node, resolver);\n        }\n\n        if(ttl != records[node].ttl) {\n            records[node].ttl = ttl;\n            emit NewTTL(node, ttl);\n        }\n    }\n}\n",
  "sourcePath": "@ensdomains/ens/contracts/ENSRegistry.sol",
  "ast": {
    "absolutePath": "@ensdomains/ens/contracts/ENSRegistry.sol",
    "exportedSymbols": {
      "ENS": [
        3533
      ],
      "ENSRegistry": [
        3956
      ]
    },
    "id": 3957,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3535,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:11"
      },
      {
        "absolutePath": "@ensdomains/ens/contracts/ENS.sol",
        "file": "./ENS.sol",
        "id": 3536,
        "nodeType": "ImportDirective",
        "scope": 3957,
        "sourceUnit": 3534,
        "src": "25:19:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 3538,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3533,
              "src": "108:3:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$3533",
                "typeString": "contract ENS"
              }
            },
            "id": 3539,
            "nodeType": "InheritanceSpecifier",
            "src": "108:3:11"
          }
        ],
        "contractDependencies": [
          3533
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 3537,
          "nodeType": "StructuredDocumentation",
          "src": "46:37:11",
          "text": " The ENS registry contract."
        },
        "fullyImplemented": true,
        "id": 3956,
        "linearizedBaseContracts": [
          3956,
          3533
        ],
        "name": "ENSRegistry",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "ENSRegistry.Record",
            "id": 3546,
            "members": [
              {
                "constant": false,
                "id": 3541,
                "mutability": "mutable",
                "name": "owner",
                "nodeType": "VariableDeclaration",
                "scope": 3546,
                "src": "143:13:11",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3540,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "143:7:11",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3543,
                "mutability": "mutable",
                "name": "resolver",
                "nodeType": "VariableDeclaration",
                "scope": 3546,
                "src": "166:16:11",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3542,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "166:7:11",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3545,
                "mutability": "mutable",
                "name": "ttl",
                "nodeType": "VariableDeclaration",
                "scope": 3546,
                "src": "192:10:11",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3544,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "192:6:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Record",
            "nodeType": "StructDefinition",
            "scope": 3956,
            "src": "119:90:11",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3550,
            "mutability": "mutable",
            "name": "records",
            "nodeType": "VariableDeclaration",
            "scope": 3956,
            "src": "215:35:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$3546_storage_$",
              "typeString": "mapping(bytes32 => struct ENSRegistry.Record)"
            },
            "typeName": {
              "id": 3549,
              "keyType": {
                "id": 3547,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "224:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "215:27:11",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$3546_storage_$",
                "typeString": "mapping(bytes32 => struct ENSRegistry.Record)"
              },
              "valueType": {
                "id": 3548,
                "name": "Record",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 3546,
                "src": "235:6:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Record_$3546_storage_ptr",
                  "typeString": "struct ENSRegistry.Record"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3556,
            "mutability": "mutable",
            "name": "operators",
            "nodeType": "VariableDeclaration",
            "scope": 3956,
            "src": "256:55:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
              "typeString": "mapping(address => mapping(address => bool))"
            },
            "typeName": {
              "id": 3555,
              "keyType": {
                "id": 3551,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "265:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "256:45:11",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                "typeString": "mapping(address => mapping(address => bool))"
              },
              "valueType": {
                "id": 3554,
                "keyType": {
                  "id": 3552,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "284:7:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "276:24:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "valueType": {
                  "id": 3553,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "295:4:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                }
              }
            },
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3582,
              "nodeType": "Block",
              "src": "422:133:11",
              "statements": [
                {
                  "assignments": [
                    3561
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3561,
                      "mutability": "mutable",
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 3582,
                      "src": "432:13:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3560,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "432:7:11",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3566,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 3562,
                        "name": "records",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3550,
                        "src": "448:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$3546_storage_$",
                          "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                        }
                      },
                      "id": 3564,
                      "indexExpression": {
                        "id": 3563,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3558,
                        "src": "456:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "448:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$3546_storage",
                        "typeString": "struct ENSRegistry.Record storage ref"
                      }
                    },
                    "id": 3565,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "owner",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3541,
                    "src": "448:19:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "432:35:11"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 3578,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3571,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3568,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3561,
                            "src": "485:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 3569,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "494:3:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 3570,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "494:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "485:19:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 3572,
                              "name": "operators",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3556,
                              "src": "508:9:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                "typeString": "mapping(address => mapping(address => bool))"
                              }
                            },
                            "id": 3574,
                            "indexExpression": {
                              "id": 3573,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3561,
                              "src": "518:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "508:16:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 3577,
                          "indexExpression": {
                            "expression": {
                              "id": 3575,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "525:3:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 3576,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "525:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "508:28:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "485:51:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 3567,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "477:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 3579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "477:60:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3580,
                  "nodeType": "ExpressionStatement",
                  "src": "477:60:11"
                },
                {
                  "id": 3581,
                  "nodeType": "PlaceholderStatement",
                  "src": "547:1:11"
                }
              ]
            },
            "id": 3583,
            "name": "authorised",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3559,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3558,
                  "mutability": "mutable",
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3583,
                  "src": "408:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3557,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "408:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "407:14:11"
            },
            "src": "388:167:11",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3595,
              "nodeType": "Block",
              "src": "642:48:11",
              "statements": [
                {
                  "expression": {
                    "id": 3593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 3587,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3550,
                          "src": "652:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$3546_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 3589,
                        "indexExpression": {
                          "hexValue": "307830",
                          "id": 3588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "660:3:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0x0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "652:12:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$3546_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 3590,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3541,
                      "src": "652:18:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 3591,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "673:3:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 3592,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "673:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "652:31:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3594,
                  "nodeType": "ExpressionStatement",
                  "src": "652:31:11"
                }
              ]
            },
            "documentation": {
              "id": 3584,
              "nodeType": "StructuredDocumentation",
              "src": "561:55:11",
              "text": " @dev Constructs a new ENS registrar."
            },
            "id": 3596,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3585,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "632:2:11"
            },
            "returnParameters": {
              "id": 3586,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "642:0:11"
            },
            "scope": 3956,
            "src": "621:69:11",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              3443
            ],
            "body": {
              "id": 3620,
              "nodeType": "Block",
              "src": "1035:87:11",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3610,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3599,
                        "src": "1054:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3611,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3601,
                        "src": "1060:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3609,
                      "name": "setOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3674,
                      "src": "1045:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 3612,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1045:21:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3613,
                  "nodeType": "ExpressionStatement",
                  "src": "1045:21:11"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3615,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3599,
                        "src": "1095:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3616,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3603,
                        "src": "1101:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3617,
                        "name": "ttl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3605,
                        "src": "1111:3:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3614,
                      "name": "_setResolverAndTTL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3955,
                      "src": "1076:18:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_uint64_$returns$__$",
                        "typeString": "function (bytes32,address,uint64)"
                      }
                    },
                    "id": 3618,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1076:39:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3619,
                  "nodeType": "ExpressionStatement",
                  "src": "1076:39:11"
                }
              ]
            },
            "documentation": {
              "id": 3597,
              "nodeType": "StructuredDocumentation",
              "src": "696:230:11",
              "text": " @dev Sets the record for a node.\n @param node The node to update.\n @param owner The address of the new owner.\n @param resolver The address of the resolver.\n @param ttl The TTL in seconds."
            },
            "functionSelector": "cf408823",
            "id": 3621,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setRecord",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3607,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1026:8:11"
            },
            "parameters": {
              "id": 3606,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3599,
                  "mutability": "mutable",
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3621,
                  "src": "950:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3598,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "950:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3601,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3621,
                  "src": "964:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3600,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "964:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3603,
                  "mutability": "mutable",
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 3621,
                  "src": "979:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3602,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "979:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3605,
                  "mutability": "mutable",
                  "name": "ttl",
                  "nodeType": "VariableDeclaration",
                  "scope": 3621,
                  "src": "997:10:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3604,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "997:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "949:59:11"
            },
            "returnParameters": {
              "id": 3608,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1035:0:11"
            },
            "scope": 3956,
            "src": "931:191:11",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3456
            ],
            "body": {
              "id": 3650,
              "nodeType": "Block",
              "src": "1555:122:11",
              "statements": [
                {
                  "assignments": [
                    3637
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3637,
                      "mutability": "mutable",
                      "name": "subnode",
                      "nodeType": "VariableDeclaration",
                      "scope": 3650,
                      "src": "1565:15:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3636,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1565:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3643,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 3639,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3624,
                        "src": "1599:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3640,
                        "name": "label",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3626,
                        "src": "1605:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3641,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3628,
                        "src": "1612:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3638,
                      "name": "setSubnodeOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3714,
                      "src": "1583:15:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (bytes32,bytes32,address) returns (bytes32)"
                      }
                    },
                    "id": 3642,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1583:35:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1565:53:11"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3645,
                        "name": "subnode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3637,
                        "src": "1647:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3646,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3630,
                        "src": "1656:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3647,
                        "name": "ttl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3632,
                        "src": "1666:3:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3644,
                      "name": "_setResolverAndTTL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3955,
                      "src": "1628:18:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_uint64_$returns$__$",
                        "typeString": "function (bytes32,address,uint64)"
                      }
                    },
                    "id": 3648,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1628:42:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3649,
                  "nodeType": "ExpressionStatement",
                  "src": "1628:42:11"
                }
              ]
            },
            "documentation": {
              "id": 3622,
              "nodeType": "StructuredDocumentation",
              "src": "1128:296:11",
              "text": " @dev Sets the record for a subnode.\n @param node The parent node.\n @param label The hash of the label specifying the subnode.\n @param owner The address of the new owner.\n @param resolver The address of the resolver.\n @param ttl The TTL in seconds."
            },
            "functionSelector": "5ef2c7f0",
            "id": 3651,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setSubnodeRecord",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3634,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1546:8:11"
            },
            "parameters": {
              "id": 3633,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3624,
                  "mutability": "mutable",
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3651,
                  "src": "1455:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3623,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1455:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3626,
                  "mutability": "mutable",
                  "name": "label",
                  "nodeType": "VariableDeclaration",
                  "scope": 3651,
                  "src": "1469:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3625,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1469:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3628,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3651,
                  "src": "1484:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3627,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1484:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3630,
                  "mutability": "mutable",
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 3651,
                  "src": "1499:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3629,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1499:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3632,
                  "mutability": "mutable",
                  "name": "ttl",
                  "nodeType": "VariableDeclaration",
                  "scope": 3651,
                  "src": "1517:10:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3631,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "1517:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1454:74:11"
            },
            "returnParameters": {
              "id": 3635,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1555:0:11"
            },
            "scope": 3956,
            "src": "1429:248:11",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3481
            ],
            "body": {
              "id": 3673,
              "nodeType": "Block",
              "src": "2004:75:11",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3664,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3654,
                        "src": "2024:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3665,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3656,
                        "src": "2030:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3663,
                      "name": "_setOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3905,
                      "src": "2014:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 3666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2014:22:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3667,
                  "nodeType": "ExpressionStatement",
                  "src": "2014:22:11"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 3669,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3654,
                        "src": "2060:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3670,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3656,
                        "src": "2066:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3668,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3412,
                      "src": "2051:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 3671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2051:21:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3672,
                  "nodeType": "EmitStatement",
                  "src": "2046:26:11"
                }
              ]
            },
            "documentation": {
              "id": 3652,
              "nodeType": "StructuredDocumentation",
              "src": "1683:228:11",
              "text": " @dev Transfers ownership of a node to a new address. May only be called by the current owner of the node.\n @param node The node to transfer ownership of.\n @param owner The address of the new owner."
            },
            "functionSelector": "5b0fc9c3",
            "id": 3674,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 3660,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3654,
                    "src": "1998:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3661,
                "modifierName": {
                  "id": 3659,
                  "name": "authorised",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3583,
                  "src": "1987:10:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1987:16:11"
              }
            ],
            "name": "setOwner",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3658,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1978:8:11"
            },
            "parameters": {
              "id": 3657,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3654,
                  "mutability": "mutable",
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3674,
                  "src": "1934:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3653,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1934:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3656,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3674,
                  "src": "1948:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3655,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1948:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1933:29:11"
            },
            "returnParameters": {
              "id": 3662,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2004:0:11"
            },
            "scope": 3956,
            "src": "1916:163:11",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              3467
            ],
            "body": {
              "id": 3713,
              "nodeType": "Block",
              "src": "2518:177:11",
              "statements": [
                {
                  "assignments": [
                    3691
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3691,
                      "mutability": "mutable",
                      "name": "subnode",
                      "nodeType": "VariableDeclaration",
                      "scope": 3713,
                      "src": "2528:15:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3690,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2528:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3699,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 3695,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3677,
                            "src": "2573:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 3696,
                            "name": "label",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3679,
                            "src": "2579:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 3693,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "2556:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "2556:16:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3697,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2556:29:11",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3692,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "2546:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3698,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2546:40:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2528:58:11"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3701,
                        "name": "subnode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3691,
                        "src": "2606:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3702,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3681,
                        "src": "2615:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3700,
                      "name": "_setOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3905,
                      "src": "2596:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 3703,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2596:25:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3704,
                  "nodeType": "ExpressionStatement",
                  "src": "2596:25:11"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 3706,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3677,
                        "src": "2645:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3707,
                        "name": "label",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3679,
                        "src": "2651:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3708,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3681,
                        "src": "2658:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3705,
                      "name": "NewOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3406,
                      "src": "2636:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,bytes32,address)"
                      }
                    },
                    "id": 3709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2636:28:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3710,
                  "nodeType": "EmitStatement",
                  "src": "2631:33:11"
                },
                {
                  "expression": {
                    "id": 3711,
                    "name": "subnode",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3691,
                    "src": "2681:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3689,
                  "id": 3712,
                  "nodeType": "Return",
                  "src": "2674:14:11"
                }
              ]
            },
            "documentation": {
              "id": 3675,
              "nodeType": "StructuredDocumentation",
              "src": "2085:301:11",
              "text": " @dev Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node.\n @param node The parent node.\n @param label The hash of the label specifying the subnode.\n @param owner The address of the new owner."
            },
            "functionSelector": "06ab5923",
            "id": 3714,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 3685,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3677,
                    "src": "2495:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3686,
                "modifierName": {
                  "id": 3684,
                  "name": "authorised",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3583,
                  "src": "2484:10:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2484:16:11"
              }
            ],
            "name": "setSubnodeOwner",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3683,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2475:8:11"
            },
            "parameters": {
              "id": 3682,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3677,
                  "mutability": "mutable",
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "2416:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3676,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2416:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3679,
                  "mutability": "mutable",
                  "name": "label",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "2430:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3678,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2430:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3681,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "2445:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3680,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2445:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2415:44:11"
            },
            "returnParameters": {
              "id": 3689,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3688,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "2509:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3687,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2509:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2508:9:11"
            },
            "scope": 3956,
            "src": "2391:304:11",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              3474
            ],
            "body": {
              "id": 3738,
              "nodeType": "Block",
              "src": "2964:92:11",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 3727,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3717,
                        "src": "2991:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3728,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3719,
                        "src": "2997:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3726,
                      "name": "NewResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3418,
                      "src": "2979:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 3729,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2979:27:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3730,
                  "nodeType": "EmitStatement",
                  "src": "2974:32:11"
                },
                {
                  "expression": {
                    "id": 3736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 3731,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3550,
                          "src": "3016:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$3546_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 3733,
                        "indexExpression": {
                          "id": 3732,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3717,
                          "src": "3024:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3016:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$3546_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 3734,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "resolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3543,
                      "src": "3016:22:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3735,
                      "name": "resolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3719,
                      "src": "3041:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3016:33:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3737,
                  "nodeType": "ExpressionStatement",
                  "src": "3016:33:11"
                }
              ]
            },
            "documentation": {
              "id": 3715,
              "nodeType": "StructuredDocumentation",
              "src": "2701:164:11",
              "text": " @dev Sets the resolver address for the specified node.\n @param node The node to update.\n @param resolver The address of the resolver."
            },
            "functionSelector": "1896f70a",
            "id": 3739,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 3723,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3717,
                    "src": "2958:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3724,
                "modifierName": {
                  "id": 3722,
                  "name": "authorised",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3583,
                  "src": "2947:10:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2947:16:11"
              }
            ],
            "name": "setResolver",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3721,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2938:8:11"
            },
            "parameters": {
              "id": 3720,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3717,
                  "mutability": "mutable",
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3739,
                  "src": "2891:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3716,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2891:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3719,
                  "mutability": "mutable",
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 3739,
                  "src": "2905:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3718,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2905:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2890:32:11"
            },
            "returnParameters": {
              "id": 3725,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2964:0:11"
            },
            "scope": 3956,
            "src": "2870:186:11",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              3488
            ],
            "body": {
              "id": 3763,
              "nodeType": "Block",
              "src": "3287:72:11",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 3752,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3742,
                        "src": "3309:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3753,
                        "name": "ttl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3744,
                        "src": "3315:3:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3751,
                      "name": "NewTTL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3424,
                      "src": "3302:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint64_$returns$__$",
                        "typeString": "function (bytes32,uint64)"
                      }
                    },
                    "id": 3754,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3302:17:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3755,
                  "nodeType": "EmitStatement",
                  "src": "3297:22:11"
                },
                {
                  "expression": {
                    "id": 3761,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 3756,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3550,
                          "src": "3329:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$3546_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 3758,
                        "indexExpression": {
                          "id": 3757,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3742,
                          "src": "3337:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3329:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$3546_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 3759,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "ttl",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3545,
                      "src": "3329:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3760,
                      "name": "ttl",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3744,
                      "src": "3349:3:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "3329:23:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 3762,
                  "nodeType": "ExpressionStatement",
                  "src": "3329:23:11"
                }
              ]
            },
            "documentation": {
              "id": 3740,
              "nodeType": "StructuredDocumentation",
              "src": "3062:137:11",
              "text": " @dev Sets the TTL for the specified node.\n @param node The node to update.\n @param ttl The TTL in seconds."
            },
            "functionSelector": "14ab9038",
            "id": 3764,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 3748,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3742,
                    "src": "3281:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3749,
                "modifierName": {
                  "id": 3747,
                  "name": "authorised",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3583,
                  "src": "3270:10:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3270:16:11"
              }
            ],
            "name": "setTTL",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3746,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3261:8:11"
            },
            "parameters": {
              "id": 3745,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3742,
                  "mutability": "mutable",
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3764,
                  "src": "3220:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3741,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3220:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3744,
                  "mutability": "mutable",
                  "name": "ttl",
                  "nodeType": "VariableDeclaration",
                  "scope": 3764,
                  "src": "3234:10:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3743,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3234:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3219:26:11"
            },
            "returnParameters": {
              "id": 3750,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3287:0:11"
            },
            "scope": 3956,
            "src": "3204:155:11",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              3495
            ],
            "body": {
              "id": 3789,
              "nodeType": "Block",
              "src": "3779:120:11",
              "statements": [
                {
                  "expression": {
                    "id": 3780,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 3773,
                          "name": "operators",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3556,
                          "src": "3789:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                            "typeString": "mapping(address => mapping(address => bool))"
                          }
                        },
                        "id": 3777,
                        "indexExpression": {
                          "expression": {
                            "id": 3774,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "3799:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3775,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "3799:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3789:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 3778,
                      "indexExpression": {
                        "id": 3776,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3767,
                        "src": "3811:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3789:31:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3779,
                      "name": "approved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3769,
                      "src": "3823:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3789:42:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3781,
                  "nodeType": "ExpressionStatement",
                  "src": "3789:42:11"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 3783,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "3861:3:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3784,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "3861:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 3785,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3767,
                        "src": "3873:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3786,
                        "name": "approved",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3769,
                        "src": "3883:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 3782,
                      "name": "ApprovalForAll",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3432,
                      "src": "3846:14:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,bool)"
                      }
                    },
                    "id": 3787,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3846:46:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3788,
                  "nodeType": "EmitStatement",
                  "src": "3841:51:11"
                }
              ]
            },
            "documentation": {
              "id": 3765,
              "nodeType": "StructuredDocumentation",
              "src": "3365:323:11",
              "text": " @dev Enable or disable approval for a third party (\"operator\") to manage\n  all of `msg.sender`'s ENS records. Emits the ApprovalForAll event.\n @param operator Address to add to the set of authorized operators.\n @param approved True if the operator is approved, false to revoke approval."
            },
            "functionSelector": "a22cb465",
            "id": 3790,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setApprovalForAll",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3771,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3770:8:11"
            },
            "parameters": {
              "id": 3770,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3767,
                  "mutability": "mutable",
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 3790,
                  "src": "3720:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3766,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3720:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3769,
                  "mutability": "mutable",
                  "name": "approved",
                  "nodeType": "VariableDeclaration",
                  "scope": 3790,
                  "src": "3738:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3768,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3738:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3719:33:11"
            },
            "returnParameters": {
              "id": 3772,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3779:0:11"
            },
            "scope": 3956,
            "src": "3693:206:11",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3502
            ],
            "body": {
              "id": 3821,
              "nodeType": "Block",
              "src": "4135:153:11",
              "statements": [
                {
                  "assignments": [
                    3800
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3800,
                      "mutability": "mutable",
                      "name": "addr",
                      "nodeType": "VariableDeclaration",
                      "scope": 3821,
                      "src": "4145:12:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3799,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4145:7:11",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3805,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 3801,
                        "name": "records",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3550,
                        "src": "4160:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$3546_storage_$",
                          "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                        }
                      },
                      "id": 3803,
                      "indexExpression": {
                        "id": 3802,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3793,
                        "src": "4168:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4160:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$3546_storage",
                        "typeString": "struct ENSRegistry.Record storage ref"
                      }
                    },
                    "id": 3804,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "owner",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3541,
                    "src": "4160:19:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4145:34:11"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3806,
                      "name": "addr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3800,
                      "src": "4193:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 3809,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "4209:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ENSRegistry_$3956",
                            "typeString": "contract ENSRegistry"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ENSRegistry_$3956",
                            "typeString": "contract ENSRegistry"
                          }
                        ],
                        "id": 3808,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4201:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 3807,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4201:7:11",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 3810,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4201:13:11",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4193:21:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3818,
                  "nodeType": "IfStatement",
                  "src": "4189:71:11",
                  "trueBody": {
                    "id": 3817,
                    "nodeType": "Block",
                    "src": "4216:44:11",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "307830",
                              "id": 3814,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4245:3:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0x0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 3813,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4237:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 3812,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4237:7:11",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 3815,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4237:12:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "functionReturnParameters": 3798,
                        "id": 3816,
                        "nodeType": "Return",
                        "src": "4230:19:11"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 3819,
                    "name": "addr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3800,
                    "src": "4277:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 3798,
                  "id": 3820,
                  "nodeType": "Return",
                  "src": "4270:11:11"
                }
              ]
            },
            "documentation": {
              "id": 3791,
              "nodeType": "StructuredDocumentation",
              "src": "3905:149:11",
              "text": " @dev Returns the address that owns the specified node.\n @param node The specified node.\n @return address of the owner."
            },
            "functionSelector": "02571be3",
            "id": 3822,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "owner",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3795,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4103:8:11"
            },
            "parameters": {
              "id": 3794,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3793,
                  "mutability": "mutable",
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3822,
                  "src": "4074:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3792,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4074:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4073:14:11"
            },
            "returnParameters": {
              "id": 3798,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3797,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3822,
                  "src": "4126:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3796,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4126:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4125:9:11"
            },
            "scope": 3956,
            "src": "4059:229:11",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              3509
            ],
            "body": {
              "id": 3836,
              "nodeType": "Block",
              "src": "4540:46:11",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 3831,
                        "name": "records",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3550,
                        "src": "4557:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$3546_storage_$",
                          "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                        }
                      },
                      "id": 3833,
                      "indexExpression": {
                        "id": 3832,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3825,
                        "src": "4565:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4557:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$3546_storage",
                        "typeString": "struct ENSRegistry.Record storage ref"
                      }
                    },
                    "id": 3834,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "resolver",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3543,
                    "src": "4557:22:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 3830,
                  "id": 3835,
                  "nodeType": "Return",
                  "src": "4550:29:11"
                }
              ]
            },
            "documentation": {
              "id": 3823,
              "nodeType": "StructuredDocumentation",
              "src": "4294:162:11",
              "text": " @dev Returns the address of the resolver for the specified node.\n @param node The specified node.\n @return address of the resolver."
            },
            "functionSelector": "0178b8bf",
            "id": 3837,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "resolver",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3827,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4508:8:11"
            },
            "parameters": {
              "id": 3826,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3825,
                  "mutability": "mutable",
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3837,
                  "src": "4479:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3824,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4479:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4478:14:11"
            },
            "returnParameters": {
              "id": 3830,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3829,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3837,
                  "src": "4531:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3828,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4531:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4530:9:11"
            },
            "scope": 3956,
            "src": "4461:125:11",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              3516
            ],
            "body": {
              "id": 3851,
              "nodeType": "Block",
              "src": "4827:41:11",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 3846,
                        "name": "records",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3550,
                        "src": "4844:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$3546_storage_$",
                          "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                        }
                      },
                      "id": 3848,
                      "indexExpression": {
                        "id": 3847,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3840,
                        "src": "4852:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4844:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$3546_storage",
                        "typeString": "struct ENSRegistry.Record storage ref"
                      }
                    },
                    "id": 3849,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "ttl",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3545,
                    "src": "4844:17:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 3845,
                  "id": 3850,
                  "nodeType": "Return",
                  "src": "4837:24:11"
                }
              ]
            },
            "documentation": {
              "id": 3838,
              "nodeType": "StructuredDocumentation",
              "src": "4592:157:11",
              "text": " @dev Returns the TTL of a node, and any records associated with it.\n @param node The specified node.\n @return ttl of the node."
            },
            "functionSelector": "16a25cbd",
            "id": 3852,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ttl",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3842,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4796:8:11"
            },
            "parameters": {
              "id": 3841,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3840,
                  "mutability": "mutable",
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3852,
                  "src": "4767:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3839,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4767:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4766:14:11"
            },
            "returnParameters": {
              "id": 3845,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3844,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3852,
                  "src": "4819:6:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3843,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4819:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4818:8:11"
            },
            "scope": 3956,
            "src": "4754:114:11",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              3523
            ],
            "body": {
              "id": 3871,
              "nodeType": "Block",
              "src": "5118:59:11",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3869,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 3861,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3550,
                          "src": "5135:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$3546_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 3863,
                        "indexExpression": {
                          "id": 3862,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3855,
                          "src": "5143:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5135:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$3546_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 3864,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3541,
                      "src": "5135:19:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "307830",
                          "id": 3867,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5166:3:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0x0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 3866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5158:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 3865,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5158:7:11",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 3868,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5158:12:11",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "5135:35:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 3860,
                  "id": 3870,
                  "nodeType": "Return",
                  "src": "5128:42:11"
                }
              ]
            },
            "documentation": {
              "id": 3853,
              "nodeType": "StructuredDocumentation",
              "src": "4874:159:11",
              "text": " @dev Returns whether a record has been imported to the registry.\n @param node The specified node.\n @return Bool if record exists"
            },
            "functionSelector": "f79fe538",
            "id": 3872,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "recordExists",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3857,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5089:8:11"
            },
            "parameters": {
              "id": 3856,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3855,
                  "mutability": "mutable",
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3872,
                  "src": "5060:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3854,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5060:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5059:14:11"
            },
            "returnParameters": {
              "id": 3860,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3859,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3872,
                  "src": "5112:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3858,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5112:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5111:6:11"
            },
            "scope": 3956,
            "src": "5038:139:11",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              3532
            ],
            "body": {
              "id": 3889,
              "nodeType": "Block",
              "src": "5595:50:11",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 3883,
                        "name": "operators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3556,
                        "src": "5612:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                          "typeString": "mapping(address => mapping(address => bool))"
                        }
                      },
                      "id": 3885,
                      "indexExpression": {
                        "id": 3884,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3875,
                        "src": "5622:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "5612:16:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 3887,
                    "indexExpression": {
                      "id": 3886,
                      "name": "operator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3877,
                      "src": "5629:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5612:26:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 3882,
                  "id": 3888,
                  "nodeType": "Return",
                  "src": "5605:33:11"
                }
              ]
            },
            "documentation": {
              "id": 3873,
              "nodeType": "StructuredDocumentation",
              "src": "5183:302:11",
              "text": " @dev Query if an address is an authorized operator for another address.\n @param owner The address that owns the records.\n @param operator The address that acts on behalf of the owner.\n @return True if `operator` is an approved operator for `owner`, false otherwise."
            },
            "functionSelector": "e985e9c5",
            "id": 3890,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isApprovedForAll",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3879,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5566:8:11"
            },
            "parameters": {
              "id": 3878,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3875,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3890,
                  "src": "5516:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3874,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5516:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3877,
                  "mutability": "mutable",
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 3890,
                  "src": "5531:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3876,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5531:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5515:33:11"
            },
            "returnParameters": {
              "id": 3882,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3881,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3890,
                  "src": "5589:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3880,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5589:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5588:6:11"
            },
            "scope": 3956,
            "src": "5490:155:11",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3904,
              "nodeType": "Block",
              "src": "5716:44:11",
              "statements": [
                {
                  "expression": {
                    "id": 3902,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 3897,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3550,
                          "src": "5726:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$3546_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 3899,
                        "indexExpression": {
                          "id": 3898,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3892,
                          "src": "5734:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5726:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$3546_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 3900,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3541,
                      "src": "5726:19:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3901,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3894,
                      "src": "5748:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5726:27:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3903,
                  "nodeType": "ExpressionStatement",
                  "src": "5726:27:11"
                }
              ]
            },
            "id": 3905,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3895,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3892,
                  "mutability": "mutable",
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3905,
                  "src": "5670:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3891,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5670:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3894,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3905,
                  "src": "5684:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3893,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5684:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5669:29:11"
            },
            "returnParameters": {
              "id": 3896,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5716:0:11"
            },
            "scope": 3956,
            "src": "5651:109:11",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3954,
              "nodeType": "Block",
              "src": "5847:282:11",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3914,
                      "name": "resolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3909,
                      "src": "5860:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 3915,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3550,
                          "src": "5872:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$3546_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 3917,
                        "indexExpression": {
                          "id": 3916,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3907,
                          "src": "5880:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5872:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$3546_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 3918,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "resolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3543,
                      "src": "5872:22:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5860:34:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3933,
                  "nodeType": "IfStatement",
                  "src": "5857:143:11",
                  "trueBody": {
                    "id": 3932,
                    "nodeType": "Block",
                    "src": "5896:104:11",
                    "statements": [
                      {
                        "expression": {
                          "id": 3925,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 3920,
                                "name": "records",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3550,
                                "src": "5910:7:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$3546_storage_$",
                                  "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                                }
                              },
                              "id": 3922,
                              "indexExpression": {
                                "id": 3921,
                                "name": "node",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3907,
                                "src": "5918:4:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5910:13:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Record_$3546_storage",
                                "typeString": "struct ENSRegistry.Record storage ref"
                              }
                            },
                            "id": 3923,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "resolver",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3543,
                            "src": "5910:22:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3924,
                            "name": "resolver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3909,
                            "src": "5935:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5910:33:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3926,
                        "nodeType": "ExpressionStatement",
                        "src": "5910:33:11"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3928,
                              "name": "node",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3907,
                              "src": "5974:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 3929,
                              "name": "resolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3909,
                              "src": "5980:8:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 3927,
                            "name": "NewResolver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3418,
                            "src": "5962:11:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,address)"
                            }
                          },
                          "id": 3930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5962:27:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3931,
                        "nodeType": "EmitStatement",
                        "src": "5957:32:11"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 3939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3934,
                      "name": "ttl",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3911,
                      "src": "6013:3:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 3935,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3550,
                          "src": "6020:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$3546_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 3937,
                        "indexExpression": {
                          "id": 3936,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3907,
                          "src": "6028:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6020:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$3546_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 3938,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ttl",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3545,
                      "src": "6020:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "6013:24:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3953,
                  "nodeType": "IfStatement",
                  "src": "6010:113:11",
                  "trueBody": {
                    "id": 3952,
                    "nodeType": "Block",
                    "src": "6039:84:11",
                    "statements": [
                      {
                        "expression": {
                          "id": 3945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 3940,
                                "name": "records",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3550,
                                "src": "6053:7:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$3546_storage_$",
                                  "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                                }
                              },
                              "id": 3942,
                              "indexExpression": {
                                "id": 3941,
                                "name": "node",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3907,
                                "src": "6061:4:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6053:13:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Record_$3546_storage",
                                "typeString": "struct ENSRegistry.Record storage ref"
                              }
                            },
                            "id": 3943,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "ttl",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3545,
                            "src": "6053:17:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3944,
                            "name": "ttl",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3911,
                            "src": "6073:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "6053:23:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 3946,
                        "nodeType": "ExpressionStatement",
                        "src": "6053:23:11"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3948,
                              "name": "node",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3907,
                              "src": "6102:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 3949,
                              "name": "ttl",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3911,
                              "src": "6108:3:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "id": 3947,
                            "name": "NewTTL",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3424,
                            "src": "6095:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint64_$returns$__$",
                              "typeString": "function (bytes32,uint64)"
                            }
                          },
                          "id": 3950,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6095:17:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3951,
                        "nodeType": "EmitStatement",
                        "src": "6090:22:11"
                      }
                    ]
                  }
                }
              ]
            },
            "id": 3955,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setResolverAndTTL",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3912,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3907,
                  "mutability": "mutable",
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3955,
                  "src": "5794:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3906,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5794:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3909,
                  "mutability": "mutable",
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 3955,
                  "src": "5808:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3908,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5808:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3911,
                  "mutability": "mutable",
                  "name": "ttl",
                  "nodeType": "VariableDeclaration",
                  "scope": 3955,
                  "src": "5826:10:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3910,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "5826:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5793:44:11"
            },
            "returnParameters": {
              "id": 3913,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5847:0:11"
            },
            "scope": 3956,
            "src": "5766:363:11",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 3957,
        "src": "84:6047:11"
      }
    ],
    "src": "0:6132:11"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "@ensdomains/ens/contracts/ENSRegistry.sol",
      "exportedSymbols": {
        "ENS": [
          3533
        ],
        "ENSRegistry": [
          3956
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.7",
            ".0"
          ]
        },
        "id": 3535,
        "name": "PragmaDirective",
        "src": "0:23:11"
      },
      {
        "attributes": {
          "SourceUnit": 3534,
          "absolutePath": "@ensdomains/ens/contracts/ENS.sol",
          "file": "./ENS.sol",
          "scope": 3957,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3536,
        "name": "ImportDirective",
        "src": "25:19:11"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            3533
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            3956,
            3533
          ],
          "name": "ENSRegistry",
          "scope": 3957
        },
        "children": [
          {
            "attributes": {
              "text": " The ENS registry contract."
            },
            "id": 3537,
            "name": "StructuredDocumentation",
            "src": "46:37:11"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "ENS",
                  "referencedDeclaration": 3533,
                  "type": "contract ENS"
                },
                "id": 3538,
                "name": "UserDefinedTypeName",
                "src": "108:3:11"
              }
            ],
            "id": 3539,
            "name": "InheritanceSpecifier",
            "src": "108:3:11"
          },
          {
            "attributes": {
              "canonicalName": "ENSRegistry.Record",
              "name": "Record",
              "scope": 3956,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "mutability": "mutable",
                  "name": "owner",
                  "scope": 3546,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "address",
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "stateMutability": "nonpayable",
                      "type": "address"
                    },
                    "id": 3540,
                    "name": "ElementaryTypeName",
                    "src": "143:7:11"
                  }
                ],
                "id": 3541,
                "name": "VariableDeclaration",
                "src": "143:13:11"
              },
              {
                "attributes": {
                  "constant": false,
                  "mutability": "mutable",
                  "name": "resolver",
                  "scope": 3546,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "address",
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "stateMutability": "nonpayable",
                      "type": "address"
                    },
                    "id": 3542,
                    "name": "ElementaryTypeName",
                    "src": "166:7:11"
                  }
                ],
                "id": 3543,
                "name": "VariableDeclaration",
                "src": "166:16:11"
              },
              {
                "attributes": {
                  "constant": false,
                  "mutability": "mutable",
                  "name": "ttl",
                  "scope": 3546,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint64",
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint64",
                      "type": "uint64"
                    },
                    "id": 3544,
                    "name": "ElementaryTypeName",
                    "src": "192:6:11"
                  }
                ],
                "id": 3545,
                "name": "VariableDeclaration",
                "src": "192:10:11"
              }
            ],
            "id": 3546,
            "name": "StructDefinition",
            "src": "119:90:11"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "records",
              "scope": 3956,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(bytes32 => struct ENSRegistry.Record)",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(bytes32 => struct ENSRegistry.Record)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 3547,
                    "name": "ElementaryTypeName",
                    "src": "224:7:11"
                  },
                  {
                    "attributes": {
                      "name": "Record",
                      "referencedDeclaration": 3546,
                      "type": "struct ENSRegistry.Record"
                    },
                    "id": 3548,
                    "name": "UserDefinedTypeName",
                    "src": "235:6:11"
                  }
                ],
                "id": 3549,
                "name": "Mapping",
                "src": "215:27:11"
              }
            ],
            "id": 3550,
            "name": "VariableDeclaration",
            "src": "215:35:11"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "operators",
              "scope": 3956,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(address => mapping(address => bool))",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(address => mapping(address => bool))"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 3551,
                    "name": "ElementaryTypeName",
                    "src": "265:7:11"
                  },
                  {
                    "attributes": {
                      "type": "mapping(address => bool)"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3552,
                        "name": "ElementaryTypeName",
                        "src": "284:7:11"
                      },
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3553,
                        "name": "ElementaryTypeName",
                        "src": "295:4:11"
                      }
                    ],
                    "id": 3554,
                    "name": "Mapping",
                    "src": "276:24:11"
                  }
                ],
                "id": 3555,
                "name": "Mapping",
                "src": "256:45:11"
              }
            ],
            "id": 3556,
            "name": "VariableDeclaration",
            "src": "256:55:11"
          },
          {
            "attributes": {
              "name": "authorised",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "node",
                      "scope": 3583,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3557,
                        "name": "ElementaryTypeName",
                        "src": "408:7:11"
                      }
                    ],
                    "id": 3558,
                    "name": "VariableDeclaration",
                    "src": "408:12:11"
                  }
                ],
                "id": 3559,
                "name": "ParameterList",
                "src": "407:14:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        3561
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "owner",
                          "scope": 3582,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 3560,
                            "name": "ElementaryTypeName",
                            "src": "432:7:11"
                          }
                        ],
                        "id": 3561,
                        "name": "VariableDeclaration",
                        "src": "432:13:11"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "owner",
                          "referencedDeclaration": 3541,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "struct ENSRegistry.Record storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3550,
                                  "type": "mapping(bytes32 => struct ENSRegistry.Record storage ref)",
                                  "value": "records"
                                },
                                "id": 3562,
                                "name": "Identifier",
                                "src": "448:7:11"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3558,
                                  "type": "bytes32",
                                  "value": "node"
                                },
                                "id": 3563,
                                "name": "Identifier",
                                "src": "456:4:11"
                              }
                            ],
                            "id": 3564,
                            "name": "IndexAccess",
                            "src": "448:13:11"
                          }
                        ],
                        "id": 3565,
                        "name": "MemberAccess",
                        "src": "448:19:11"
                      }
                    ],
                    "id": 3566,
                    "name": "VariableDeclarationStatement",
                    "src": "432:35:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 3567,
                            "name": "Identifier",
                            "src": "477:7:11"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "||",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3561,
                                      "type": "address",
                                      "value": "owner"
                                    },
                                    "id": 3568,
                                    "name": "Identifier",
                                    "src": "485:5:11"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "sender",
                                      "type": "address payable"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": -15,
                                          "type": "msg",
                                          "value": "msg"
                                        },
                                        "id": 3569,
                                        "name": "Identifier",
                                        "src": "494:3:11"
                                      }
                                    ],
                                    "id": 3570,
                                    "name": "MemberAccess",
                                    "src": "494:10:11"
                                  }
                                ],
                                "id": 3571,
                                "name": "BinaryOperation",
                                "src": "485:19:11"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "mapping(address => bool)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3556,
                                          "type": "mapping(address => mapping(address => bool))",
                                          "value": "operators"
                                        },
                                        "id": 3572,
                                        "name": "Identifier",
                                        "src": "508:9:11"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3561,
                                          "type": "address",
                                          "value": "owner"
                                        },
                                        "id": 3573,
                                        "name": "Identifier",
                                        "src": "518:5:11"
                                      }
                                    ],
                                    "id": 3574,
                                    "name": "IndexAccess",
                                    "src": "508:16:11"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "sender",
                                      "type": "address payable"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": -15,
                                          "type": "msg",
                                          "value": "msg"
                                        },
                                        "id": 3575,
                                        "name": "Identifier",
                                        "src": "525:3:11"
                                      }
                                    ],
                                    "id": 3576,
                                    "name": "MemberAccess",
                                    "src": "525:10:11"
                                  }
                                ],
                                "id": 3577,
                                "name": "IndexAccess",
                                "src": "508:28:11"
                              }
                            ],
                            "id": 3578,
                            "name": "BinaryOperation",
                            "src": "485:51:11"
                          }
                        ],
                        "id": 3579,
                        "name": "FunctionCall",
                        "src": "477:60:11"
                      }
                    ],
                    "id": 3580,
                    "name": "ExpressionStatement",
                    "src": "477:60:11"
                  },
                  {
                    "id": 3581,
                    "name": "PlaceholderStatement",
                    "src": "547:1:11"
                  }
                ],
                "id": 3582,
                "name": "Block",
                "src": "422:133:11"
              }
            ],
            "id": 3583,
            "name": "ModifierDefinition",
            "src": "388:167:11"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "modifiers": [
                null
              ],
              "name": "",
              "scope": 3956,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Constructs a new ENS registrar."
                },
                "id": 3584,
                "name": "StructuredDocumentation",
                "src": "561:55:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3585,
                "name": "ParameterList",
                "src": "632:2:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3586,
                "name": "ParameterList",
                "src": "642:0:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "owner",
                              "referencedDeclaration": 3541,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct ENSRegistry.Record storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3550,
                                      "type": "mapping(bytes32 => struct ENSRegistry.Record storage ref)",
                                      "value": "records"
                                    },
                                    "id": 3587,
                                    "name": "Identifier",
                                    "src": "652:7:11"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "307830",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0x0"
                                    },
                                    "id": 3588,
                                    "name": "Literal",
                                    "src": "660:3:11"
                                  }
                                ],
                                "id": 3589,
                                "name": "IndexAccess",
                                "src": "652:12:11"
                              }
                            ],
                            "id": 3590,
                            "name": "MemberAccess",
                            "src": "652:18:11"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 3591,
                                "name": "Identifier",
                                "src": "673:3:11"
                              }
                            ],
                            "id": 3592,
                            "name": "MemberAccess",
                            "src": "673:10:11"
                          }
                        ],
                        "id": 3593,
                        "name": "Assignment",
                        "src": "652:31:11"
                      }
                    ],
                    "id": 3594,
                    "name": "ExpressionStatement",
                    "src": "652:31:11"
                  }
                ],
                "id": 3595,
                "name": "Block",
                "src": "642:48:11"
              }
            ],
            "id": 3596,
            "name": "FunctionDefinition",
            "src": "621:69:11"
          },
          {
            "attributes": {
              "baseFunctions": [
                3443
              ],
              "functionSelector": "cf408823",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "setRecord",
              "scope": 3956,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Sets the record for a node.\n @param node The node to update.\n @param owner The address of the new owner.\n @param resolver The address of the resolver.\n @param ttl The TTL in seconds."
                },
                "id": 3597,
                "name": "StructuredDocumentation",
                "src": "696:230:11"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3607,
                "name": "OverrideSpecifier",
                "src": "1026:8:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "node",
                      "scope": 3621,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3598,
                        "name": "ElementaryTypeName",
                        "src": "950:7:11"
                      }
                    ],
                    "id": 3599,
                    "name": "VariableDeclaration",
                    "src": "950:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "owner",
                      "scope": 3621,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3600,
                        "name": "ElementaryTypeName",
                        "src": "964:7:11"
                      }
                    ],
                    "id": 3601,
                    "name": "VariableDeclaration",
                    "src": "964:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "resolver",
                      "scope": 3621,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3602,
                        "name": "ElementaryTypeName",
                        "src": "979:7:11"
                      }
                    ],
                    "id": 3603,
                    "name": "VariableDeclaration",
                    "src": "979:16:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "ttl",
                      "scope": 3621,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 3604,
                        "name": "ElementaryTypeName",
                        "src": "997:6:11"
                      }
                    ],
                    "id": 3605,
                    "name": "VariableDeclaration",
                    "src": "997:10:11"
                  }
                ],
                "id": 3606,
                "name": "ParameterList",
                "src": "949:59:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3608,
                "name": "ParameterList",
                "src": "1035:0:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3674,
                              "type": "function (bytes32,address)",
                              "value": "setOwner"
                            },
                            "id": 3609,
                            "name": "Identifier",
                            "src": "1045:8:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3599,
                              "type": "bytes32",
                              "value": "node"
                            },
                            "id": 3610,
                            "name": "Identifier",
                            "src": "1054:4:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3601,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 3611,
                            "name": "Identifier",
                            "src": "1060:5:11"
                          }
                        ],
                        "id": 3612,
                        "name": "FunctionCall",
                        "src": "1045:21:11"
                      }
                    ],
                    "id": 3613,
                    "name": "ExpressionStatement",
                    "src": "1045:21:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3955,
                              "type": "function (bytes32,address,uint64)",
                              "value": "_setResolverAndTTL"
                            },
                            "id": 3614,
                            "name": "Identifier",
                            "src": "1076:18:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3599,
                              "type": "bytes32",
                              "value": "node"
                            },
                            "id": 3615,
                            "name": "Identifier",
                            "src": "1095:4:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3603,
                              "type": "address",
                              "value": "resolver"
                            },
                            "id": 3616,
                            "name": "Identifier",
                            "src": "1101:8:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3605,
                              "type": "uint64",
                              "value": "ttl"
                            },
                            "id": 3617,
                            "name": "Identifier",
                            "src": "1111:3:11"
                          }
                        ],
                        "id": 3618,
                        "name": "FunctionCall",
                        "src": "1076:39:11"
                      }
                    ],
                    "id": 3619,
                    "name": "ExpressionStatement",
                    "src": "1076:39:11"
                  }
                ],
                "id": 3620,
                "name": "Block",
                "src": "1035:87:11"
              }
            ],
            "id": 3621,
            "name": "FunctionDefinition",
            "src": "931:191:11"
          },
          {
            "attributes": {
              "baseFunctions": [
                3456
              ],
              "functionSelector": "5ef2c7f0",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "setSubnodeRecord",
              "scope": 3956,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Sets the record for a subnode.\n @param node The parent node.\n @param label The hash of the label specifying the subnode.\n @param owner The address of the new owner.\n @param resolver The address of the resolver.\n @param ttl The TTL in seconds."
                },
                "id": 3622,
                "name": "StructuredDocumentation",
                "src": "1128:296:11"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3634,
                "name": "OverrideSpecifier",
                "src": "1546:8:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "node",
                      "scope": 3651,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3623,
                        "name": "ElementaryTypeName",
                        "src": "1455:7:11"
                      }
                    ],
                    "id": 3624,
                    "name": "VariableDeclaration",
                    "src": "1455:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "label",
                      "scope": 3651,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3625,
                        "name": "ElementaryTypeName",
                        "src": "1469:7:11"
                      }
                    ],
                    "id": 3626,
                    "name": "VariableDeclaration",
                    "src": "1469:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "owner",
                      "scope": 3651,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3627,
                        "name": "ElementaryTypeName",
                        "src": "1484:7:11"
                      }
                    ],
                    "id": 3628,
                    "name": "VariableDeclaration",
                    "src": "1484:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "resolver",
                      "scope": 3651,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3629,
                        "name": "ElementaryTypeName",
                        "src": "1499:7:11"
                      }
                    ],
                    "id": 3630,
                    "name": "VariableDeclaration",
                    "src": "1499:16:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "ttl",
                      "scope": 3651,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 3631,
                        "name": "ElementaryTypeName",
                        "src": "1517:6:11"
                      }
                    ],
                    "id": 3632,
                    "name": "VariableDeclaration",
                    "src": "1517:10:11"
                  }
                ],
                "id": 3633,
                "name": "ParameterList",
                "src": "1454:74:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3635,
                "name": "ParameterList",
                "src": "1555:0:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        3637
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "subnode",
                          "scope": 3650,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 3636,
                            "name": "ElementaryTypeName",
                            "src": "1565:7:11"
                          }
                        ],
                        "id": 3637,
                        "name": "VariableDeclaration",
                        "src": "1565:15:11"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3714,
                              "type": "function (bytes32,bytes32,address) returns (bytes32)",
                              "value": "setSubnodeOwner"
                            },
                            "id": 3638,
                            "name": "Identifier",
                            "src": "1583:15:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3624,
                              "type": "bytes32",
                              "value": "node"
                            },
                            "id": 3639,
                            "name": "Identifier",
                            "src": "1599:4:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3626,
                              "type": "bytes32",
                              "value": "label"
                            },
                            "id": 3640,
                            "name": "Identifier",
                            "src": "1605:5:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3628,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 3641,
                            "name": "Identifier",
                            "src": "1612:5:11"
                          }
                        ],
                        "id": 3642,
                        "name": "FunctionCall",
                        "src": "1583:35:11"
                      }
                    ],
                    "id": 3643,
                    "name": "VariableDeclarationStatement",
                    "src": "1565:53:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3955,
                              "type": "function (bytes32,address,uint64)",
                              "value": "_setResolverAndTTL"
                            },
                            "id": 3644,
                            "name": "Identifier",
                            "src": "1628:18:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3637,
                              "type": "bytes32",
                              "value": "subnode"
                            },
                            "id": 3645,
                            "name": "Identifier",
                            "src": "1647:7:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3630,
                              "type": "address",
                              "value": "resolver"
                            },
                            "id": 3646,
                            "name": "Identifier",
                            "src": "1656:8:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3632,
                              "type": "uint64",
                              "value": "ttl"
                            },
                            "id": 3647,
                            "name": "Identifier",
                            "src": "1666:3:11"
                          }
                        ],
                        "id": 3648,
                        "name": "FunctionCall",
                        "src": "1628:42:11"
                      }
                    ],
                    "id": 3649,
                    "name": "ExpressionStatement",
                    "src": "1628:42:11"
                  }
                ],
                "id": 3650,
                "name": "Block",
                "src": "1555:122:11"
              }
            ],
            "id": 3651,
            "name": "FunctionDefinition",
            "src": "1429:248:11"
          },
          {
            "attributes": {
              "baseFunctions": [
                3481
              ],
              "functionSelector": "5b0fc9c3",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "setOwner",
              "scope": 3956,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Transfers ownership of a node to a new address. May only be called by the current owner of the node.\n @param node The node to transfer ownership of.\n @param owner The address of the new owner."
                },
                "id": 3652,
                "name": "StructuredDocumentation",
                "src": "1683:228:11"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3658,
                "name": "OverrideSpecifier",
                "src": "1978:8:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "node",
                      "scope": 3674,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3653,
                        "name": "ElementaryTypeName",
                        "src": "1934:7:11"
                      }
                    ],
                    "id": 3654,
                    "name": "VariableDeclaration",
                    "src": "1934:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "owner",
                      "scope": 3674,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3655,
                        "name": "ElementaryTypeName",
                        "src": "1948:7:11"
                      }
                    ],
                    "id": 3656,
                    "name": "VariableDeclaration",
                    "src": "1948:13:11"
                  }
                ],
                "id": 3657,
                "name": "ParameterList",
                "src": "1933:29:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3662,
                "name": "ParameterList",
                "src": "2004:0:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3583,
                      "type": "modifier (bytes32)",
                      "value": "authorised"
                    },
                    "id": 3659,
                    "name": "Identifier",
                    "src": "1987:10:11"
                  },
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3654,
                      "type": "bytes32",
                      "value": "node"
                    },
                    "id": 3660,
                    "name": "Identifier",
                    "src": "1998:4:11"
                  }
                ],
                "id": 3661,
                "name": "ModifierInvocation",
                "src": "1987:16:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3905,
                              "type": "function (bytes32,address)",
                              "value": "_setOwner"
                            },
                            "id": 3663,
                            "name": "Identifier",
                            "src": "2014:9:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3654,
                              "type": "bytes32",
                              "value": "node"
                            },
                            "id": 3664,
                            "name": "Identifier",
                            "src": "2024:4:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3656,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 3665,
                            "name": "Identifier",
                            "src": "2030:5:11"
                          }
                        ],
                        "id": 3666,
                        "name": "FunctionCall",
                        "src": "2014:22:11"
                      }
                    ],
                    "id": 3667,
                    "name": "ExpressionStatement",
                    "src": "2014:22:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3412,
                              "type": "function (bytes32,address)",
                              "value": "Transfer"
                            },
                            "id": 3668,
                            "name": "Identifier",
                            "src": "2051:8:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3654,
                              "type": "bytes32",
                              "value": "node"
                            },
                            "id": 3669,
                            "name": "Identifier",
                            "src": "2060:4:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3656,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 3670,
                            "name": "Identifier",
                            "src": "2066:5:11"
                          }
                        ],
                        "id": 3671,
                        "name": "FunctionCall",
                        "src": "2051:21:11"
                      }
                    ],
                    "id": 3672,
                    "name": "EmitStatement",
                    "src": "2046:26:11"
                  }
                ],
                "id": 3673,
                "name": "Block",
                "src": "2004:75:11"
              }
            ],
            "id": 3674,
            "name": "FunctionDefinition",
            "src": "1916:163:11"
          },
          {
            "attributes": {
              "baseFunctions": [
                3467
              ],
              "functionSelector": "06ab5923",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "setSubnodeOwner",
              "scope": 3956,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node.\n @param node The parent node.\n @param label The hash of the label specifying the subnode.\n @param owner The address of the new owner."
                },
                "id": 3675,
                "name": "StructuredDocumentation",
                "src": "2085:301:11"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3683,
                "name": "OverrideSpecifier",
                "src": "2475:8:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "node",
                      "scope": 3714,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3676,
                        "name": "ElementaryTypeName",
                        "src": "2416:7:11"
                      }
                    ],
                    "id": 3677,
                    "name": "VariableDeclaration",
                    "src": "2416:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "label",
                      "scope": 3714,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3678,
                        "name": "ElementaryTypeName",
                        "src": "2430:7:11"
                      }
                    ],
                    "id": 3679,
                    "name": "VariableDeclaration",
                    "src": "2430:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "owner",
                      "scope": 3714,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3680,
                        "name": "ElementaryTypeName",
                        "src": "2445:7:11"
                      }
                    ],
                    "id": 3681,
                    "name": "VariableDeclaration",
                    "src": "2445:13:11"
                  }
                ],
                "id": 3682,
                "name": "ParameterList",
                "src": "2415:44:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 3714,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3687,
                        "name": "ElementaryTypeName",
                        "src": "2509:7:11"
                      }
                    ],
                    "id": 3688,
                    "name": "VariableDeclaration",
                    "src": "2509:7:11"
                  }
                ],
                "id": 3689,
                "name": "ParameterList",
                "src": "2508:9:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3583,
                      "type": "modifier (bytes32)",
                      "value": "authorised"
                    },
                    "id": 3684,
                    "name": "Identifier",
                    "src": "2484:10:11"
                  },
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3677,
                      "type": "bytes32",
                      "value": "node"
                    },
                    "id": 3685,
                    "name": "Identifier",
                    "src": "2495:4:11"
                  }
                ],
                "id": 3686,
                "name": "ModifierInvocation",
                "src": "2484:16:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        3691
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "subnode",
                          "scope": 3713,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 3690,
                            "name": "ElementaryTypeName",
                            "src": "2528:7:11"
                          }
                        ],
                        "id": 3691,
                        "name": "VariableDeclaration",
                        "src": "2528:15:11"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": -8,
                              "type": "function (bytes memory) pure returns (bytes32)",
                              "value": "keccak256"
                            },
                            "id": 3692,
                            "name": "Identifier",
                            "src": "2546:9:11"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "encodePacked",
                                  "type": "function () pure returns (bytes memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -1,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 3693,
                                    "name": "Identifier",
                                    "src": "2556:3:11"
                                  }
                                ],
                                "id": 3694,
                                "name": "MemberAccess",
                                "src": "2556:16:11"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3677,
                                  "type": "bytes32",
                                  "value": "node"
                                },
                                "id": 3695,
                                "name": "Identifier",
                                "src": "2573:4:11"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3679,
                                  "type": "bytes32",
                                  "value": "label"
                                },
                                "id": 3696,
                                "name": "Identifier",
                                "src": "2579:5:11"
                              }
                            ],
                            "id": 3697,
                            "name": "FunctionCall",
                            "src": "2556:29:11"
                          }
                        ],
                        "id": 3698,
                        "name": "FunctionCall",
                        "src": "2546:40:11"
                      }
                    ],
                    "id": 3699,
                    "name": "VariableDeclarationStatement",
                    "src": "2528:58:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3905,
                              "type": "function (bytes32,address)",
                              "value": "_setOwner"
                            },
                            "id": 3700,
                            "name": "Identifier",
                            "src": "2596:9:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3691,
                              "type": "bytes32",
                              "value": "subnode"
                            },
                            "id": 3701,
                            "name": "Identifier",
                            "src": "2606:7:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3681,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 3702,
                            "name": "Identifier",
                            "src": "2615:5:11"
                          }
                        ],
                        "id": 3703,
                        "name": "FunctionCall",
                        "src": "2596:25:11"
                      }
                    ],
                    "id": 3704,
                    "name": "ExpressionStatement",
                    "src": "2596:25:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3406,
                              "type": "function (bytes32,bytes32,address)",
                              "value": "NewOwner"
                            },
                            "id": 3705,
                            "name": "Identifier",
                            "src": "2636:8:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3677,
                              "type": "bytes32",
                              "value": "node"
                            },
                            "id": 3706,
                            "name": "Identifier",
                            "src": "2645:4:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3679,
                              "type": "bytes32",
                              "value": "label"
                            },
                            "id": 3707,
                            "name": "Identifier",
                            "src": "2651:5:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3681,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 3708,
                            "name": "Identifier",
                            "src": "2658:5:11"
                          }
                        ],
                        "id": 3709,
                        "name": "FunctionCall",
                        "src": "2636:28:11"
                      }
                    ],
                    "id": 3710,
                    "name": "EmitStatement",
                    "src": "2631:33:11"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3689
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 3691,
                          "type": "bytes32",
                          "value": "subnode"
                        },
                        "id": 3711,
                        "name": "Identifier",
                        "src": "2681:7:11"
                      }
                    ],
                    "id": 3712,
                    "name": "Return",
                    "src": "2674:14:11"
                  }
                ],
                "id": 3713,
                "name": "Block",
                "src": "2518:177:11"
              }
            ],
            "id": 3714,
            "name": "FunctionDefinition",
            "src": "2391:304:11"
          },
          {
            "attributes": {
              "baseFunctions": [
                3474
              ],
              "functionSelector": "1896f70a",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "setResolver",
              "scope": 3956,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Sets the resolver address for the specified node.\n @param node The node to update.\n @param resolver The address of the resolver."
                },
                "id": 3715,
                "name": "StructuredDocumentation",
                "src": "2701:164:11"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3721,
                "name": "OverrideSpecifier",
                "src": "2938:8:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "node",
                      "scope": 3739,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3716,
                        "name": "ElementaryTypeName",
                        "src": "2891:7:11"
                      }
                    ],
                    "id": 3717,
                    "name": "VariableDeclaration",
                    "src": "2891:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "resolver",
                      "scope": 3739,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3718,
                        "name": "ElementaryTypeName",
                        "src": "2905:7:11"
                      }
                    ],
                    "id": 3719,
                    "name": "VariableDeclaration",
                    "src": "2905:16:11"
                  }
                ],
                "id": 3720,
                "name": "ParameterList",
                "src": "2890:32:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3725,
                "name": "ParameterList",
                "src": "2964:0:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3583,
                      "type": "modifier (bytes32)",
                      "value": "authorised"
                    },
                    "id": 3722,
                    "name": "Identifier",
                    "src": "2947:10:11"
                  },
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3717,
                      "type": "bytes32",
                      "value": "node"
                    },
                    "id": 3723,
                    "name": "Identifier",
                    "src": "2958:4:11"
                  }
                ],
                "id": 3724,
                "name": "ModifierInvocation",
                "src": "2947:16:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3418,
                              "type": "function (bytes32,address)",
                              "value": "NewResolver"
                            },
                            "id": 3726,
                            "name": "Identifier",
                            "src": "2979:11:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3717,
                              "type": "bytes32",
                              "value": "node"
                            },
                            "id": 3727,
                            "name": "Identifier",
                            "src": "2991:4:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3719,
                              "type": "address",
                              "value": "resolver"
                            },
                            "id": 3728,
                            "name": "Identifier",
                            "src": "2997:8:11"
                          }
                        ],
                        "id": 3729,
                        "name": "FunctionCall",
                        "src": "2979:27:11"
                      }
                    ],
                    "id": 3730,
                    "name": "EmitStatement",
                    "src": "2974:32:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "resolver",
                              "referencedDeclaration": 3543,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct ENSRegistry.Record storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3550,
                                      "type": "mapping(bytes32 => struct ENSRegistry.Record storage ref)",
                                      "value": "records"
                                    },
                                    "id": 3731,
                                    "name": "Identifier",
                                    "src": "3016:7:11"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3717,
                                      "type": "bytes32",
                                      "value": "node"
                                    },
                                    "id": 3732,
                                    "name": "Identifier",
                                    "src": "3024:4:11"
                                  }
                                ],
                                "id": 3733,
                                "name": "IndexAccess",
                                "src": "3016:13:11"
                              }
                            ],
                            "id": 3734,
                            "name": "MemberAccess",
                            "src": "3016:22:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3719,
                              "type": "address",
                              "value": "resolver"
                            },
                            "id": 3735,
                            "name": "Identifier",
                            "src": "3041:8:11"
                          }
                        ],
                        "id": 3736,
                        "name": "Assignment",
                        "src": "3016:33:11"
                      }
                    ],
                    "id": 3737,
                    "name": "ExpressionStatement",
                    "src": "3016:33:11"
                  }
                ],
                "id": 3738,
                "name": "Block",
                "src": "2964:92:11"
              }
            ],
            "id": 3739,
            "name": "FunctionDefinition",
            "src": "2870:186:11"
          },
          {
            "attributes": {
              "baseFunctions": [
                3488
              ],
              "functionSelector": "14ab9038",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "setTTL",
              "scope": 3956,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Sets the TTL for the specified node.\n @param node The node to update.\n @param ttl The TTL in seconds."
                },
                "id": 3740,
                "name": "StructuredDocumentation",
                "src": "3062:137:11"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3746,
                "name": "OverrideSpecifier",
                "src": "3261:8:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "node",
                      "scope": 3764,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3741,
                        "name": "ElementaryTypeName",
                        "src": "3220:7:11"
                      }
                    ],
                    "id": 3742,
                    "name": "VariableDeclaration",
                    "src": "3220:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "ttl",
                      "scope": 3764,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 3743,
                        "name": "ElementaryTypeName",
                        "src": "3234:6:11"
                      }
                    ],
                    "id": 3744,
                    "name": "VariableDeclaration",
                    "src": "3234:10:11"
                  }
                ],
                "id": 3745,
                "name": "ParameterList",
                "src": "3219:26:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3750,
                "name": "ParameterList",
                "src": "3287:0:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3583,
                      "type": "modifier (bytes32)",
                      "value": "authorised"
                    },
                    "id": 3747,
                    "name": "Identifier",
                    "src": "3270:10:11"
                  },
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3742,
                      "type": "bytes32",
                      "value": "node"
                    },
                    "id": 3748,
                    "name": "Identifier",
                    "src": "3281:4:11"
                  }
                ],
                "id": 3749,
                "name": "ModifierInvocation",
                "src": "3270:16:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3424,
                              "type": "function (bytes32,uint64)",
                              "value": "NewTTL"
                            },
                            "id": 3751,
                            "name": "Identifier",
                            "src": "3302:6:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3742,
                              "type": "bytes32",
                              "value": "node"
                            },
                            "id": 3752,
                            "name": "Identifier",
                            "src": "3309:4:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3744,
                              "type": "uint64",
                              "value": "ttl"
                            },
                            "id": 3753,
                            "name": "Identifier",
                            "src": "3315:3:11"
                          }
                        ],
                        "id": 3754,
                        "name": "FunctionCall",
                        "src": "3302:17:11"
                      }
                    ],
                    "id": 3755,
                    "name": "EmitStatement",
                    "src": "3297:22:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "ttl",
                              "referencedDeclaration": 3545,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct ENSRegistry.Record storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3550,
                                      "type": "mapping(bytes32 => struct ENSRegistry.Record storage ref)",
                                      "value": "records"
                                    },
                                    "id": 3756,
                                    "name": "Identifier",
                                    "src": "3329:7:11"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3742,
                                      "type": "bytes32",
                                      "value": "node"
                                    },
                                    "id": 3757,
                                    "name": "Identifier",
                                    "src": "3337:4:11"
                                  }
                                ],
                                "id": 3758,
                                "name": "IndexAccess",
                                "src": "3329:13:11"
                              }
                            ],
                            "id": 3759,
                            "name": "MemberAccess",
                            "src": "3329:17:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3744,
                              "type": "uint64",
                              "value": "ttl"
                            },
                            "id": 3760,
                            "name": "Identifier",
                            "src": "3349:3:11"
                          }
                        ],
                        "id": 3761,
                        "name": "Assignment",
                        "src": "3329:23:11"
                      }
                    ],
                    "id": 3762,
                    "name": "ExpressionStatement",
                    "src": "3329:23:11"
                  }
                ],
                "id": 3763,
                "name": "Block",
                "src": "3287:72:11"
              }
            ],
            "id": 3764,
            "name": "FunctionDefinition",
            "src": "3204:155:11"
          },
          {
            "attributes": {
              "baseFunctions": [
                3495
              ],
              "functionSelector": "a22cb465",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "setApprovalForAll",
              "scope": 3956,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Enable or disable approval for a third party (\"operator\") to manage\n  all of `msg.sender`'s ENS records. Emits the ApprovalForAll event.\n @param operator Address to add to the set of authorized operators.\n @param approved True if the operator is approved, false to revoke approval."
                },
                "id": 3765,
                "name": "StructuredDocumentation",
                "src": "3365:323:11"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3771,
                "name": "OverrideSpecifier",
                "src": "3770:8:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "operator",
                      "scope": 3790,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3766,
                        "name": "ElementaryTypeName",
                        "src": "3720:7:11"
                      }
                    ],
                    "id": 3767,
                    "name": "VariableDeclaration",
                    "src": "3720:16:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "approved",
                      "scope": 3790,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3768,
                        "name": "ElementaryTypeName",
                        "src": "3738:4:11"
                      }
                    ],
                    "id": 3769,
                    "name": "VariableDeclaration",
                    "src": "3738:13:11"
                  }
                ],
                "id": 3770,
                "name": "ParameterList",
                "src": "3719:33:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3772,
                "name": "ParameterList",
                "src": "3779:0:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "mapping(address => bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3556,
                                      "type": "mapping(address => mapping(address => bool))",
                                      "value": "operators"
                                    },
                                    "id": 3773,
                                    "name": "Identifier",
                                    "src": "3789:9:11"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "sender",
                                      "type": "address payable"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": -15,
                                          "type": "msg",
                                          "value": "msg"
                                        },
                                        "id": 3774,
                                        "name": "Identifier",
                                        "src": "3799:3:11"
                                      }
                                    ],
                                    "id": 3775,
                                    "name": "MemberAccess",
                                    "src": "3799:10:11"
                                  }
                                ],
                                "id": 3777,
                                "name": "IndexAccess",
                                "src": "3789:21:11"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3767,
                                  "type": "address",
                                  "value": "operator"
                                },
                                "id": 3776,
                                "name": "Identifier",
                                "src": "3811:8:11"
                              }
                            ],
                            "id": 3778,
                            "name": "IndexAccess",
                            "src": "3789:31:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3769,
                              "type": "bool",
                              "value": "approved"
                            },
                            "id": 3779,
                            "name": "Identifier",
                            "src": "3823:8:11"
                          }
                        ],
                        "id": 3780,
                        "name": "Assignment",
                        "src": "3789:42:11"
                      }
                    ],
                    "id": 3781,
                    "name": "ExpressionStatement",
                    "src": "3789:42:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3432,
                              "type": "function (address,address,bool)",
                              "value": "ApprovalForAll"
                            },
                            "id": 3782,
                            "name": "Identifier",
                            "src": "3846:14:11"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 3783,
                                "name": "Identifier",
                                "src": "3861:3:11"
                              }
                            ],
                            "id": 3784,
                            "name": "MemberAccess",
                            "src": "3861:10:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3767,
                              "type": "address",
                              "value": "operator"
                            },
                            "id": 3785,
                            "name": "Identifier",
                            "src": "3873:8:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3769,
                              "type": "bool",
                              "value": "approved"
                            },
                            "id": 3786,
                            "name": "Identifier",
                            "src": "3883:8:11"
                          }
                        ],
                        "id": 3787,
                        "name": "FunctionCall",
                        "src": "3846:46:11"
                      }
                    ],
                    "id": 3788,
                    "name": "EmitStatement",
                    "src": "3841:51:11"
                  }
                ],
                "id": 3789,
                "name": "Block",
                "src": "3779:120:11"
              }
            ],
            "id": 3790,
            "name": "FunctionDefinition",
            "src": "3693:206:11"
          },
          {
            "attributes": {
              "baseFunctions": [
                3502
              ],
              "functionSelector": "02571be3",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "owner",
              "scope": 3956,
              "stateMutability": "view",
              "virtual": true,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Returns the address that owns the specified node.\n @param node The specified node.\n @return address of the owner."
                },
                "id": 3791,
                "name": "StructuredDocumentation",
                "src": "3905:149:11"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3795,
                "name": "OverrideSpecifier",
                "src": "4103:8:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "node",
                      "scope": 3822,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3792,
                        "name": "ElementaryTypeName",
                        "src": "4074:7:11"
                      }
                    ],
                    "id": 3793,
                    "name": "VariableDeclaration",
                    "src": "4074:12:11"
                  }
                ],
                "id": 3794,
                "name": "ParameterList",
                "src": "4073:14:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 3822,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3796,
                        "name": "ElementaryTypeName",
                        "src": "4126:7:11"
                      }
                    ],
                    "id": 3797,
                    "name": "VariableDeclaration",
                    "src": "4126:7:11"
                  }
                ],
                "id": 3798,
                "name": "ParameterList",
                "src": "4125:9:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        3800
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "addr",
                          "scope": 3821,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 3799,
                            "name": "ElementaryTypeName",
                            "src": "4145:7:11"
                          }
                        ],
                        "id": 3800,
                        "name": "VariableDeclaration",
                        "src": "4145:12:11"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "owner",
                          "referencedDeclaration": 3541,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "struct ENSRegistry.Record storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3550,
                                  "type": "mapping(bytes32 => struct ENSRegistry.Record storage ref)",
                                  "value": "records"
                                },
                                "id": 3801,
                                "name": "Identifier",
                                "src": "4160:7:11"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3793,
                                  "type": "bytes32",
                                  "value": "node"
                                },
                                "id": 3802,
                                "name": "Identifier",
                                "src": "4168:4:11"
                              }
                            ],
                            "id": 3803,
                            "name": "IndexAccess",
                            "src": "4160:13:11"
                          }
                        ],
                        "id": 3804,
                        "name": "MemberAccess",
                        "src": "4160:19:11"
                      }
                    ],
                    "id": 3805,
                    "name": "VariableDeclarationStatement",
                    "src": "4145:34:11"
                  },
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3800,
                              "type": "address",
                              "value": "addr"
                            },
                            "id": 3806,
                            "name": "Identifier",
                            "src": "4193:4:11"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_ENSRegistry_$3956",
                                      "typeString": "contract ENSRegistry"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 3807,
                                    "name": "ElementaryTypeName",
                                    "src": "4201:7:11"
                                  }
                                ],
                                "id": 3808,
                                "name": "ElementaryTypeNameExpression",
                                "src": "4201:7:11"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -28,
                                  "type": "contract ENSRegistry",
                                  "value": "this"
                                },
                                "id": 3809,
                                "name": "Identifier",
                                "src": "4209:4:11"
                              }
                            ],
                            "id": 3810,
                            "name": "FunctionCall",
                            "src": "4201:13:11"
                          }
                        ],
                        "id": 3811,
                        "name": "BinaryOperation",
                        "src": "4193:21:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 3798
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address payable",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address"
                                        },
                                        "id": 3812,
                                        "name": "ElementaryTypeName",
                                        "src": "4237:7:11"
                                      }
                                    ],
                                    "id": 3813,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "4237:7:11"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "307830",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0x0"
                                    },
                                    "id": 3814,
                                    "name": "Literal",
                                    "src": "4245:3:11"
                                  }
                                ],
                                "id": 3815,
                                "name": "FunctionCall",
                                "src": "4237:12:11"
                              }
                            ],
                            "id": 3816,
                            "name": "Return",
                            "src": "4230:19:11"
                          }
                        ],
                        "id": 3817,
                        "name": "Block",
                        "src": "4216:44:11"
                      }
                    ],
                    "id": 3818,
                    "name": "IfStatement",
                    "src": "4189:71:11"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3798
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 3800,
                          "type": "address",
                          "value": "addr"
                        },
                        "id": 3819,
                        "name": "Identifier",
                        "src": "4277:4:11"
                      }
                    ],
                    "id": 3820,
                    "name": "Return",
                    "src": "4270:11:11"
                  }
                ],
                "id": 3821,
                "name": "Block",
                "src": "4135:153:11"
              }
            ],
            "id": 3822,
            "name": "FunctionDefinition",
            "src": "4059:229:11"
          },
          {
            "attributes": {
              "baseFunctions": [
                3509
              ],
              "functionSelector": "0178b8bf",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "resolver",
              "scope": 3956,
              "stateMutability": "view",
              "virtual": true,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Returns the address of the resolver for the specified node.\n @param node The specified node.\n @return address of the resolver."
                },
                "id": 3823,
                "name": "StructuredDocumentation",
                "src": "4294:162:11"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3827,
                "name": "OverrideSpecifier",
                "src": "4508:8:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "node",
                      "scope": 3837,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3824,
                        "name": "ElementaryTypeName",
                        "src": "4479:7:11"
                      }
                    ],
                    "id": 3825,
                    "name": "VariableDeclaration",
                    "src": "4479:12:11"
                  }
                ],
                "id": 3826,
                "name": "ParameterList",
                "src": "4478:14:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 3837,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3828,
                        "name": "ElementaryTypeName",
                        "src": "4531:7:11"
                      }
                    ],
                    "id": 3829,
                    "name": "VariableDeclaration",
                    "src": "4531:7:11"
                  }
                ],
                "id": 3830,
                "name": "ParameterList",
                "src": "4530:9:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3830
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "resolver",
                          "referencedDeclaration": 3543,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "struct ENSRegistry.Record storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3550,
                                  "type": "mapping(bytes32 => struct ENSRegistry.Record storage ref)",
                                  "value": "records"
                                },
                                "id": 3831,
                                "name": "Identifier",
                                "src": "4557:7:11"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3825,
                                  "type": "bytes32",
                                  "value": "node"
                                },
                                "id": 3832,
                                "name": "Identifier",
                                "src": "4565:4:11"
                              }
                            ],
                            "id": 3833,
                            "name": "IndexAccess",
                            "src": "4557:13:11"
                          }
                        ],
                        "id": 3834,
                        "name": "MemberAccess",
                        "src": "4557:22:11"
                      }
                    ],
                    "id": 3835,
                    "name": "Return",
                    "src": "4550:29:11"
                  }
                ],
                "id": 3836,
                "name": "Block",
                "src": "4540:46:11"
              }
            ],
            "id": 3837,
            "name": "FunctionDefinition",
            "src": "4461:125:11"
          },
          {
            "attributes": {
              "baseFunctions": [
                3516
              ],
              "functionSelector": "16a25cbd",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "ttl",
              "scope": 3956,
              "stateMutability": "view",
              "virtual": true,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Returns the TTL of a node, and any records associated with it.\n @param node The specified node.\n @return ttl of the node."
                },
                "id": 3838,
                "name": "StructuredDocumentation",
                "src": "4592:157:11"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3842,
                "name": "OverrideSpecifier",
                "src": "4796:8:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "node",
                      "scope": 3852,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3839,
                        "name": "ElementaryTypeName",
                        "src": "4767:7:11"
                      }
                    ],
                    "id": 3840,
                    "name": "VariableDeclaration",
                    "src": "4767:12:11"
                  }
                ],
                "id": 3841,
                "name": "ParameterList",
                "src": "4766:14:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 3852,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 3843,
                        "name": "ElementaryTypeName",
                        "src": "4819:6:11"
                      }
                    ],
                    "id": 3844,
                    "name": "VariableDeclaration",
                    "src": "4819:6:11"
                  }
                ],
                "id": 3845,
                "name": "ParameterList",
                "src": "4818:8:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3845
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "ttl",
                          "referencedDeclaration": 3545,
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "struct ENSRegistry.Record storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3550,
                                  "type": "mapping(bytes32 => struct ENSRegistry.Record storage ref)",
                                  "value": "records"
                                },
                                "id": 3846,
                                "name": "Identifier",
                                "src": "4844:7:11"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3840,
                                  "type": "bytes32",
                                  "value": "node"
                                },
                                "id": 3847,
                                "name": "Identifier",
                                "src": "4852:4:11"
                              }
                            ],
                            "id": 3848,
                            "name": "IndexAccess",
                            "src": "4844:13:11"
                          }
                        ],
                        "id": 3849,
                        "name": "MemberAccess",
                        "src": "4844:17:11"
                      }
                    ],
                    "id": 3850,
                    "name": "Return",
                    "src": "4837:24:11"
                  }
                ],
                "id": 3851,
                "name": "Block",
                "src": "4827:41:11"
              }
            ],
            "id": 3852,
            "name": "FunctionDefinition",
            "src": "4754:114:11"
          },
          {
            "attributes": {
              "baseFunctions": [
                3523
              ],
              "functionSelector": "f79fe538",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "recordExists",
              "scope": 3956,
              "stateMutability": "view",
              "virtual": true,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Returns whether a record has been imported to the registry.\n @param node The specified node.\n @return Bool if record exists"
                },
                "id": 3853,
                "name": "StructuredDocumentation",
                "src": "4874:159:11"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3857,
                "name": "OverrideSpecifier",
                "src": "5089:8:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "node",
                      "scope": 3872,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3854,
                        "name": "ElementaryTypeName",
                        "src": "5060:7:11"
                      }
                    ],
                    "id": 3855,
                    "name": "VariableDeclaration",
                    "src": "5060:12:11"
                  }
                ],
                "id": 3856,
                "name": "ParameterList",
                "src": "5059:14:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 3872,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3858,
                        "name": "ElementaryTypeName",
                        "src": "5112:4:11"
                      }
                    ],
                    "id": 3859,
                    "name": "VariableDeclaration",
                    "src": "5112:4:11"
                  }
                ],
                "id": 3860,
                "name": "ParameterList",
                "src": "5111:6:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3860
                    },
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "owner",
                              "referencedDeclaration": 3541,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct ENSRegistry.Record storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3550,
                                      "type": "mapping(bytes32 => struct ENSRegistry.Record storage ref)",
                                      "value": "records"
                                    },
                                    "id": 3861,
                                    "name": "Identifier",
                                    "src": "5135:7:11"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3855,
                                      "type": "bytes32",
                                      "value": "node"
                                    },
                                    "id": 3862,
                                    "name": "Identifier",
                                    "src": "5143:4:11"
                                  }
                                ],
                                "id": 3863,
                                "name": "IndexAccess",
                                "src": "5135:13:11"
                              }
                            ],
                            "id": 3864,
                            "name": "MemberAccess",
                            "src": "5135:19:11"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 3865,
                                    "name": "ElementaryTypeName",
                                    "src": "5158:7:11"
                                  }
                                ],
                                "id": 3866,
                                "name": "ElementaryTypeNameExpression",
                                "src": "5158:7:11"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "307830",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0x0"
                                },
                                "id": 3867,
                                "name": "Literal",
                                "src": "5166:3:11"
                              }
                            ],
                            "id": 3868,
                            "name": "FunctionCall",
                            "src": "5158:12:11"
                          }
                        ],
                        "id": 3869,
                        "name": "BinaryOperation",
                        "src": "5135:35:11"
                      }
                    ],
                    "id": 3870,
                    "name": "Return",
                    "src": "5128:42:11"
                  }
                ],
                "id": 3871,
                "name": "Block",
                "src": "5118:59:11"
              }
            ],
            "id": 3872,
            "name": "FunctionDefinition",
            "src": "5038:139:11"
          },
          {
            "attributes": {
              "baseFunctions": [
                3532
              ],
              "functionSelector": "e985e9c5",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "isApprovedForAll",
              "scope": 3956,
              "stateMutability": "view",
              "virtual": true,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Query if an address is an authorized operator for another address.\n @param owner The address that owns the records.\n @param operator The address that acts on behalf of the owner.\n @return True if `operator` is an approved operator for `owner`, false otherwise."
                },
                "id": 3873,
                "name": "StructuredDocumentation",
                "src": "5183:302:11"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3879,
                "name": "OverrideSpecifier",
                "src": "5566:8:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "owner",
                      "scope": 3890,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3874,
                        "name": "ElementaryTypeName",
                        "src": "5516:7:11"
                      }
                    ],
                    "id": 3875,
                    "name": "VariableDeclaration",
                    "src": "5516:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "operator",
                      "scope": 3890,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3876,
                        "name": "ElementaryTypeName",
                        "src": "5531:7:11"
                      }
                    ],
                    "id": 3877,
                    "name": "VariableDeclaration",
                    "src": "5531:16:11"
                  }
                ],
                "id": 3878,
                "name": "ParameterList",
                "src": "5515:33:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 3890,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3880,
                        "name": "ElementaryTypeName",
                        "src": "5589:4:11"
                      }
                    ],
                    "id": 3881,
                    "name": "VariableDeclaration",
                    "src": "5589:4:11"
                  }
                ],
                "id": 3882,
                "name": "ParameterList",
                "src": "5588:6:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3882
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "mapping(address => bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3556,
                                  "type": "mapping(address => mapping(address => bool))",
                                  "value": "operators"
                                },
                                "id": 3883,
                                "name": "Identifier",
                                "src": "5612:9:11"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3875,
                                  "type": "address",
                                  "value": "owner"
                                },
                                "id": 3884,
                                "name": "Identifier",
                                "src": "5622:5:11"
                              }
                            ],
                            "id": 3885,
                            "name": "IndexAccess",
                            "src": "5612:16:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3877,
                              "type": "address",
                              "value": "operator"
                            },
                            "id": 3886,
                            "name": "Identifier",
                            "src": "5629:8:11"
                          }
                        ],
                        "id": 3887,
                        "name": "IndexAccess",
                        "src": "5612:26:11"
                      }
                    ],
                    "id": 3888,
                    "name": "Return",
                    "src": "5605:33:11"
                  }
                ],
                "id": 3889,
                "name": "Block",
                "src": "5595:50:11"
              }
            ],
            "id": 3890,
            "name": "FunctionDefinition",
            "src": "5490:155:11"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_setOwner",
              "scope": 3956,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "node",
                      "scope": 3905,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3891,
                        "name": "ElementaryTypeName",
                        "src": "5670:7:11"
                      }
                    ],
                    "id": 3892,
                    "name": "VariableDeclaration",
                    "src": "5670:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "owner",
                      "scope": 3905,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3893,
                        "name": "ElementaryTypeName",
                        "src": "5684:7:11"
                      }
                    ],
                    "id": 3894,
                    "name": "VariableDeclaration",
                    "src": "5684:13:11"
                  }
                ],
                "id": 3895,
                "name": "ParameterList",
                "src": "5669:29:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3896,
                "name": "ParameterList",
                "src": "5716:0:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "owner",
                              "referencedDeclaration": 3541,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct ENSRegistry.Record storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3550,
                                      "type": "mapping(bytes32 => struct ENSRegistry.Record storage ref)",
                                      "value": "records"
                                    },
                                    "id": 3897,
                                    "name": "Identifier",
                                    "src": "5726:7:11"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3892,
                                      "type": "bytes32",
                                      "value": "node"
                                    },
                                    "id": 3898,
                                    "name": "Identifier",
                                    "src": "5734:4:11"
                                  }
                                ],
                                "id": 3899,
                                "name": "IndexAccess",
                                "src": "5726:13:11"
                              }
                            ],
                            "id": 3900,
                            "name": "MemberAccess",
                            "src": "5726:19:11"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3894,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 3901,
                            "name": "Identifier",
                            "src": "5748:5:11"
                          }
                        ],
                        "id": 3902,
                        "name": "Assignment",
                        "src": "5726:27:11"
                      }
                    ],
                    "id": 3903,
                    "name": "ExpressionStatement",
                    "src": "5726:27:11"
                  }
                ],
                "id": 3904,
                "name": "Block",
                "src": "5716:44:11"
              }
            ],
            "id": 3905,
            "name": "FunctionDefinition",
            "src": "5651:109:11"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_setResolverAndTTL",
              "scope": 3956,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "node",
                      "scope": 3955,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3906,
                        "name": "ElementaryTypeName",
                        "src": "5794:7:11"
                      }
                    ],
                    "id": 3907,
                    "name": "VariableDeclaration",
                    "src": "5794:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "resolver",
                      "scope": 3955,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3908,
                        "name": "ElementaryTypeName",
                        "src": "5808:7:11"
                      }
                    ],
                    "id": 3909,
                    "name": "VariableDeclaration",
                    "src": "5808:16:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "ttl",
                      "scope": 3955,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 3910,
                        "name": "ElementaryTypeName",
                        "src": "5826:6:11"
                      }
                    ],
                    "id": 3911,
                    "name": "VariableDeclaration",
                    "src": "5826:10:11"
                  }
                ],
                "id": 3912,
                "name": "ParameterList",
                "src": "5793:44:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3913,
                "name": "ParameterList",
                "src": "5847:0:11"
              },
              {
                "children": [
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3909,
                              "type": "address",
                              "value": "resolver"
                            },
                            "id": 3914,
                            "name": "Identifier",
                            "src": "5860:8:11"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "resolver",
                              "referencedDeclaration": 3543,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct ENSRegistry.Record storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3550,
                                      "type": "mapping(bytes32 => struct ENSRegistry.Record storage ref)",
                                      "value": "records"
                                    },
                                    "id": 3915,
                                    "name": "Identifier",
                                    "src": "5872:7:11"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3907,
                                      "type": "bytes32",
                                      "value": "node"
                                    },
                                    "id": 3916,
                                    "name": "Identifier",
                                    "src": "5880:4:11"
                                  }
                                ],
                                "id": 3917,
                                "name": "IndexAccess",
                                "src": "5872:13:11"
                              }
                            ],
                            "id": 3918,
                            "name": "MemberAccess",
                            "src": "5872:22:11"
                          }
                        ],
                        "id": 3919,
                        "name": "BinaryOperation",
                        "src": "5860:34:11"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "member_name": "resolver",
                                      "referencedDeclaration": 3543,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "struct ENSRegistry.Record storage ref"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3550,
                                              "type": "mapping(bytes32 => struct ENSRegistry.Record storage ref)",
                                              "value": "records"
                                            },
                                            "id": 3920,
                                            "name": "Identifier",
                                            "src": "5910:7:11"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3907,
                                              "type": "bytes32",
                                              "value": "node"
                                            },
                                            "id": 3921,
                                            "name": "Identifier",
                                            "src": "5918:4:11"
                                          }
                                        ],
                                        "id": 3922,
                                        "name": "IndexAccess",
                                        "src": "5910:13:11"
                                      }
                                    ],
                                    "id": 3923,
                                    "name": "MemberAccess",
                                    "src": "5910:22:11"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3909,
                                      "type": "address",
                                      "value": "resolver"
                                    },
                                    "id": 3924,
                                    "name": "Identifier",
                                    "src": "5935:8:11"
                                  }
                                ],
                                "id": 3925,
                                "name": "Assignment",
                                "src": "5910:33:11"
                              }
                            ],
                            "id": 3926,
                            "name": "ExpressionStatement",
                            "src": "5910:33:11"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3418,
                                      "type": "function (bytes32,address)",
                                      "value": "NewResolver"
                                    },
                                    "id": 3927,
                                    "name": "Identifier",
                                    "src": "5962:11:11"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3907,
                                      "type": "bytes32",
                                      "value": "node"
                                    },
                                    "id": 3928,
                                    "name": "Identifier",
                                    "src": "5974:4:11"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3909,
                                      "type": "address",
                                      "value": "resolver"
                                    },
                                    "id": 3929,
                                    "name": "Identifier",
                                    "src": "5980:8:11"
                                  }
                                ],
                                "id": 3930,
                                "name": "FunctionCall",
                                "src": "5962:27:11"
                              }
                            ],
                            "id": 3931,
                            "name": "EmitStatement",
                            "src": "5957:32:11"
                          }
                        ],
                        "id": 3932,
                        "name": "Block",
                        "src": "5896:104:11"
                      }
                    ],
                    "id": 3933,
                    "name": "IfStatement",
                    "src": "5857:143:11"
                  },
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3911,
                              "type": "uint64",
                              "value": "ttl"
                            },
                            "id": 3934,
                            "name": "Identifier",
                            "src": "6013:3:11"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "ttl",
                              "referencedDeclaration": 3545,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct ENSRegistry.Record storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3550,
                                      "type": "mapping(bytes32 => struct ENSRegistry.Record storage ref)",
                                      "value": "records"
                                    },
                                    "id": 3935,
                                    "name": "Identifier",
                                    "src": "6020:7:11"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3907,
                                      "type": "bytes32",
                                      "value": "node"
                                    },
                                    "id": 3936,
                                    "name": "Identifier",
                                    "src": "6028:4:11"
                                  }
                                ],
                                "id": 3937,
                                "name": "IndexAccess",
                                "src": "6020:13:11"
                              }
                            ],
                            "id": 3938,
                            "name": "MemberAccess",
                            "src": "6020:17:11"
                          }
                        ],
                        "id": 3939,
                        "name": "BinaryOperation",
                        "src": "6013:24:11"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint64"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "member_name": "ttl",
                                      "referencedDeclaration": 3545,
                                      "type": "uint64"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "struct ENSRegistry.Record storage ref"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3550,
                                              "type": "mapping(bytes32 => struct ENSRegistry.Record storage ref)",
                                              "value": "records"
                                            },
                                            "id": 3940,
                                            "name": "Identifier",
                                            "src": "6053:7:11"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3907,
                                              "type": "bytes32",
                                              "value": "node"
                                            },
                                            "id": 3941,
                                            "name": "Identifier",
                                            "src": "6061:4:11"
                                          }
                                        ],
                                        "id": 3942,
                                        "name": "IndexAccess",
                                        "src": "6053:13:11"
                                      }
                                    ],
                                    "id": 3943,
                                    "name": "MemberAccess",
                                    "src": "6053:17:11"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3911,
                                      "type": "uint64",
                                      "value": "ttl"
                                    },
                                    "id": 3944,
                                    "name": "Identifier",
                                    "src": "6073:3:11"
                                  }
                                ],
                                "id": 3945,
                                "name": "Assignment",
                                "src": "6053:23:11"
                              }
                            ],
                            "id": 3946,
                            "name": "ExpressionStatement",
                            "src": "6053:23:11"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3424,
                                      "type": "function (bytes32,uint64)",
                                      "value": "NewTTL"
                                    },
                                    "id": 3947,
                                    "name": "Identifier",
                                    "src": "6095:6:11"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3907,
                                      "type": "bytes32",
                                      "value": "node"
                                    },
                                    "id": 3948,
                                    "name": "Identifier",
                                    "src": "6102:4:11"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3911,
                                      "type": "uint64",
                                      "value": "ttl"
                                    },
                                    "id": 3949,
                                    "name": "Identifier",
                                    "src": "6108:3:11"
                                  }
                                ],
                                "id": 3950,
                                "name": "FunctionCall",
                                "src": "6095:17:11"
                              }
                            ],
                            "id": 3951,
                            "name": "EmitStatement",
                            "src": "6090:22:11"
                          }
                        ],
                        "id": 3952,
                        "name": "Block",
                        "src": "6039:84:11"
                      }
                    ],
                    "id": 3953,
                    "name": "IfStatement",
                    "src": "6010:113:11"
                  }
                ],
                "id": 3954,
                "name": "Block",
                "src": "5847:282:11"
              }
            ],
            "id": 3955,
            "name": "FunctionDefinition",
            "src": "5766:363:11"
          }
        ],
        "id": 3956,
        "name": "ContractDefinition",
        "src": "84:6047:11"
      }
    ],
    "id": 3957,
    "name": "SourceUnit",
    "src": "0:6132:11"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.4+commit.3f05b770.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.3",
  "updatedAt": "2021-01-21T03:26:26.186Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "constructor": {
        "details": "Constructs a new ENS registrar."
      },
      "isApprovedForAll(address,address)": {
        "details": "Query if an address is an authorized operator for another address.",
        "params": {
          "operator": "The address that acts on behalf of the owner.",
          "owner": "The address that owns the records."
        },
        "returns": {
          "_0": "True if `operator` is an approved operator for `owner`, false otherwise."
        }
      },
      "owner(bytes32)": {
        "details": "Returns the address that owns the specified node.",
        "params": {
          "node": "The specified node."
        },
        "returns": {
          "_0": "address of the owner."
        }
      },
      "recordExists(bytes32)": {
        "details": "Returns whether a record has been imported to the registry.",
        "params": {
          "node": "The specified node."
        },
        "returns": {
          "_0": "Bool if record exists"
        }
      },
      "resolver(bytes32)": {
        "details": "Returns the address of the resolver for the specified node.",
        "params": {
          "node": "The specified node."
        },
        "returns": {
          "_0": "address of the resolver."
        }
      },
      "setApprovalForAll(address,bool)": {
        "details": "Enable or disable approval for a third party (\"operator\") to manage  all of `msg.sender`'s ENS records. Emits the ApprovalForAll event.",
        "params": {
          "approved": "True if the operator is approved, false to revoke approval.",
          "operator": "Address to add to the set of authorized operators."
        }
      },
      "setOwner(bytes32,address)": {
        "details": "Transfers ownership of a node to a new address. May only be called by the current owner of the node.",
        "params": {
          "node": "The node to transfer ownership of.",
          "owner": "The address of the new owner."
        }
      },
      "setRecord(bytes32,address,address,uint64)": {
        "details": "Sets the record for a node.",
        "params": {
          "node": "The node to update.",
          "owner": "The address of the new owner.",
          "resolver": "The address of the resolver.",
          "ttl": "The TTL in seconds."
        }
      },
      "setResolver(bytes32,address)": {
        "details": "Sets the resolver address for the specified node.",
        "params": {
          "node": "The node to update.",
          "resolver": "The address of the resolver."
        }
      },
      "setSubnodeOwner(bytes32,bytes32,address)": {
        "details": "Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node.",
        "params": {
          "label": "The hash of the label specifying the subnode.",
          "node": "The parent node.",
          "owner": "The address of the new owner."
        }
      },
      "setSubnodeRecord(bytes32,bytes32,address,address,uint64)": {
        "details": "Sets the record for a subnode.",
        "params": {
          "label": "The hash of the label specifying the subnode.",
          "node": "The parent node.",
          "owner": "The address of the new owner.",
          "resolver": "The address of the resolver.",
          "ttl": "The TTL in seconds."
        }
      },
      "setTTL(bytes32,uint64)": {
        "details": "Sets the TTL for the specified node.",
        "params": {
          "node": "The node to update.",
          "ttl": "The TTL in seconds."
        }
      },
      "ttl(bytes32)": {
        "details": "Returns the TTL of a node, and any records associated with it.",
        "params": {
          "node": "The specified node."
        },
        "returns": {
          "_0": "ttl of the node."
        }
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "notice": "The ENS registry contract.",
    "version": 1
  }
}