':param node_key:
:return:'

def _graph_get_node(self, node_key, terminator_for_nonexistent_node=False):

    if (node_key not in self._nodes):
        if (not terminator_for_nonexistent_node):
            return None
        addr = self._block_id_addr(node_key)
        func_addr = self._block_id_current_func_addr(node_key)
        if (func_addr is None):
            func_addr = self._block_id_addr(node_key)
        if (node_key.jump_type == 'syscall'):
            is_syscall = True
        else:
            is_syscall = False
        pt = CFGNode(self._block_id_addr(node_key), None, self, callstack=None, input_state=None, simprocedure_name='PathTerminator', function_address=func_addr, callstack_key=self._block_id_callstack_key(node_key), is_syscall=is_syscall)
        if self._keep_state:
            pt.input_state = self.project.factory.entry_state()
            pt.input_state.ip = pt.addr
        self._nodes[node_key] = pt
        self._nodes_by_addr[pt.addr].append(pt)
        if (isinstance(self.project.arch, ArchARM) and ((addr % 2) == 1)):
            self._thumb_addrs.add(addr)
            self._thumb_addrs.add((addr - 1))
        l.debug('Block    ID    %s    does    not    exist.    Create    a    PathTerminator    instead.', self._block_id_repr(node_key))
    return self._nodes[node_key]
