From 3666deaed5b0baf0a74f14db5872105c9e7865f9 Mon Sep 17 00:00:00 2001
From: JSDurand <mmemmew@gmail.com>
Date: Wed, 13 Jan 2021 13:01:34 +0800
Subject: A temporary intermeidate step

Now I got almost every functionality that we need, including pdf,
mu4e, magit, et cetera.
---
 suffix tree/LCS.el                      |   314 +
 suffix tree/ST.cpp                      |   131 +
 suffix tree/generalized-suffix-tree.el  |   398 +
 suffix tree/gst test ground.txt         | 12291 ++++++++++++++++++++++++++++++
 suffix tree/lcs test ground.txt         |   180 +
 suffix tree/suffiex-tree.txt            |   168 +
 suffix tree/suffix tree test ground.txt |   145 +
 suffix tree/suffix-tree files.zip       |   Bin 0 -> 14879 bytes
 suffix tree/suffix-tree.el              |   397 +
 9 files changed, 14024 insertions(+)
 create mode 100644 suffix tree/LCS.el
 create mode 100644 suffix tree/ST.cpp
 create mode 100644 suffix tree/generalized-suffix-tree.el
 create mode 100644 suffix tree/gst test ground.txt
 create mode 100644 suffix tree/lcs test ground.txt
 create mode 100644 suffix tree/suffiex-tree.txt
 create mode 100644 suffix tree/suffix tree test ground.txt
 create mode 100644 suffix tree/suffix-tree files.zip
 create mode 100644 suffix tree/suffix-tree.el

(limited to 'suffix tree')

diff --git a/suffix tree/LCS.el b/suffix tree/LCS.el
new file mode 100644
index 0000000..989c25e
--- /dev/null
+++ b/suffix tree/LCS.el	
@@ -0,0 +1,314 @@
+;;; LCS.el --- Longest Common Substrings of multiple strings -*- lexical-binding: t; -*-
+
+;;; Author: Durand
+;;; Version: 0.0.1
+
+;;; Commentary:
+
+;; First generate a generalized suffix tree of the strings, then
+;; traverses the tree in a depth-first manner to find the nodes under
+;; which there are suffixes from each and every string in question.
+;; Finally collect and return the list of all substrings which are
+;; common to all input strings and which have the longest length.
+
+;;; Code:
+
+;;; Our building block
+(require 'generalized-suffix-tree)
+
+;;;###autoload
+(defun lcs-string (strs)
+  "Return the longest common substring of STRS."
+  (lcs-interpret (lcs strs) strs))
+
+;;;###autoload
+(defun lcs-edge-length (node str-lens)
+  "Return the length of the edge going into NODE.
+Unlike `gst-edge-length', this does not need to know about POSITION
+and NUM, since it is assumed that the tree is already built
+before calling this function."
+  (let ((start (car (cdr node)))
+        (end (cond
+              ((eq (car (cdr (cdr node))) 'infty)
+               (nth (car node) str-lens))
+              (t (car (cdr (cdr node)))))))
+    (- end start)))
+
+;;;###autoload
+(defun lcs-get-parent-length (parents)
+  "Return the length of the parent strings PARENTS."
+  (let* ((ls parents)
+         (result 0))
+    (while (consp ls)
+      (setq result (+ result (- (caddr (car ls))
+                                (cadr (car ls)))))
+      (setq ls (cdr ls)))
+    result))
+
+;;;###autoload
+(defun lcs-get-env (node str-lens)
+  "Return the information we want to keep on the stack."
+  (let ((num (car node))
+        (start (car (cdr node)))
+        (end (cond
+              ((eq (car (cdr (cdr node))) 'infty)
+               (nth (car node) str-lens))
+              (t (car (cdr (cdr node))))))
+        (children (car (nthcdr 4 node))))
+    (list num start end children)))
+
+;;; For debug purposes
+
+;;;###autoload
+(defmacro lcs-debug (&rest vars)
+  "Print the names and the values of VARS."
+  `(insert
+    (mapconcat 'identity
+     (list
+      ,@(mapcar
+         (lambda (var)
+           `(format "%s: %S"
+             ,(symbol-name var)
+             ,var))
+         vars))
+     "\n")
+    "\n"))
+
+;;;###autoload
+(defun lcs-pretty-stack-element (element)
+  "Return a pretty representation of ELEMENT."
+  (concat
+   "("
+   (mapconcat
+    (lambda (slot)
+      (format "%S"
+              (cond
+               ((hash-table-p slot)
+                (gst-pretty-hash-table slot))
+               ((consp slot)
+                (mapconcat #'lcs-pretty-stack-element slot ", "))
+               (t slot))))
+    element ", ")
+   ")"))
+
+;;;###autoload
+(defun lcs-pretty-stack (stack)
+  "Prettify a stack."
+  (concat
+   "[ "
+   (mapconcat #'lcs-pretty-stack-element
+              stack
+              ",")
+   " ]"
+   "\n"))
+
+;;;###autoload
+(defun lcs-prepare-env (long-env)
+  "Take the first three elements out of LONG-ENV."
+  (cons (car long-env)
+        (cons (cadr long-env)
+              (cons (caddr long-env)
+                    nil))))
+
+;;; Interpreting the result
+
+;;;###autoload
+(defun lcs-interpret (result strs &optional just-length)
+  "Since the raw RESULT of `lcs' is not human-readable, we interpret it.
+If JUST-LENGTH is non-nil, then this only returns the length of
+the longest common substrings. Otherwise, it returns the longest
+common substrings themselves.
+
+Of course, without STRS, we don't even know what our strings are."
+  (cond
+   (just-length (car result))
+   (t (mapcar
+       (lambda (one-result)
+         (let ((chain one-result)
+               temp res-str)
+           (while (consp one-result)
+             (setq temp (car one-result))
+             (setq res-str
+                   (concat
+                    (let ((nstr (nth (car temp) strs)))
+                      (substring nstr
+                                 (cadr temp)
+                                 (min (caddr temp) (length nstr))))
+                    res-str))
+             (setq one-result (cdr one-result)))
+           res-str))
+       (cadr result)))))
+
+;;; The main engine
+
+;;;###autoload
+(defun lcs (strs &optional just-length)
+  "Return the longest common substring of a list STRS of strings.
+
+If JUST-LENGTH is non-nil, then this only returns the length of the
+longest common substring. Otherwise, it returns the length as well as the 
+longest common substring itself."
+  (let* ((strs (mapcar (lambda (str)
+                         (vconcat str (list -1)))
+                       strs))
+         (str-lens (mapcar #'length strs))
+         (tree (gst-build-for-strs strs str-lens))
+         (max-height 0)
+         (bits-table (make-hash-table))
+         (discovered-table (make-hash-table))
+         (all-common (1- (expt 2 (length strs))))
+         max-env stack current temp)
+    ;; The format of elements on the stack is as follows.
+    ;; (number start end children node-number parents)
+    
+    ;; Here number identifies the string this comes from. start, end
+    ;; and children have the same meaning as in the tree. Node-number
+    ;; is the number of the node that is recorded in the hash-table
+    ;; tree. And finally parents is a list of triples that represents
+    ;; parent segments.
+    (setq stack (progn
+                  (maphash
+                   (lambda (letter node)
+                     (setq temp
+                           (cons
+                            (append
+                             (lcs-get-env (gethash node tree) str-lens)
+                             (list node nil ; parent strings represented as a triple of integers
+                                   ))
+                            temp)))
+                   (car (nthcdr 4 (gethash 1 tree))))
+                  temp))
+    (setq temp nil)
+    ;; (insert (format "count: %d\n" count))
+    ;; (lcs-debug all-common)
+    ;; (insert "stack: " (lcs-pretty-stack stack))
+    (while (consp stack)
+      ;; (insert "stack: " (lcs-pretty-stack stack))
+      (setq current (car stack))
+      (let ((current-length (+ (lcs-get-parent-length (car (nthcdr 5 current)))
+                               (- (min (caddr current)
+                                       ;; The final character does
+                                       ;; not count!
+                                       (1- (nth (car current)
+                                                str-lens)))
+                                  (cadr current))))
+            (current-env (list (car current)
+                               (cadr current)
+                               (caddr current)
+                               (car (nthcdr 3 current))))
+            (current-children (car (nthcdr 3 current))))
+        ;; (insert (format "\n\ncount: %d\n" count))
+        ;; (insert "current: " (lcs-pretty-stack-element current) "\n")
+        ;; (lcs-debug current-length max-env max-height)
+        ;; (insert (format "current children: %S\n" (gst-pretty-hash-table current-children)))
+        ;; (insert (format
+        ;;          "discovered: %S\n"
+        ;;          (gst-pretty-hash-table discovered-table)))
+        ;; (insert (format
+        ;;          "bits: %S\n"
+        ;;          (gst-pretty-hash-table bits-table)))
+        (cond
+         ((not (hash-table-empty-p current-children))      ; There are children
+          (cond
+           ((gethash (car (nthcdr 4 current)) discovered-table)
+            ;; This node is already traversed
+            ;; This means we have already given bits to its children
+            (let ((bit (progn
+                         (setq temp 0)
+                         (maphash (lambda (child-letter child-num)
+                                    (setq
+                                     temp
+                                     (logior temp
+                                             (gethash child-num bits-table))))
+                                  current-children)
+                         temp)
+                       ;; An alternative
+                       ;; (apply #'logior                                      
+                       ;;        (mapcar (lambda (num)                         
+                       ;;                  (gethash num bits-table))           
+                       ;;                (hash-table-values current-children)))
+                       ))
+              (setq temp nil)
+              (puthash (car (nthcdr 4 current)) bit bits-table)
+              ;; (lcs-debug bit)
+              ;; (insert (format
+              ;;          "bits: %S\n"
+              ;;          (gst-pretty-hash-table bits-table)))
+              (cond
+               ((= bit all-common)      ; a common substring
+                (cond
+                 ((> current-length max-height)
+                  (setq max-height current-length)
+                  (setq max-env (list
+                                 (cons
+                                  (list (car current)
+                                        (cadr current)
+                                        (caddr current))
+                                  (mapcar #'lcs-prepare-env
+                                          (car (nthcdr 5 current)))))))
+                 ((= current-length max-height)
+                  (setq max-env
+                        (cons (cons
+                               (list (car current)
+                                     (cadr current)
+                                     (caddr current))
+                               (mapcar #'lcs-prepare-env
+                                       (car (nthcdr 5 current))))
+                              max-env)))))))
+            (setq stack (cdr stack)))
+           (t                           ; a new node!
+            (setq stack
+                  (append
+                   (progn
+                     (maphash
+                      (lambda (letter node)
+                        (setq temp
+                              (cons
+                               (append
+                                (lcs-get-env (gethash node tree) str-lens)
+                                (list node
+                                      (cons current-env (car (nthcdr 5 current)))))
+                               temp)))
+                      current-children)
+                     temp)
+                   stack))
+            (puthash (car (nthcdr 4 current)) 1 discovered-table)
+            ;; (insert (format "current children: %S\n" (gst-pretty-hash-table current-children)))
+            ;; (insert "stack: " (lcs-pretty-stack stack))
+            (setq temp nil))))
+         (t                             ; a leaf
+          (let* ((node-number (car (nthcdr 4 current)))
+                 (leaf-labels (car (nthcdr 5 (gethash node-number tree))))
+                 (bit (apply #'logior
+                             (mapcar (lambda (label)
+                                       (ash 1 (car label)))
+                                     leaf-labels))))
+            ;; (insert "leaf")
+            ;; (lcs-debug node-number leaf-labels bit)
+            (puthash node-number bit bits-table)
+            (cond
+             ((= bit all-common)      ; a common substring
+              (cond
+               ((> current-length max-height)
+                (setq max-height current-length)
+                (setq max-env (list
+                               (cons
+                                (list (car current)
+                                      (cadr current)
+                                      (caddr current))
+                                (mapcar #'lcs-prepare-env
+                                        (car (nthcdr 5 current)))))))
+               ((= current-length max-height)
+                (setq max-env
+                      (cons (cons
+                             (list (car current)
+                                   (cadr current)
+                                   (caddr current))
+                             (mapcar #'lcs-prepare-env
+                                     (car (nthcdr 5 current))))
+                            max-env))))))
+            (setq stack (cdr stack)))))))
+    (list max-height max-env)))
+
+(provide 'lcs)
+;;; LCS.el ends here
diff --git a/suffix tree/ST.cpp b/suffix tree/ST.cpp
new file mode 100644
index 0000000..cad0ccb
--- /dev/null
+++ b/suffix tree/ST.cpp	
@@ -0,0 +1,131 @@
+/**
+ * Copyright (c) 2016 Sergey Makagonov
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#include <iostream>
+#include <stdio.h>
+#include <string>
+
+const int oo = 1<<25;
+const int ALPHABET_SIZE = 256;
+const int MAXN = 5000;
+
+using namespace std;
+
+int root, last_added, pos, needSL, remainder,
+	active_node, active_e, active_len;
+
+struct node {
+/*
+   There is no need to create an "Edge" struct.
+   Information about the edge is stored right in the node.
+   [start; end) interval specifies the edge,
+   by which the node is connected to its parent node.
+*/
+
+	int start, end, slink;
+	int next[ALPHABET_SIZE];	
+
+	int edge_length() {
+		return min(end, pos + 1) - start;
+	}
+};
+
+node tree[2*MAXN];
+char text[MAXN];
+
+int new_node(int start, int end = oo) {
+	node nd;
+	nd.start = start;
+	nd.end = end;
+	nd.slink = 0;
+	for (int i = 0; i < ALPHABET_SIZE; i++)
+		nd.next[i] = 0;
+	tree[++last_added] = nd;
+	return last_added;
+}
+
+char active_edge() {
+	return text[active_e];
+}
+
+void add_SL(int node) {
+	if (needSL > 0) tree[needSL].slink = node;
+	needSL = node;
+}
+
+bool walk_down(int node) {
+	if (active_len >= tree[node].edge_length()) {
+		active_e += tree[node].edge_length();
+		active_len -= tree[node].edge_length();
+		active_node = node;
+		return true;
+	}
+	return false;
+}
+
+void st_init() {
+	needSL = 0, last_added = 0, pos = -1, 
+	remainder = 0, active_node = 0, active_e = 0, active_len = 0;
+	root = active_node = new_node(-1, -1);
+}
+
+void st_extend(char c) {
+	text[++pos] = c;
+	needSL = 0;
+	remainder++;
+	while(remainder > 0) {
+		if (active_len == 0) active_e = pos;
+		if (tree[active_node].next[active_edge()] == 0) {
+			int leaf = new_node(pos);
+			tree[active_node].next[active_edge()] = leaf;
+			add_SL(active_node); //rule 2
+		} else {
+			int nxt = tree[active_node].next[active_edge()];
+			if (walk_down(nxt)) continue; //observation 2
+			if (text[tree[nxt].start + active_len] == c) { //observation 1
+				active_len++;
+				add_SL(active_node); //observation 3
+				break;
+			}
+			int split = new_node(tree[nxt].start, tree[nxt].start + active_len);
+			tree[active_node].next[active_edge()] = split;
+			int leaf = new_node(pos);
+			tree[split].next[c] = leaf;
+			tree[nxt].start += active_len;
+			tree[split].next[text[tree[nxt].start]] = nxt;
+			add_SL(split); //rule 2
+		}
+		remainder--;
+		if (active_node == root && active_len > 0) { //rule 1
+			active_len--;
+			active_e = pos - remainder + 1;
+		} else
+			active_node = tree[active_node].slink > 0 ? tree[active_node].slink : root; //rule 3
+	}
+}
+
+int main() {
+	//
+	return 0;
+}
diff --git a/suffix tree/generalized-suffix-tree.el b/suffix tree/generalized-suffix-tree.el
new file mode 100644
index 0000000..227aea9
--- /dev/null
+++ b/suffix tree/generalized-suffix-tree.el	
@@ -0,0 +1,398 @@
+;;; generalized-suffiex-tree.el --- Building a generalized suffix tree -*- lexical-binding: t; -*-
+
+;;; Author: Durand
+;;; Version: 0.0.2
+
+;;; Commentary:
+
+;; Our node is represented as a list of the following elements:
+
+;; number     , from which string this edge comes
+;; start      , which is the starting index of the edge going from its parent
+;;              node to this node
+;; end        , the index of the end of the above edge
+;; suffix-link, the index of the node this node's suffix-link points to
+;; children   , a hash-table of pairs of integers and indices of its
+;;              children
+;; leaf-labels, a list of pairs (number start), where
+;;              number means the number-th string and
+;;              start is the starting position of this edge.
+;;              This element is nil for the internal nodes.
+
+;; To compute the length of the edge going into NODE we use:
+;; (- (min end (1+ position)) start)
+;; which is actually how far the position is on that edge,
+;; if it is on that edge.
+
+;; We use only one terminating symbol, and that is -1.
+
+;;; Code:
+
+;;;###autoload
+(defun gst-min (&rest args)
+  "Return the minimum among ARGS.
+If an argument is 'infty, then it is considered greater than
+every number."
+  (apply #'min (delq nil
+                     (mapcar
+                      (lambda (arg)
+                        (cond
+                         ((number-or-marker-p arg) arg)
+                         ((eq arg 'infty) nil)))
+                      args))))
+
+;;;###autoload
+(defun gst-edge-length (node position num str-lens)
+  "Return the length of the edge into NODE.
+See the comment above this function for the reason
+POSITION and NUM are here."
+  (let* ((node-active-num (car node))
+         (leafp (eq (car (cdr (cdr node))) 'infty))
+         (leaf-labels (cond (leafp (car (nthcdr 5 node))))))
+    (- (cond
+        ((and (/= node-active-num num)
+              leafp)
+         (nth node-active-num str-lens))
+        ((/= node-active-num num)
+         (caddr node))
+        (t (gst-min (caddr node) (1+ position))))
+       (cond
+        ((and (= node-active-num num)
+              leafp)
+         (or (cadr (assoc num leaf-labels #'eq))
+             (cadr node)))
+        (t (cadr node))))))
+
+;;;###autoload
+(defun gst-new-node (tree last-added number start &optional end suffix-start)
+  "Make a new node with START and END as the coming edge.
+NUMBER is the number of string the label belongs to.
+Then add the new node to TREE.
+LAST-ADDED is the number of elements already in the TREE."
+  (let* ((end (or end 'infty) ;; 'infty represents the index of a leaf
+              )
+         (suffix-link 0) ;; The suffix link is initially 0
+         (new-node
+          (cond ((eq end 'infty)
+                 (list number start end suffix-link (make-hash-table)
+                       (list (list number suffix-start))))
+                (t
+                 (list number start end suffix-link (make-hash-table))))))
+    (puthash (1+ last-added) new-node tree)
+    (1+ last-added)))
+
+;;;###autoload
+(defun gst-add-leaf-label (tree leaf number start)
+  "Add a label to LEAF."
+  (let* ((actual-node (gethash leaf tree))
+         (leaf-labels (cdr (cdr (cdr (cdr (cdr actual-node)))))))
+    (cond ((consp leaf-labels)
+           (setcar leaf-labels
+                   (cons (list number start)
+                         (car leaf-labels)))))))
+
+;;;###autoload
+(defun gst-add-suffix-link (tree need-sl node)
+  "If NEED-SL is positive, then add the suffix link.
+In particular, the node corresponding to NEED-SL in TREE
+gets a suffix link pointing to NODE.
+
+This always returns NODE."
+  (cond
+   ((and (> need-sl 1) (/= need-sl node))
+    (setcar (cdr (cdr (cdr (gethash need-sl tree)))) node)))
+  node)
+
+;;;###autoload
+(defun gst-canonize (tree node position active-number active-edge-index active-length active-node
+                          str-lens)
+  "Walk down TREE to find the correct active point."
+  (let* ((actual-node (gethash node tree))
+         (node-edge-length (gst-edge-length actual-node position active-number
+                                            str-lens)))
+    (cond
+     ((>= active-length node-edge-length)
+      (list t
+            active-number
+            (+ active-edge-index
+               node-edge-length)
+            (- active-length
+               node-edge-length)
+            node))
+     (t
+      (list nil
+            active-number
+            active-edge-index
+            active-length
+            active-node)))))
+
+;;;###autoload
+(defsubst gst-aref (strs num index)
+  "Return the INDEX-th element in NUM-th element of STRS."
+  (aref (nth num strs) index))
+
+;;;###autoload
+(defun gst-extend-tree (tree last-added position remain
+                             active-node active-number active-edge-index
+                             active-length character strs num str-lens)
+  "Extend a tree by CHARACTER in NUM-th string of STRS.
+The return value is
+(tree 
+ last-added    remain            active-node
+ active-number active-edge-index active-length)"
+  (let* ((need-sl 0)
+         (remain (1+ remain))
+         continue-p breakp)
+    (while (and (not breakp) (> remain 0))
+      (setq continue-p nil breakp nil)
+      (cond
+       ((= active-length 0)
+        (setq active-edge-index position)
+        (setq active-number num)))
+      (let* ((actual-node (gethash active-node tree))
+             (nxt (cond
+                   (actual-node
+                    (gethash (gst-aref strs active-number active-edge-index)
+                             (cadr (cdr (cdr (cdr actual-node)))))))))
+        (cond
+         ((null nxt)
+          (let ((leaf (gst-new-node tree last-added num position nil
+                                    (- position remain -1))))
+            (setq last-added leaf)
+            (puthash (gst-aref strs active-number active-edge-index)
+                     leaf
+                     (cadr (cdr (cdr (cdr (gethash active-node tree))))))
+            (setq need-sl (gst-add-suffix-link tree need-sl active-node)))
+          ;; rule 2
+          )
+         (t
+          (let* ((result (gst-canonize
+                          tree nxt position active-number
+                          active-edge-index active-length active-node
+                          str-lens)))
+            (cond
+             ((car result)
+              ;; observation 2
+              (setq active-number (car (cdr result)))
+              (setq active-edge-index (car (cdr (cdr result))))
+              (setq active-length (car (cdr (cdr (cdr result)))))
+              (setq active-node (car (cdr (cdr (cdr (cdr result))))))
+              (setq continue-p t))
+             (t
+              (cond
+               ((eq (gst-aref strs
+                              (car (gethash nxt tree))
+                              (+ active-length
+                                 (cadr (gethash nxt tree))))
+                    character)
+                ;; observation 1
+                (setq active-length (1+ active-length))
+                (setq need-sl (gst-add-suffix-link tree need-sl active-node))
+                (setq breakp t)
+                ;; add a label
+                (cond
+                 ((eq character -1)     ; terminating symbol
+                  (gst-add-leaf-label tree nxt num (- position remain -1))))))
+              (cond
+               (breakp)
+               (t ;; splitting
+                (let ((split (gst-new-node
+                              tree last-added (car (gethash nxt tree)) (cadr (gethash nxt tree))
+                              (+ (cadr (gethash nxt tree)) active-length))))
+                  (setq last-added split)
+                  (puthash
+                   (gst-aref strs active-number active-edge-index)
+                   split (cadr (cdr (cdr (cdr (gethash active-node tree))))))
+                  (let ((leaf (gst-new-node tree last-added num position
+                                            nil (- position remain -1))))
+                    (setq last-added leaf)
+                    (puthash character leaf
+                             (cadddr (cdr (gethash split tree))))
+                    (setcar (cdr (gethash nxt tree))
+                            (+ (cadr (gethash nxt tree))
+                               active-length))
+                    (puthash (gst-aref strs
+                                       (car (gethash nxt tree))
+                                       (cadr (gethash nxt tree)))
+                             nxt
+                             (cadddr (cdr (gethash split tree))))
+                    ;; rule 2
+                    (setq need-sl
+                          (gst-add-suffix-link tree need-sl split)))))))))))
+        (cond
+         ((or continue-p breakp))
+         (t
+          (setq remain (1- remain))
+          (cond
+           ((and (eq active-node 1) ; root
+                 (> active-length 0))
+            (setq active-length (1- active-length))
+            (setq active-edge-index
+                  (1+ (- position remain))))
+           (t
+            (setq active-node
+                  (let ((slink (cadddr (gethash active-node tree))))
+                    (cond       ; follow the suffix link or go to root
+                     ((> slink 1) slink)
+                     (t 1))))))))))
+    (list tree last-added remain active-node
+          active-number active-edge-index active-length)))
+
+;;;###autoload
+(defun gst-build-for-strs (strs &optional str-lens)
+  "Build the generalized suffix tree for STRS.
+One can optionally provide STR-LENS to avoid calculating the
+lengths again."
+  (let* ((len (length strs))
+         (index 0)
+         (tree (make-hash-table))
+         (last-added 0)
+         (active-node (gst-new-node tree last-added index -1 -1))
+         (str-lens (or str-lens (mapcar #'length strs))))
+    (setq last-added active-node)
+    (while (< index len)
+      (let* ((position 0)
+             (character (ignore-errors (gst-aref strs index position)))
+             (remain 0)
+             (active-node 1)            ; start from the root
+             (active-number index)
+             (active-edge-index 0)
+             (active-length 0)
+             old-character result)                    ; temporary holder
+        (while character
+          (setq old-character character)
+          (setq result (gst-extend-tree tree last-added position remain
+                                        active-node active-number active-edge-index
+                                        active-length character strs index
+                                        str-lens))
+          (setq tree (pop result))
+          (setq last-added (pop result))
+          (setq remain (pop result))
+          (setq active-node (pop result))
+          (setq active-number (pop result))
+          (setq active-edge-index (pop result))
+          (setq active-length (pop result))
+          (setq position (1+ position))
+          (setq character (ignore-errors (gst-aref strs index position)))
+          (cond
+           ((characterp old-character)
+            (insert (format "After adding character %c:\n" old-character))
+            (gst-print-tree tree
+                            (append (seq-take strs index)
+                                    (list (concat
+                                           (seq-take (nth index strs) position)
+                                           "$"))))
+            (insert "\n\n"))
+           ((= old-character -1)
+            (insert (format "After adding character -1:\n"))
+            (gst-print-tree tree
+                            (seq-take strs (1+ index)))
+            (insert "\n\n")))))
+      (setq index (1+ index))
+      (insert "\n\n"))
+    tree))
+
+;;; Printing
+
+;; This section is not necessary. It is here just to print the trees
+;; to make sure we don't make some strange errors.
+
+(require 'hierarchy)
+(require 'seq)
+
+;;;###autoload
+(defun gst-print-strs (strs)
+  "Print strings STRS nicely."
+  (mapc (lambda (str)
+          (mapc (lambda (char)
+                  (cond ((characterp char) (insert char))
+                        (t (insert ", "))))
+                str))
+        strs))
+
+;;;###autoload
+(defun gst-pretty-hash-table (table)
+  "Only returns the useful parts from a table."
+  (let (keys-values-alist)
+    (maphash
+     (lambda (key value)
+       (setq keys-values-alist
+             (cons
+              (cons key value)
+              keys-values-alist)))
+     table)
+    keys-values-alist))
+
+;;;###autoload
+(defun gst-pretty-node (node)
+  "Outputs a prettified NODE."
+  (format "(%d %d %s %d %s %S)"
+          (car node) (cadr node)
+          (caddr node) (cadddr node)
+          (gst-pretty-hash-table (car (nthcdr 4 node)))
+          (car (nthcdr 5 node))))
+
+;;;###autoload
+(defun gst-print-tree-for-strs (strs)
+  "Print the generalized suffix tree for STRS."
+  (let* ((strs (mapcar (lambda (str)
+                         (vconcat str (list -1)))
+                       strs))
+         (symbol (make-symbol "gtree")))
+    (set symbol (gst-build-for-strs strs))
+    (insert "Generalized suffix tree for: ")
+    (gst-print-strs strs)
+    (delete-region (- (point) 2) (point))
+    (insert ":\n")
+    (gst-print-tree (symbol-value symbol) strs)))
+
+;;;###autoload
+(defvar gst-full-error-p nil
+  "Whether to print full nodes in the output.")
+
+;;;###autoload
+(defun gst-print-tree (tree strs)
+  "Print TREE with the aid of STRS."
+  (let* ((symbol-tree (make-symbol "new-hierarchy")))
+    (set symbol-tree (hierarchy-new))
+    (maphash
+     (lambda (key value)
+       (hierarchy-add-tree
+        (symbol-value symbol-tree) key nil
+        (lambda (item)
+          (hash-table-values (car (nthcdr 4 (gethash item tree)))))))
+     tree)
+    (hierarchy-print
+     (symbol-value symbol-tree)
+     (lambda (item)
+       (cond ((= item 1) "root")
+             (t (let ((actual-str
+                       (let* ((node (gethash item tree))
+                              (leafp (eq (caddr node) 'infty))
+                              (leaf-labels
+                               (cond (leafp (car (nthcdr 5 node))))))
+                         (concat
+                          (seq-subseq
+                           (nth (car node) strs)
+                           (min (cadr node) (1- (length (nth (car node) strs))))
+                           (cond (leafp -1)
+                                 (t (caddr node))))
+                          (cond
+                           (leafp
+                            (apply
+                             #'concat
+                             (mapcar
+                              (lambda (label)
+                                (let ((first (car label))
+                                      (second (cadr label)))
+                                  (format "$ (%d : %d)"
+                                          first second)))
+                              leaf-labels))))))))
+                  (cond (gst-full-error-p
+                         (concat
+                          (format "key: %d, %s, %s" item actual-str
+                                  (gst-pretty-node (gethash item tree)))))
+                        (t actual-str)))))))))
+
+(provide 'generalized-suffix-tree)
+;;; generalized-suffiex-tree.el ends here
diff --git a/suffix tree/gst test ground.txt b/suffix tree/gst test ground.txt
new file mode 100644
index 0000000..2dad02e
--- /dev/null
+++ b/suffix tree/gst test ground.txt	
@@ -0,0 +1,12291 @@
+Generalized suffix tree for: abab, baba:
+root
+  a
+    $ (1 : 3)
+    b
+      $ (0 : 2)
+      a
+        $ (1 : 1)
+        b$ (0 : 0)
+  b
+    $ (0 : 3)
+    a
+      $ (1 : 2)
+      b
+        a$ (1 : 0)
+        $ (0 : 1)
+  $ (1 : 4)$ (0 : 4)
+
+
+
+Generalized suffix tree for: abab, baba, cbabd:
+root
+  a
+    $ (1 : 3)
+    b
+      $ (0 : 2)
+      a
+        $ (1 : 1)
+        b$ (0 : 0)
+      d$ (2 : 2)
+  b
+    $ (0 : 3)
+    a
+      $ (1 : 2)
+      b
+        a$ (1 : 0)
+        $ (0 : 1)
+        d$ (2 : 1)
+    d$ (2 : 3)
+  $ (2 : 5)$ (1 : 4)$ (0 : 4)
+  cbabd$ (2 : 0)
+  d$ (2 : 4)
+
+
+
+After adding character i:
+root
+  i$ (0 : 0)
+
+
+After adding character d:
+root
+  id$ (0 : 0)
+  d$ (0 : 1)
+
+
+After adding character o:
+root
+  ido$ (0 : 0)
+  do$ (0 : 1)
+  o$ (0 : 2)
+
+
+After adding character -:
+root
+  ido-$ (0 : 0)
+  do-$ (0 : 1)
+  o-$ (0 : 2)
+  -$ (0 : 3)
+
+
+After adding character c:
+root
+  ido-c$ (0 : 0)
+  do-c$ (0 : 1)
+  o-c$ (0 : 2)
+  -c$ (0 : 3)
+  c$ (0 : 4)
+
+
+After adding character o:
+root
+  ido-co$ (0 : 0)
+  do-co$ (0 : 1)
+  o-co$ (0 : 2)
+  -co$ (0 : 3)
+  co$ (0 : 4)
+
+
+After adding character m:
+root
+  ido-com$ (0 : 0)
+  do-com$ (0 : 1)
+  o
+    m$ (0 : 5)
+    -com$ (0 : 2)
+  -com$ (0 : 3)
+  com$ (0 : 4)
+  m$ (0 : 6)
+
+
+After adding character p:
+root
+  ido-comp$ (0 : 0)
+  do-comp$ (0 : 1)
+  o
+    mp$ (0 : 5)
+    -comp$ (0 : 2)
+  -comp$ (0 : 3)
+  comp$ (0 : 4)
+  mp$ (0 : 6)
+  p$ (0 : 7)
+
+
+After adding character l:
+root
+  ido-compl$ (0 : 0)
+  do-compl$ (0 : 1)
+  o
+    mpl$ (0 : 5)
+    -compl$ (0 : 2)
+  -compl$ (0 : 3)
+  compl$ (0 : 4)
+  mpl$ (0 : 6)
+  pl$ (0 : 7)
+  l$ (0 : 8)
+
+
+After adding character e:
+root
+  ido-comple$ (0 : 0)
+  do-comple$ (0 : 1)
+  o
+    mple$ (0 : 5)
+    -comple$ (0 : 2)
+  -comple$ (0 : 3)
+  comple$ (0 : 4)
+  mple$ (0 : 6)
+  ple$ (0 : 7)
+  le$ (0 : 8)
+  e$ (0 : 9)
+
+
+After adding character t:
+root
+  ido-complet$ (0 : 0)
+  do-complet$ (0 : 1)
+  o
+    mplet$ (0 : 5)
+    -complet$ (0 : 2)
+  -complet$ (0 : 3)
+  complet$ (0 : 4)
+  mplet$ (0 : 6)
+  plet$ (0 : 7)
+  let$ (0 : 8)
+  et$ (0 : 9)
+  t$ (0 : 10)
+
+
+After adding character i:
+root
+  ido-completi$ (0 : 0)
+  do-completi$ (0 : 1)
+  o
+    mpleti$ (0 : 5)
+    -completi$ (0 : 2)
+  -completi$ (0 : 3)
+  completi$ (0 : 4)
+  mpleti$ (0 : 6)
+  pleti$ (0 : 7)
+  leti$ (0 : 8)
+  eti$ (0 : 9)
+  ti$ (0 : 10)
+
+
+After adding character o:
+root
+  i
+    o$ (0 : 11)
+    do-completio$ (0 : 0)
+  do-completio$ (0 : 1)
+  o
+    mpletio$ (0 : 5)
+    -completio$ (0 : 2)
+  -completio$ (0 : 3)
+  completio$ (0 : 4)
+  mpletio$ (0 : 6)
+  pletio$ (0 : 7)
+  letio$ (0 : 8)
+  etio$ (0 : 9)
+  tio$ (0 : 10)
+
+
+After adding character n:
+root
+  i
+    on$ (0 : 11)
+    do-completion$ (0 : 0)
+  do-completion$ (0 : 1)
+  o
+    mpletion$ (0 : 5)
+    -completion$ (0 : 2)
+    n$ (0 : 12)
+  -completion$ (0 : 3)
+  completion$ (0 : 4)
+  mpletion$ (0 : 6)
+  pletion$ (0 : 7)
+  letion$ (0 : 8)
+  etion$ (0 : 9)
+  tion$ (0 : 10)
+  n$ (0 : 13)
+
+
+After adding character s:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+  do-completions$ (0 : 1)
+  o
+    mpletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  completions$ (0 : 4)
+  mpletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  tions$ (0 : 10)
+  ns$ (0 : 13)
+  s$ (0 : 14)
+
+
+After adding character -1:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+  do-completions$ (0 : 1)
+  o
+    mpletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  completions$ (0 : 4)
+  mpletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  tions$ (0 : 10)
+  ns$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+
+
+After adding character c:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+  do-completions$ (0 : 1)
+  o
+    mpletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  completions$ (0 : 4)
+  mpletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  tions$ (0 : 10)
+  ns$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character o:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+  do-completions$ (0 : 1)
+  o
+    mpletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  completions$ (0 : 4)
+  mpletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  tions$ (0 : 10)
+  ns$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character m:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+  do-completions$ (0 : 1)
+  o
+    mpletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  completions$ (0 : 4)
+  mpletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  tions$ (0 : 10)
+  ns$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character i:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+  do-completions$ (0 : 1)
+  o
+    m
+      i$ (1 : 1)
+      pletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  com
+    i$ (1 : 0)
+    pletions$ (0 : 4)
+  m
+    i$ (1 : 2)
+    pletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  tions$ (0 : 10)
+  ns$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character n:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+    n$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      in$ (1 : 1)
+      pletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  com
+    in$ (1 : 0)
+    pletions$ (0 : 4)
+  m
+    in$ (1 : 2)
+    pletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  tions$ (0 : 10)
+  ns$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character t:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int$ (1 : 1)
+      pletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  com
+    int$ (1 : 0)
+    pletions$ (0 : 4)
+  m
+    int$ (1 : 2)
+    pletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  tions$ (0 : 10)
+  n
+    t$ (1 : 4)
+    s$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character -:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-$ (1 : 1)
+      pletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  com
+    int-$ (1 : 0)
+    pletions$ (0 : 4)
+  m
+    int-$ (1 : 2)
+    pletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  t
+    -$ (1 : 5)
+    ions$ (0 : 10)
+  n
+    t-$ (1 : 4)
+    s$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character c:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-c$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-c$ (1 : 1)
+      pletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  com
+    int-c$ (1 : 0)
+    pletions$ (0 : 4)
+  m
+    int-c$ (1 : 2)
+    pletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  t
+    -c$ (1 : 5)
+    ions$ (0 : 10)
+  n
+    t-c$ (1 : 4)
+    s$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character o:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-co$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-co$ (1 : 1)
+      pletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  com
+    int-co$ (1 : 0)
+    pletions$ (0 : 4)
+  m
+    int-co$ (1 : 2)
+    pletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  t
+    -co$ (1 : 5)
+    ions$ (0 : 10)
+  n
+    t-co$ (1 : 4)
+    s$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character m:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-com$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-com$ (1 : 1)
+      pletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  com
+    int-com$ (1 : 0)
+    pletions$ (0 : 4)
+  m
+    int-com$ (1 : 2)
+    pletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  t
+    -com$ (1 : 5)
+    ions$ (0 : 10)
+  n
+    t-com$ (1 : 4)
+    s$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character p:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-comp$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-comp$ (1 : 1)
+      pletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  com
+    int-comp$ (1 : 0)
+    pletions$ (0 : 4)
+  m
+    int-comp$ (1 : 2)
+    pletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  t
+    -comp$ (1 : 5)
+    ions$ (0 : 10)
+  n
+    t-comp$ (1 : 4)
+    s$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character l:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-compl$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-compl$ (1 : 1)
+      pletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  com
+    int-compl$ (1 : 0)
+    pletions$ (0 : 4)
+  m
+    int-compl$ (1 : 2)
+    pletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  t
+    -compl$ (1 : 5)
+    ions$ (0 : 10)
+  n
+    t-compl$ (1 : 4)
+    s$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character e:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-comple$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-comple$ (1 : 1)
+      pletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  com
+    int-comple$ (1 : 0)
+    pletions$ (0 : 4)
+  m
+    int-comple$ (1 : 2)
+    pletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  t
+    -comple$ (1 : 5)
+    ions$ (0 : 10)
+  n
+    t-comple$ (1 : 4)
+    s$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character t:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-complet$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-complet$ (1 : 1)
+      pletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  com
+    int-complet$ (1 : 0)
+    pletions$ (0 : 4)
+  m
+    int-complet$ (1 : 2)
+    pletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  t
+    -complet$ (1 : 5)
+    ions$ (0 : 10)
+  n
+    t-complet$ (1 : 4)
+    s$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character i:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-completi$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completi$ (1 : 1)
+      pletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  com
+    int-completi$ (1 : 0)
+    pletions$ (0 : 4)
+  m
+    int-completi$ (1 : 2)
+    pletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  t
+    -completi$ (1 : 5)
+    ions$ (0 : 10)
+  n
+    t-completi$ (1 : 4)
+    s$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character o:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-completio$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completio$ (1 : 1)
+      pletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  com
+    int-completio$ (1 : 0)
+    pletions$ (0 : 4)
+  m
+    int-completio$ (1 : 2)
+    pletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  t
+    -completio$ (1 : 5)
+    ions$ (0 : 10)
+  n
+    t-completio$ (1 : 4)
+    s$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character n:
+root
+  i
+    ons$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-completion$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion$ (1 : 1)
+      pletions$ (0 : 5)
+    -completions$ (0 : 2)
+    ns$ (0 : 12)
+  -completions$ (0 : 3)
+  com
+    int-completion$ (1 : 0)
+    pletions$ (0 : 4)
+  m
+    int-completion$ (1 : 2)
+    pletions$ (0 : 6)
+  pletions$ (0 : 7)
+  letions$ (0 : 8)
+  etions$ (0 : 9)
+  t
+    -completion$ (1 : 5)
+    ions$ (0 : 10)
+  n
+    t-completion$ (1 : 4)
+    s$ (0 : 13)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character -:
+root
+  i
+    on
+      -$ (1 : 14)
+      s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-completion-$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-$ (1 : 1)
+      pletion
+        -$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -$ (1 : 15)
+      s$ (0 : 12)
+  -completion
+    -$ (1 : 6)
+    s$ (0 : 3)
+  com
+    int-completion-$ (1 : 0)
+    pletion
+      -$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-$ (1 : 2)
+    pletion
+      -$ (1 : 9)
+      s$ (0 : 6)
+  pletion
+    -$ (1 : 10)
+    s$ (0 : 7)
+  letion
+    -$ (1 : 11)
+    s$ (0 : 8)
+  etion
+    -$ (1 : 12)
+    s$ (0 : 9)
+  t
+    -completion-$ (1 : 5)
+    ion
+      -$ (1 : 13)
+      s$ (0 : 10)
+  n
+    t-completion-$ (1 : 4)
+    s$ (0 : 13)
+    -$ (1 : 16)
+  s$ (0 : 14)
+  $ (0 : 15)
+
+
+After adding character a:
+root
+  i
+    on
+      -a$ (1 : 14)
+      s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-completion-a$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-a$ (1 : 1)
+      pletion
+        -a$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -a$ (1 : 15)
+      s$ (0 : 12)
+  -
+    a$ (1 : 17)
+    completion
+      -a$ (1 : 6)
+      s$ (0 : 3)
+  com
+    int-completion-a$ (1 : 0)
+    pletion
+      -a$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-a$ (1 : 2)
+    pletion
+      -a$ (1 : 9)
+      s$ (0 : 6)
+  pletion
+    -a$ (1 : 10)
+    s$ (0 : 7)
+  letion
+    -a$ (1 : 11)
+    s$ (0 : 8)
+  etion
+    -a$ (1 : 12)
+    s$ (0 : 9)
+  t
+    -completion-a$ (1 : 5)
+    ion
+      -a$ (1 : 13)
+      s$ (0 : 10)
+  n
+    t-completion-a$ (1 : 4)
+    s$ (0 : 13)
+    -a$ (1 : 16)
+  s$ (0 : 14)
+  $ (0 : 15)
+  a$ (1 : 18)
+
+
+After adding character t:
+root
+  i
+    on
+      -at$ (1 : 14)
+      s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-completion-at$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at$ (1 : 1)
+      pletion
+        -at$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at$ (1 : 15)
+      s$ (0 : 12)
+  -
+    at$ (1 : 17)
+    completion
+      -at$ (1 : 6)
+      s$ (0 : 3)
+  com
+    int-completion-at$ (1 : 0)
+    pletion
+      -at$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at$ (1 : 2)
+    pletion
+      -at$ (1 : 9)
+      s$ (0 : 6)
+  pletion
+    -at$ (1 : 10)
+    s$ (0 : 7)
+  letion
+    -at$ (1 : 11)
+    s$ (0 : 8)
+  etion
+    -at$ (1 : 12)
+    s$ (0 : 9)
+  t
+    -completion-at$ (1 : 5)
+    ion
+      -at$ (1 : 13)
+      s$ (0 : 10)
+  n
+    t-completion-at$ (1 : 4)
+    s$ (0 : 13)
+    -at$ (1 : 16)
+  s$ (0 : 14)
+  $ (0 : 15)
+  at$ (1 : 18)
+
+
+After adding character -:
+root
+  i
+    on
+      -at-$ (1 : 14)
+      s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-completion-at-$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-$ (1 : 1)
+      pletion
+        -at-$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-$ (1 : 15)
+      s$ (0 : 12)
+  -
+    at-$ (1 : 17)
+    completion
+      -at-$ (1 : 6)
+      s$ (0 : 3)
+  com
+    int-completion-at-$ (1 : 0)
+    pletion
+      -at-$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-$ (1 : 2)
+    pletion
+      -at-$ (1 : 9)
+      s$ (0 : 6)
+  pletion
+    -at-$ (1 : 10)
+    s$ (0 : 7)
+  letion
+    -at-$ (1 : 11)
+    s$ (0 : 8)
+  etion
+    -at-$ (1 : 12)
+    s$ (0 : 9)
+  t
+    -completion-at-$ (1 : 5)
+    ion
+      -at-$ (1 : 13)
+      s$ (0 : 10)
+  n
+    t-completion-at-$ (1 : 4)
+    s$ (0 : 13)
+    -at-$ (1 : 16)
+  s$ (0 : 14)
+  $ (0 : 15)
+  at-$ (1 : 18)
+
+
+After adding character p:
+root
+  i
+    on
+      -at-p$ (1 : 14)
+      s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-completion-at-p$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-p$ (1 : 1)
+      pletion
+        -at-p$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-p$ (1 : 15)
+      s$ (0 : 12)
+  -
+    at-p$ (1 : 17)
+    completion
+      -at-p$ (1 : 6)
+      s$ (0 : 3)
+    p$ (1 : 20)
+  com
+    int-completion-at-p$ (1 : 0)
+    pletion
+      -at-p$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-p$ (1 : 2)
+    pletion
+      -at-p$ (1 : 9)
+      s$ (0 : 6)
+  pletion
+    -at-p$ (1 : 10)
+    s$ (0 : 7)
+  letion
+    -at-p$ (1 : 11)
+    s$ (0 : 8)
+  etion
+    -at-p$ (1 : 12)
+    s$ (0 : 9)
+  t
+    -
+      p$ (1 : 19)
+      completion-at-p$ (1 : 5)
+    ion
+      -at-p$ (1 : 13)
+      s$ (0 : 10)
+  n
+    t-completion-at-p$ (1 : 4)
+    s$ (0 : 13)
+    -at-p$ (1 : 16)
+  s$ (0 : 14)
+  $ (0 : 15)
+  at-p$ (1 : 18)
+
+
+After adding character o:
+root
+  i
+    on
+      -at-po$ (1 : 14)
+      s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-completion-at-po$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-po$ (1 : 1)
+      pletion
+        -at-po$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-po$ (1 : 15)
+      s$ (0 : 12)
+  -
+    at-po$ (1 : 17)
+    completion
+      -at-po$ (1 : 6)
+      s$ (0 : 3)
+    po$ (1 : 20)
+  com
+    int-completion-at-po$ (1 : 0)
+    pletion
+      -at-po$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-po$ (1 : 2)
+    pletion
+      -at-po$ (1 : 9)
+      s$ (0 : 6)
+  p
+    o$ (1 : 21)
+    letion
+      -at-po$ (1 : 10)
+      s$ (0 : 7)
+  letion
+    -at-po$ (1 : 11)
+    s$ (0 : 8)
+  etion
+    -at-po$ (1 : 12)
+    s$ (0 : 9)
+  t
+    -
+      po$ (1 : 19)
+      completion-at-po$ (1 : 5)
+    ion
+      -at-po$ (1 : 13)
+      s$ (0 : 10)
+  n
+    t-completion-at-po$ (1 : 4)
+    s$ (0 : 13)
+    -at-po$ (1 : 16)
+  s$ (0 : 14)
+  $ (0 : 15)
+  at-po$ (1 : 18)
+
+
+After adding character i:
+root
+  i
+    on
+      -at-poi$ (1 : 14)
+      s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-completion-at-poi$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-poi$ (1 : 1)
+      pletion
+        -at-poi$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-poi$ (1 : 15)
+      s$ (0 : 12)
+    i$ (1 : 22)
+  -
+    at-poi$ (1 : 17)
+    completion
+      -at-poi$ (1 : 6)
+      s$ (0 : 3)
+    poi$ (1 : 20)
+  com
+    int-completion-at-poi$ (1 : 0)
+    pletion
+      -at-poi$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-poi$ (1 : 2)
+    pletion
+      -at-poi$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oi$ (1 : 21)
+    letion
+      -at-poi$ (1 : 10)
+      s$ (0 : 7)
+  letion
+    -at-poi$ (1 : 11)
+    s$ (0 : 8)
+  etion
+    -at-poi$ (1 : 12)
+    s$ (0 : 9)
+  t
+    -
+      poi$ (1 : 19)
+      completion-at-poi$ (1 : 5)
+    ion
+      -at-poi$ (1 : 13)
+      s$ (0 : 10)
+  n
+    t-completion-at-poi$ (1 : 4)
+    s$ (0 : 13)
+    -at-poi$ (1 : 16)
+  s$ (0 : 14)
+  $ (0 : 15)
+  at-poi$ (1 : 18)
+
+
+After adding character n:
+root
+  i
+    on
+      -at-poin$ (1 : 14)
+      s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-completion-at-poin$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-poin$ (1 : 1)
+      pletion
+        -at-poin$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-poin$ (1 : 15)
+      s$ (0 : 12)
+    in$ (1 : 22)
+  -
+    at-poin$ (1 : 17)
+    completion
+      -at-poin$ (1 : 6)
+      s$ (0 : 3)
+    poin$ (1 : 20)
+  com
+    int-completion-at-poin$ (1 : 0)
+    pletion
+      -at-poin$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-poin$ (1 : 2)
+    pletion
+      -at-poin$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oin$ (1 : 21)
+    letion
+      -at-poin$ (1 : 10)
+      s$ (0 : 7)
+  letion
+    -at-poin$ (1 : 11)
+    s$ (0 : 8)
+  etion
+    -at-poin$ (1 : 12)
+    s$ (0 : 9)
+  t
+    -
+      poin$ (1 : 19)
+      completion-at-poin$ (1 : 5)
+    ion
+      -at-poin$ (1 : 13)
+      s$ (0 : 10)
+  n
+    t-completion-at-poin$ (1 : 4)
+    s$ (0 : 13)
+    -at-poin$ (1 : 16)
+  s$ (0 : 14)
+  $ (0 : 15)
+  at-poin$ (1 : 18)
+
+
+After adding character t:
+root
+  i
+    on
+      -at-point$ (1 : 14)
+      s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt-completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  etion
+    -at-point$ (1 : 12)
+    s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+  n
+    t-completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s$ (0 : 14)
+  $ (0 : 15)
+  at-point$ (1 : 18)
+
+
+After adding character -1:
+root
+  i
+    on
+      -at-point$ (1 : 14)
+      s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  etion
+    -at-point$ (1 : 12)
+    s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s$ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+
+
+
+
+After adding character p:
+root
+  i
+    on
+      -at-point$ (1 : 14)
+      s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  etion
+    -at-point$ (1 : 12)
+    s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s$ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+
+
+After adding character r:
+root
+  i
+    on
+      -at-point$ (1 : 14)
+      s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    r$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  etion
+    -at-point$ (1 : 12)
+    s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s$ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  r$ (2 : 1)
+
+
+After adding character e:
+root
+  i
+    on
+      -at-point$ (1 : 14)
+      s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    re$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  etion
+    -at-point$ (1 : 12)
+    s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s$ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  re$ (2 : 1)
+
+
+After adding character v:
+root
+  i
+    on
+      -at-point$ (1 : 14)
+      s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    rev$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  e
+    v$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s$ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  rev$ (2 : 1)
+  v$ (2 : 3)
+
+
+After adding character i:
+root
+  i
+    on
+      -at-point$ (1 : 14)
+      s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    revi$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  e
+    vi$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s$ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revi$ (2 : 1)
+  vi$ (2 : 3)
+
+
+After adding character o:
+root
+  i
+    on
+      -at-point$ (1 : 14)
+      s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    revio$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  e
+    vio$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s$ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revio$ (2 : 1)
+  vio$ (2 : 3)
+
+
+After adding character u:
+root
+  i
+    o
+      u$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+    u$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    reviou$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  e
+    viou$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s$ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  reviou$ (2 : 1)
+  viou$ (2 : 3)
+  u$ (2 : 6)
+
+
+After adding character s:
+root
+  i
+    o
+      us$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+    us$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    revious$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  e
+    vious$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s$ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious$ (2 : 1)
+  vious$ (2 : 3)
+  us$ (2 : 6)
+
+
+After adding character -:
+root
+  i
+    o
+      us-$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+    us-$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    revious-$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  e
+    vious-$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s
+    -$ (2 : 7)
+    $ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-$ (2 : 1)
+  vious-$ (2 : 3)
+  us-$ (2 : 6)
+
+
+After adding character c:
+root
+  i
+    o
+      us-c$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+    us-c$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    revious-c$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  e
+    vious-c$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s
+    -c$ (2 : 7)
+    $ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-c$ (2 : 1)
+  vious-c$ (2 : 3)
+  us-c$ (2 : 6)
+
+
+After adding character o:
+root
+  i
+    o
+      us-co$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+    us-co$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    revious-co$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  e
+    vious-co$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s
+    -co$ (2 : 7)
+    $ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-co$ (2 : 1)
+  vious-co$ (2 : 3)
+  us-co$ (2 : 6)
+
+
+After adding character m:
+root
+  i
+    o
+      us-com$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+    us-com$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    revious-com$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  e
+    vious-com$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s
+    -com$ (2 : 7)
+    $ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-com$ (2 : 1)
+  vious-com$ (2 : 3)
+  us-com$ (2 : 6)
+
+
+After adding character p:
+root
+  i
+    o
+      us-comp$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+    us-comp$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    revious-comp$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  e
+    vious-comp$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s
+    -comp$ (2 : 7)
+    $ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-comp$ (2 : 1)
+  vious-comp$ (2 : 3)
+  us-comp$ (2 : 6)
+
+
+After adding character l:
+root
+  i
+    o
+      us-compl$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+    us-compl$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    revious-compl$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  e
+    vious-compl$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s
+    -compl$ (2 : 7)
+    $ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-compl$ (2 : 1)
+  vious-compl$ (2 : 3)
+  us-compl$ (2 : 6)
+
+
+After adding character e:
+root
+  i
+    o
+      us-comple$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+    us-comple$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    revious-comple$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  e
+    vious-comple$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s
+    -comple$ (2 : 7)
+    $ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-comple$ (2 : 1)
+  vious-comple$ (2 : 3)
+  us-comple$ (2 : 6)
+
+
+After adding character t:
+root
+  i
+    o
+      us-complet$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+    us-complet$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    revious-complet$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  e
+    vious-complet$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s
+    -complet$ (2 : 7)
+    $ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-complet$ (2 : 1)
+  vious-complet$ (2 : 3)
+  us-complet$ (2 : 6)
+
+
+After adding character i:
+root
+  i
+    o
+      us-completi$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+    us-completi$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    revious-completi$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  e
+    vious-completi$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s
+    -completi$ (2 : 7)
+    $ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completi$ (2 : 1)
+  vious-completi$ (2 : 3)
+  us-completi$ (2 : 6)
+
+
+After adding character o:
+root
+  i
+    o
+      us-completio$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+    us-completio$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    revious-completio$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  e
+    vious-completio$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s
+    -completio$ (2 : 7)
+    $ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completio$ (2 : 1)
+  vious-completio$ (2 : 3)
+  us-completio$ (2 : 6)
+
+
+After adding character n:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+    revious-completion$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+
+
+After adding character -1:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+    $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+
+
+
+
+After adding character c:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+    $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+
+
+After adding character o:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+    $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+
+
+After adding character m:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+    $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+
+
+After adding character p:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+    $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+
+
+After adding character l:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+    $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+
+
+After adding character e:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+    $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+
+
+After adding character t:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+    $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+
+
+After adding character i:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+    $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+
+
+After adding character o:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+    $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+
+
+After adding character n:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+    $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+
+
+After adding character -:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  letion
+    -at-point$ (1 : 11)
+    s$ (0 : 8)
+    $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+
+
+After adding character f:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          f$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          f$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        f$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    f$ (3 : 10)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        f$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        f$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        f$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  letion
+    -
+      f$ (3 : 4)
+      at-point$ (1 : 11)
+    s$ (0 : 8)
+    $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        f$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        f$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      f$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  f$ (3 : 11)
+
+
+After adding character l:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          fl$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          fl$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        fl$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    fl$ (3 : 10)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        fl$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        fl$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        fl$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  letion
+    -
+      fl$ (3 : 4)
+      at-point$ (1 : 11)
+    s$ (0 : 8)
+    $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        fl$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        fl$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      fl$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  fl$ (3 : 11)
+
+
+After adding character e:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          fle$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          fle$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        fle$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    fle$ (3 : 10)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        fle$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        fle$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        fle$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  letion
+    -
+      fle$ (3 : 4)
+      at-point$ (1 : 11)
+    s$ (0 : 8)
+    $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        fle$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        fle$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      fle$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  fle$ (3 : 11)
+
+
+After adding character x:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    flex$ (3 : 10)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  le
+    x$ (3 : 12)
+    tion
+      -
+        flex$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x$ (3 : 13)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex$ (3 : 11)
+  x$ (3 : 14)
+
+
+After adding character -:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex-$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex-$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex-$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    flex-$ (3 : 10)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex-$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex-$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex-$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  le
+    x-$ (3 : 12)
+    tion
+      -
+        flex-$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex-$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-$ (3 : 13)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex-$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex-$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-$ (3 : 11)
+  x-$ (3 : 14)
+
+
+After adding character -:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    flex--$ (3 : 10)
+    -$ (3 : 15)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  le
+    x--$ (3 : 12)
+    tion
+      -
+        flex--$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x--$ (3 : 13)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex--$ (3 : 11)
+  x--$ (3 : 14)
+
+
+After adding character m:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--m$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--m$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--m$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    flex--m$ (3 : 10)
+    -m$ (3 : 15)
+    m$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--m$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--m$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--m$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  le
+    x--m$ (3 : 12)
+    tion
+      -
+        flex--m$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--m$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x--m$ (3 : 13)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--m$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--m$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex--m$ (3 : 11)
+  x--m$ (3 : 14)
+
+
+After adding character a:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--ma$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--ma$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--ma$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    flex--ma$ (3 : 10)
+    -ma$ (3 : 15)
+    ma$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--ma$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--ma$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--ma$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  le
+    x--ma$ (3 : 12)
+    tion
+      -
+        flex--ma$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--ma$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x--ma$ (3 : 13)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--ma$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--ma$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  at-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex--ma$ (3 : 11)
+  x--ma$ (3 : 14)
+
+
+After adding character k:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--mak$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--mak$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--mak$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    flex--mak$ (3 : 10)
+    -mak$ (3 : 15)
+    mak$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--mak$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--mak$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ak$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--mak$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  le
+    x--mak$ (3 : 12)
+    tion
+      -
+        flex--mak$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--mak$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x--mak$ (3 : 13)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--mak$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--mak$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    k$ (3 : 18)
+    t-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex--mak$ (3 : 11)
+  x--mak$ (3 : 14)
+  k$ (3 : 19)
+
+
+After adding character e:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    flex--make$ (3 : 10)
+    -make$ (3 : 15)
+    make$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  le
+    x--make$ (3 : 12)
+    tion
+      -
+        flex--make$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x--make$ (3 : 13)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke$ (3 : 18)
+    t-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex--make$ (3 : 11)
+  x--make$ (3 : 14)
+  ke$ (3 : 19)
+
+
+After adding character -:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    flex--make-$ (3 : 10)
+    -make-$ (3 : 15)
+    make-$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  le
+    x--make-$ (3 : 12)
+    tion
+      -
+        flex--make-$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x--make-$ (3 : 13)
+    -$ (3 : 20)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-$ (3 : 18)
+    t-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex--make-$ (3 : 11)
+  x--make-$ (3 : 14)
+  ke-$ (3 : 19)
+
+
+After adding character f:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-f$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-f$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-f$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    flex--make-f$ (3 : 10)
+    -make-f$ (3 : 15)
+    make-f$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-f$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-f$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-f$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-f$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  le
+    x--make-f$ (3 : 12)
+    tion
+      -
+        flex--make-f$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-f$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x--make-f$ (3 : 13)
+    -f$ (3 : 20)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-f$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-f$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-f$ (3 : 18)
+    t-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex--make-f$ (3 : 11)
+  x--make-f$ (3 : 14)
+  ke-f$ (3 : 19)
+
+
+After adding character l:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-fl$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-fl$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-fl$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    flex--make-fl$ (3 : 10)
+    -make-fl$ (3 : 15)
+    make-fl$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-fl$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-fl$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-fl$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-fl$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  le
+    x--make-fl$ (3 : 12)
+    tion
+      -
+        flex--make-fl$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-fl$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x--make-fl$ (3 : 13)
+    -fl$ (3 : 20)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-fl$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-fl$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-fl$ (3 : 18)
+    t-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex--make-fl$ (3 : 11)
+  x--make-fl$ (3 : 14)
+  ke-fl$ (3 : 19)
+
+
+After adding character e:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-fle$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-fle$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-fle$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    flex--make-fle$ (3 : 10)
+    -make-fle$ (3 : 15)
+    make-fle$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-fle$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-fle$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-fle$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-fle$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  le
+    x--make-fle$ (3 : 12)
+    tion
+      -
+        flex--make-fle$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-fle$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x--make-fle$ (3 : 13)
+    -fle$ (3 : 20)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-fle$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-fle$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-fle$ (3 : 18)
+    t-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex--make-fle$ (3 : 11)
+  x--make-fle$ (3 : 14)
+  ke-fle$ (3 : 19)
+
+
+After adding character x:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    flex--make-flex$ (3 : 10)
+    -make-flex$ (3 : 15)
+    make-flex$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-flex$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  le
+    x--make-flex$ (3 : 12)
+    tion
+      -
+        flex--make-flex$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x--make-flex$ (3 : 13)
+    -flex$ (3 : 20)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex$ (3 : 18)
+    t-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex--make-flex$ (3 : 11)
+  x--make-flex$ (3 : 14)
+  ke-flex$ (3 : 19)
+
+
+After adding character -:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    flex--make-flex-$ (3 : 10)
+    -make-flex-$ (3 : 15)
+    make-flex-$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-flex-$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  le
+    x--make-flex-$ (3 : 12)
+    tion
+      -
+        flex--make-flex-$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x--make-flex-$ (3 : 13)
+    -flex-$ (3 : 20)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-$ (3 : 18)
+    t-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex--make-flex-$ (3 : 11)
+  x--make-flex-$ (3 : 14)
+  ke-flex-$ (3 : 19)
+
+
+After adding character p:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-p$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-p$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-p$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    point$ (1 : 20)
+    flex-
+      p$ (3 : 21)
+      -make-flex-p$ (3 : 10)
+    -make-flex-p$ (3 : 15)
+    make-flex-p$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-flex-p$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-p$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-p$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-p$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+  le
+    x-
+      p$ (3 : 23)
+      -make-flex-p$ (3 : 12)
+    tion
+      -
+        flex--make-flex-p$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-p$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      p$ (3 : 24)
+      -make-flex-p$ (3 : 13)
+    -flex-p$ (3 : 20)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-p$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-p$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-p$ (3 : 18)
+    t-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    p$ (3 : 22)
+    -make-flex-p$ (3 : 11)
+  x-
+    p$ (3 : 25)
+    -make-flex-p$ (3 : 14)
+  ke-flex-p$ (3 : 19)
+
+
+After adding character a:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pa$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pa$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pa$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      a$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pa$ (3 : 21)
+      -make-flex-pa$ (3 : 10)
+    -make-flex-pa$ (3 : 15)
+    make-flex-pa$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-flex-pa$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pa$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pa$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pa$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    a$ (3 : 27)
+  le
+    x-
+      pa$ (3 : 23)
+      -make-flex-pa$ (3 : 12)
+    tion
+      -
+        flex--make-flex-pa$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pa$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pa$ (3 : 24)
+      -make-flex-pa$ (3 : 13)
+    -flex-pa$ (3 : 20)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pa$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pa$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pa$ (3 : 18)
+    t-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pa$ (3 : 22)
+    -make-flex-pa$ (3 : 11)
+  x-
+    pa$ (3 : 25)
+    -make-flex-pa$ (3 : 14)
+  ke-flex-pa$ (3 : 19)
+
+
+After adding character t:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pat$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pat$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pat$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      at$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pat$ (3 : 21)
+      -make-flex-pat$ (3 : 10)
+    -make-flex-pat$ (3 : 15)
+    make-flex-pat$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-flex-pat$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pat$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pat$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pat$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    at$ (3 : 27)
+  le
+    x-
+      pat$ (3 : 23)
+      -make-flex-pat$ (3 : 12)
+    tion
+      -
+        flex--make-flex-pat$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pat$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pat$ (3 : 24)
+      -make-flex-pat$ (3 : 13)
+    -flex-pat$ (3 : 20)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pat$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pat$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pat$ (3 : 18)
+    t-point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pat$ (3 : 22)
+    -make-flex-pat$ (3 : 11)
+  x-
+    pat$ (3 : 25)
+    -make-flex-pat$ (3 : 14)
+  ke-flex-pat$ (3 : 19)
+
+
+After adding character t:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-patt$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-patt$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-patt$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      att$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      patt$ (3 : 21)
+      -make-flex-patt$ (3 : 10)
+    -make-flex-patt$ (3 : 15)
+    make-flex-patt$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-flex-patt$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-patt$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-patt$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-patt$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    att$ (3 : 27)
+  le
+    x-
+      patt$ (3 : 23)
+      -make-flex-patt$ (3 : 12)
+    tion
+      -
+        flex--make-flex-patt$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-patt$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      patt$ (3 : 24)
+      -make-flex-patt$ (3 : 13)
+    -flex-patt$ (3 : 20)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-patt$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    t$ (3 : 29)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-patt$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-patt$ (3 : 18)
+    t
+      t$ (3 : 28)
+      -point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    patt$ (3 : 22)
+    -make-flex-patt$ (3 : 11)
+  x-
+    patt$ (3 : 25)
+    -make-flex-patt$ (3 : 14)
+  ke-flex-patt$ (3 : 19)
+
+
+After adding character e:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-patte$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-patte$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-patte$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      atte$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      patte$ (3 : 21)
+      -make-flex-patte$ (3 : 10)
+    -make-flex-patte$ (3 : 15)
+    make-flex-patte$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-flex-patte$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-patte$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-patte$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-patte$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    atte$ (3 : 27)
+  le
+    x-
+      patte$ (3 : 23)
+      -make-flex-patte$ (3 : 12)
+    tion
+      -
+        flex--make-flex-patte$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-patte$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      patte$ (3 : 24)
+      -make-flex-patte$ (3 : 13)
+    -flex-patte$ (3 : 20)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-patte$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    te$ (3 : 29)
+    e$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-patte$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-patte$ (3 : 18)
+    t
+      te$ (3 : 28)
+      -point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    patte$ (3 : 22)
+    -make-flex-patte$ (3 : 11)
+  x-
+    patte$ (3 : 25)
+    -make-flex-patte$ (3 : 14)
+  ke-flex-patte$ (3 : 19)
+
+
+After adding character r:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-patter$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-patter$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-patter$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      atter$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      patter$ (3 : 21)
+      -make-flex-patter$ (3 : 10)
+    -make-flex-patter$ (3 : 15)
+    make-flex-patter$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-flex-patter$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-patter$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-patter$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-patter$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    atter$ (3 : 27)
+  le
+    x-
+      patter$ (3 : 23)
+      -make-flex-patter$ (3 : 12)
+    tion
+      -
+        flex--make-flex-patter$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-patter$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      patter$ (3 : 24)
+      -make-flex-patter$ (3 : 13)
+    -flex-patter$ (3 : 20)
+    r$ (3 : 31)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-patter$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    ter$ (3 : 29)
+    er$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-patter$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-patter$ (3 : 18)
+    t
+      ter$ (3 : 28)
+      -point$ (1 : 18)
+  revious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    patter$ (3 : 22)
+    -make-flex-patter$ (3 : 11)
+  x-
+    patter$ (3 : 25)
+    -make-flex-patter$ (3 : 14)
+  ke-flex-patter$ (3 : 19)
+
+
+After adding character n:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  le
+    x-
+      pattern$ (3 : 23)
+      -make-flex-pattern$ (3 : 12)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    evious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character -1:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  le
+    x-
+      pattern$ (3 : 23)
+      -make-flex-pattern$ (3 : 12)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    evious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+
+
+After adding character e:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  le
+    x-
+      pattern$ (3 : 23)
+      -make-flex-pattern$ (3 : 12)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    evious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character l:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  le
+    x-
+      pattern$ (3 : 23)
+      -make-flex-pattern$ (3 : 12)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 4)
+        at-point$ (1 : 11)
+      s$ (0 : 8)
+      $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    l$ (4 : 0)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    evious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character d:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    d$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ld$ (4 : 0)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    evious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character o:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do-completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    do$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldo$ (4 : 0)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    evious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character c:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do
+    c$ (4 : 2)
+    -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c$ (4 : 3)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+  com
+    int-completion-at-point$ (1 : 0)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 0)
+        at-point$ (1 : 7)
+      s$ (0 : 4)
+      $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc$ (4 : 0)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    evious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character -:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do
+    c-$ (4 : 2)
+    -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-$ (4 : 3)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+  c
+    -$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-$ (4 : 0)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    evious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character r:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do
+    c-r$ (4 : 2)
+    -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-r$ (4 : 3)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    r$ (4 : 5)
+  c
+    -r$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-r$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-r$ (4 : 0)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    evious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character e:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do
+    c-re$ (4 : 2)
+    -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-re$ (4 : 3)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    re$ (4 : 5)
+  c
+    -re$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-re$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-re$ (4 : 0)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    evious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character m:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do
+    c-rem$ (4 : 2)
+    -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-rem$ (4 : 3)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    rem$ (4 : 5)
+  c
+    -rem$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-rem$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-rem$ (4 : 0)
+    m$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    e
+      m$ (4 : 6)
+      vious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character o:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do
+    c-remo$ (4 : 2)
+    -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remo$ (4 : 3)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remo$ (4 : 5)
+  c
+    -remo$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+    o$ (4 : 8)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remo$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remo$ (4 : 0)
+    mo$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    e
+      mo$ (4 : 6)
+      vious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character v:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do
+    c-remov$ (4 : 2)
+    -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remov$ (4 : 3)
+    v$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remov$ (4 : 5)
+  c
+    -remov$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+    ov$ (4 : 8)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remov$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remov$ (4 : 0)
+    mov$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    e
+      mov$ (4 : 6)
+      vious-completion$ (2 : 1)
+  vious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character e:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do
+    c-remove$ (4 : 2)
+    -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove$ (4 : 3)
+    ve$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove$ (4 : 5)
+  c
+    -remove$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+    ove$ (4 : 8)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove$ (4 : 0)
+    move$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    e
+      move$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character -:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do
+    c-remove-$ (4 : 2)
+    -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-$ (4 : 3)
+    ve-$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-$ (4 : 5)
+  c
+    -remove-$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+    ove-$ (4 : 8)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-$ (4 : 0)
+    move-$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    e
+      move-$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character c:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do
+    c-remove-c$ (4 : 2)
+    -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-c$ (4 : 3)
+    ve-c$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-c$ (4 : 5)
+  c
+    -remove-c$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+    ove-c$ (4 : 8)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-c$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      c$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-c$ (4 : 0)
+    move-c$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    e
+      move-c$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-c$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character o:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do
+    c-remove-co$ (4 : 2)
+    -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-co$ (4 : 3)
+    ve-co$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-co$ (4 : 5)
+  c
+    -remove-co$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+    ove-co$ (4 : 8)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-co$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      co$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-co$ (4 : 0)
+    move-co$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    e
+      move-co$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-co$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character m:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do
+    c-remove-com$ (4 : 2)
+    -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-com$ (4 : 3)
+    ve-com$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    completion
+      -at-point$ (1 : 6)
+      s$ (0 : 3)
+      $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-com$ (4 : 5)
+  c
+    -remove-com$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+    ove-com$ (4 : 8)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-com$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      com$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-com$ (4 : 0)
+    move-com$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    e
+      move-com$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-com$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character m:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do
+    c-remove-comm$ (4 : 2)
+    -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      m$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-comm$ (4 : 3)
+    ve-comm$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      m$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-comm$ (4 : 5)
+  c
+    -remove-comm$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      m$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+    ove-comm$ (4 : 8)
+    m$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-comm$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      comm$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-comm$ (4 : 0)
+    move-comm$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    e
+      move-comm$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-comm$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character a:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do
+    c-remove-comma$ (4 : 2)
+    -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      ma$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-comma$ (4 : 3)
+    ve-comma$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      ma$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-comma$ (4 : 5)
+  c
+    -remove-comma$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      ma$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    ake-flex-pattern$ (3 : 17)
+    ove-comma$ (4 : 8)
+    ma$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-comma$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      comma$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-comma$ (4 : 0)
+    move-comma$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+  r
+    n$ (3 : 32)
+    e
+      move-comma$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-comma$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character n:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do
+    c-remove-comman$ (4 : 2)
+    -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      man$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-comman$ (4 : 3)
+    ve-comman$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      man$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-comman$ (4 : 5)
+  c
+    -remove-comman$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      man$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a
+      n$ (4 : 16)
+      ke-flex-pattern$ (3 : 17)
+    ove-comman$ (4 : 8)
+    man$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-comman$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      comman$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-comman$ (4 : 0)
+    move-comman$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+    n$ (4 : 17)
+  r
+    n$ (3 : 32)
+    e
+      move-comman$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-comman$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character d:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  do
+    c-remove-command$ (4 : 2)
+    -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      mand$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-command$ (4 : 3)
+    ve-command$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      mand$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-command$ (4 : 5)
+  c
+    -remove-command$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      mand$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a
+      nd$ (4 : 16)
+      ke-flex-pattern$ (3 : 17)
+    ove-command$ (4 : 8)
+    mand$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-command$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      command$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-command$ (4 : 0)
+    move-command$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+    d$ (4 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+    nd$ (4 : 17)
+  r
+    n$ (3 : 32)
+    e
+      move-command$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-command$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character -:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  d
+    -$ (4 : 19)
+    o
+      c-remove-command-$ (4 : 2)
+      -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      mand-$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-command-$ (4 : 3)
+    ve-command-$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      mand-$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-command-$ (4 : 5)
+  c
+    -remove-command-$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      mand-$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a
+      nd-$ (4 : 16)
+      ke-flex-pattern$ (3 : 17)
+    ove-command-$ (4 : 8)
+    mand-$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-command-$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      command-$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-command-$ (4 : 0)
+    move-command-$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+    d-$ (4 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+    nd-$ (4 : 17)
+  r
+    n$ (3 : 32)
+    e
+      move-command-$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-command-$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character c:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  d
+    -c$ (4 : 19)
+    o
+      c-remove-command-c$ (4 : 2)
+      -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      mand-c$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-command-c$ (4 : 3)
+    ve-command-c$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      mand-c$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-command-c$ (4 : 5)
+  c
+    -remove-command-c$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      mand-c$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a
+      nd-c$ (4 : 16)
+      ke-flex-pattern$ (3 : 17)
+    ove-command-c$ (4 : 8)
+    mand-c$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-command-c$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      command-c$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-command-c$ (4 : 0)
+    move-command-c$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+    d-c$ (4 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+    nd-c$ (4 : 17)
+  r
+    n$ (3 : 32)
+    e
+      move-command-c$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-command-c$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character o:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  d
+    -co$ (4 : 19)
+    o
+      c-remove-command-co$ (4 : 2)
+      -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      mand-co$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-command-co$ (4 : 3)
+    ve-command-co$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      mand-co$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-command-co$ (4 : 5)
+  c
+    -remove-command-co$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      mand-co$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a
+      nd-co$ (4 : 16)
+      ke-flex-pattern$ (3 : 17)
+    ove-command-co$ (4 : 8)
+    mand-co$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-command-co$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      command-co$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-command-co$ (4 : 0)
+    move-command-co$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+    d-co$ (4 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+    nd-co$ (4 : 17)
+  r
+    n$ (3 : 32)
+    e
+      move-command-co$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-command-co$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character m:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  d
+    -com$ (4 : 19)
+    o
+      c-remove-command-com$ (4 : 2)
+      -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      mand-com$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-command-com$ (4 : 3)
+    ve-command-com$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      mand-com$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-command-com$ (4 : 5)
+  c
+    -remove-command-com$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      mand-com$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a
+      nd-com$ (4 : 16)
+      ke-flex-pattern$ (3 : 17)
+    ove-command-com$ (4 : 8)
+    mand-com$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-command-com$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      command-com$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-command-com$ (4 : 0)
+    move-command-com$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+    d-com$ (4 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+    nd-com$ (4 : 17)
+  r
+    n$ (3 : 32)
+    e
+      move-command-com$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-command-com$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character p:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  d
+    -comp$ (4 : 19)
+    o
+      c-remove-command-comp$ (4 : 2)
+      -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      mand-comp$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-command-comp$ (4 : 3)
+    ve-command-comp$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      mand-comp$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-command-comp$ (4 : 5)
+  c
+    -remove-command-comp$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      mand-comp$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a
+      nd-comp$ (4 : 16)
+      ke-flex-pattern$ (3 : 17)
+    ove-command-comp$ (4 : 8)
+    mand-comp$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-command-comp$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      command-comp$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-command-comp$ (4 : 0)
+    move-command-comp$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+    d-comp$ (4 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+    nd-comp$ (4 : 17)
+  r
+    n$ (3 : 32)
+    e
+      move-command-comp$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-command-comp$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character l:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  d
+    -compl$ (4 : 19)
+    o
+      c-remove-command-compl$ (4 : 2)
+      -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      mand-compl$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-command-compl$ (4 : 3)
+    ve-command-compl$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      mand-compl$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-command-compl$ (4 : 5)
+  c
+    -remove-command-compl$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      mand-compl$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a
+      nd-compl$ (4 : 16)
+      ke-flex-pattern$ (3 : 17)
+    ove-command-compl$ (4 : 8)
+    mand-compl$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-command-compl$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      command-compl$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-command-compl$ (4 : 0)
+    move-command-compl$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+    d-compl$ (4 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+    nd-compl$ (4 : 17)
+  r
+    n$ (3 : 32)
+    e
+      move-command-compl$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-command-compl$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character e:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  d
+    -comple$ (4 : 19)
+    o
+      c-remove-command-comple$ (4 : 2)
+      -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      mand-comple$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-command-comple$ (4 : 3)
+    ve-command-comple$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      mand-comple$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-command-comple$ (4 : 5)
+  c
+    -remove-command-comple$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      mand-comple$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a
+      nd-comple$ (4 : 16)
+      ke-flex-pattern$ (3 : 17)
+    ove-command-comple$ (4 : 8)
+    mand-comple$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-command-comple$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      command-comple$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-command-comple$ (4 : 0)
+    move-command-comple$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+    d-comple$ (4 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+    nd-comple$ (4 : 17)
+  r
+    n$ (3 : 32)
+    e
+      move-command-comple$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-command-comple$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character t:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  d
+    -complet$ (4 : 19)
+    o
+      c-remove-command-complet$ (4 : 2)
+      -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      mand-complet$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-command-complet$ (4 : 3)
+    ve-command-complet$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      mand-complet$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-command-complet$ (4 : 5)
+  c
+    -remove-command-complet$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      mand-complet$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a
+      nd-complet$ (4 : 16)
+      ke-flex-pattern$ (3 : 17)
+    ove-command-complet$ (4 : 8)
+    mand-complet$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-command-complet$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      command-complet$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-command-complet$ (4 : 0)
+    move-command-complet$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+    d-complet$ (4 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+    nd-complet$ (4 : 17)
+  r
+    n$ (3 : 32)
+    e
+      move-command-complet$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-command-complet$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character i:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  d
+    -completi$ (4 : 19)
+    o
+      c-remove-command-completi$ (4 : 2)
+      -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      mand-completi$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-command-completi$ (4 : 3)
+    ve-command-completi$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      mand-completi$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-command-completi$ (4 : 5)
+  c
+    -remove-command-completi$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      mand-completi$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a
+      nd-completi$ (4 : 16)
+      ke-flex-pattern$ (3 : 17)
+    ove-command-completi$ (4 : 8)
+    mand-completi$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-command-completi$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      command-completi$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-command-completi$ (4 : 0)
+    move-command-completi$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+    d-completi$ (4 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+    nd-completi$ (4 : 17)
+  r
+    n$ (3 : 32)
+    e
+      move-command-completi$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-command-completi$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character o:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  d
+    -completio$ (4 : 19)
+    o
+      c-remove-command-completio$ (4 : 2)
+      -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      mand-completio$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-command-completio$ (4 : 3)
+    ve-command-completio$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      mand-completio$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-command-completio$ (4 : 5)
+  c
+    -remove-command-completio$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      mand-completio$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a
+      nd-completio$ (4 : 16)
+      ke-flex-pattern$ (3 : 17)
+    ove-command-completio$ (4 : 8)
+    mand-completio$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-command-completio$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      command-completio$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-command-completio$ (4 : 0)
+    move-command-completio$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+    d-completio$ (4 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+    nd-completio$ (4 : 17)
+  r
+    n$ (3 : 32)
+    e
+      move-command-completio$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-command-completio$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character n:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  d
+    -completion$ (4 : 19)
+    o
+      c-remove-command-completion$ (4 : 2)
+      -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      mand-completion$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-command-completion$ (4 : 3)
+    ve-command-completion$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      mand-completion$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-command-completion$ (4 : 5)
+  c
+    -remove-command-completion$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      mand-completion$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a
+      nd-completion$ (4 : 16)
+      ke-flex-pattern$ (3 : 17)
+    ove-command-completion$ (4 : 8)
+    mand-completion$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-command-completion$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      command-completion$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-command-completion$ (4 : 0)
+    move-command-completion$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+    d-completion$ (4 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+    nd-completion$ (4 : 17)
+  r
+    n$ (3 : 32)
+    e
+      move-command-completion$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-command-completion$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character s:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  d
+    -completions$ (4 : 19)
+    o
+      c-remove-command-completions$ (4 : 2)
+      -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      mand-completions$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-command-completions$ (4 : 3)
+    ve-command-completions$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      mand-completions$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-command-completions$ (4 : 5)
+  c
+    -remove-command-completions$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      mand-completions$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a
+      nd-completions$ (4 : 16)
+      ke-flex-pattern$ (3 : 17)
+    ove-command-completions$ (4 : 8)
+    mand-completions$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-command-completions$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      command-completions$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-command-completions$ (4 : 0)
+    move-command-completions$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+    d-completions$ (4 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+    nd-completions$ (4 : 17)
+  r
+    n$ (3 : 32)
+    e
+      move-command-completions$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-command-completions$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+After adding character -1:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  d
+    -completions$ (4 : 19)
+    o
+      c-remove-command-completions$ (4 : 2)
+      -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      mand-completions$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-command-completions$ (4 : 3)
+    ve-command-completions$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      mand-completions$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (4 : 20)$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-command-completions$ (4 : 5)
+  c
+    -remove-command-completions$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      mand-completions$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a
+      nd-completions$ (4 : 16)
+      ke-flex-pattern$ (3 : 17)
+    ove-command-completions$ (4 : 8)
+    mand-completions$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-command-completions$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      command-completions$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-command-completions$ (4 : 0)
+    move-command-completions$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+    d-completions$ (4 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+    nd-completions$ (4 : 17)
+  r
+    n$ (3 : 32)
+    e
+      move-command-completions$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-command-completions$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
+
+
+
+
diff --git a/suffix tree/lcs test ground.txt b/suffix tree/lcs test ground.txt
new file mode 100644
index 0000000..5762268
--- /dev/null
+++ b/suffix tree/lcs test ground.txt	
@@ -0,0 +1,180 @@
+
+longest commons substring of ("abab" "baba") is:
+(3
+ ((0 2 3
+     ((0 1 2)
+      (0 0 1)))
+  (0 3 4
+     ((0 2 3)
+      (0 1 2)))))
+
+Generalized suffix tree for: ido-completions, comint-completion-at-point, previous-completion, completion-flex--make-flex-pattern, eldoc-remove-command-completions:
+root
+  i
+    o
+      us-completion$ (2 : 4)
+      n
+        -
+          flex--make-flex-pattern$ (3 : 7)
+          at-point$ (1 : 14)
+        s$ (0 : 11)
+        $ (2 : 16)
+    do-completions$ (0 : 0)
+    nt
+      $ (1 : 23)
+      -completion-at-point$ (1 : 3)
+  d
+    -completions$ (4 : 19)
+    o
+      c-remove-command-completions$ (4 : 2)
+      -completions$ (0 : 1)
+  o
+    m
+      int-completion-at-point$ (1 : 1)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 1)
+          at-point$ (1 : 8)
+        s$ (0 : 5)
+        $ (2 : 10)
+      mand-completions$ (4 : 14)
+    -completions$ (0 : 2)
+    n
+      -
+        flex--make-flex-pattern$ (3 : 8)
+        at-point$ (1 : 15)
+      s$ (0 : 12)
+      $ (2 : 17)
+    int$ (1 : 22)
+    us-completion$ (2 : 5)
+    c-remove-command-completions$ (4 : 3)
+    ve-command-completions$ (4 : 9)
+  -
+    at-point$ (1 : 17)
+    com
+      mand-completions$ (4 : 12)
+      pletion
+        -at-point$ (1 : 6)
+        s$ (4 : 20)$ (0 : 3)
+        $ (2 : 8)
+    p
+      attern$ (3 : 26)
+      oint$ (1 : 20)
+    flex-
+      pattern$ (3 : 21)
+      -make-flex-pattern$ (3 : 10)
+    -make-flex-pattern$ (3 : 15)
+    make-flex-pattern$ (3 : 16)
+    remove-command-completions$ (4 : 5)
+  c
+    -remove-command-completions$ (4 : 4)
+    om
+      int-completion-at-point$ (1 : 0)
+      pletion
+        -
+          flex--make-flex-pattern$ (3 : 0)
+          at-point$ (1 : 7)
+        s$ (0 : 4)
+        $ (2 : 9)
+      mand-completions$ (4 : 13)
+  m
+    int-completion-at-point$ (1 : 2)
+    pletion
+      -
+        flex--make-flex-pattern$ (3 : 2)
+        at-point$ (1 : 9)
+      s$ (0 : 6)
+      $ (2 : 11)
+    a
+      nd-completions$ (4 : 16)
+      ke-flex-pattern$ (3 : 17)
+    ove-command-completions$ (4 : 8)
+    mand-completions$ (4 : 15)
+  p
+    oint$ (1 : 21)
+    letion
+      -
+        flex--make-flex-pattern$ (3 : 3)
+        at-point$ (1 : 10)
+      s$ (0 : 7)
+      $ (2 : 12)
+    revious-completion$ (2 : 0)
+    attern$ (3 : 27)
+  l
+    doc-remove-command-completions$ (4 : 1)
+    e
+      x-
+        pattern$ (3 : 23)
+        -make-flex-pattern$ (3 : 12)
+      tion
+        -
+          flex--make-flex-pattern$ (3 : 4)
+          at-point$ (1 : 11)
+        s$ (0 : 8)
+        $ (2 : 13)
+  e
+    vious-completion$ (2 : 2)
+    tion
+      -
+        flex--make-flex-pattern$ (3 : 5)
+        at-point$ (1 : 12)
+      s$ (0 : 9)
+      $ (2 : 14)
+    x-
+      pattern$ (3 : 24)
+      -make-flex-pattern$ (3 : 13)
+    -
+      command-completions$ (4 : 11)
+      flex-pattern$ (3 : 20)
+    rn$ (3 : 31)
+    ldoc-remove-command-completions$ (4 : 0)
+    move-command-completions$ (4 : 7)
+  t
+    -
+      point$ (1 : 19)
+      completion-at-point$ (1 : 5)
+    ion
+      -
+        flex--make-flex-pattern$ (3 : 6)
+        at-point$ (1 : 13)
+      s$ (0 : 10)
+      $ (2 : 15)
+    $ (1 : 25)
+    tern$ (3 : 29)
+    ern$ (3 : 30)
+  n
+    t
+      $ (1 : 24)
+      -completion-at-point$ (1 : 4)
+    s$ (0 : 13)
+    -
+      flex--make-flex-pattern$ (3 : 9)
+      at-point$ (1 : 16)
+    $ (3 : 33)$ (2 : 18)
+    d-completions$ (4 : 18)
+  s
+    -completion$ (2 : 7)
+    $ (0 : 14)
+  $ (2 : 19)$ (1 : 26)$ (0 : 15)
+  a
+    ke-flex-pattern$ (3 : 18)
+    t
+      tern$ (3 : 28)
+      -point$ (1 : 18)
+    nd-completions$ (4 : 17)
+  r
+    n$ (3 : 32)
+    e
+      move-command-completions$ (4 : 6)
+      vious-completion$ (2 : 1)
+  v
+    e-command-completions$ (4 : 10)
+    ious-completion$ (2 : 3)
+  us-completion$ (2 : 6)
+  flex-
+    pattern$ (3 : 22)
+    -make-flex-pattern$ (3 : 11)
+  x-
+    pattern$ (3 : 25)
+    -make-flex-pattern$ (3 : 14)
+  ke-flex-pattern$ (3 : 19)
diff --git a/suffix tree/suffiex-tree.txt b/suffix tree/suffiex-tree.txt
new file mode 100644
index 0000000..6eb4b5a
--- /dev/null
+++ b/suffix tree/suffiex-tree.txt	
@@ -0,0 +1,168 @@
+Title: Suffix Trees
+Author: JSDurand
+Created: 2020-01-03
+-------------------
+
+======================================================================
+           Motivation to implement this algorithm in Emacs
+======================================================================
+
+The reason I want to implement this algorithm is a problem I
+encountered in using the package "orderless", which provides a
+completion-style for the built-in completion system in Emacs. The
+problem is that the function "orderless-try-completion" does not
+handle completion aggressively in a way that conforms to the
+documentation of "try-completion". To be more precise, if there is
+only one match for the current text input, then this function returns
+that match (rather than comforming to the requirement in the
+documentation of "try-completion" by returning t, since it wants to
+highlight the matches by itself). This isn't a problem from the
+perspective of the user, and if there are no matches, then this
+correctly returns nil. But in any other cases, this function returns
+the original string, instead of the longest common substring, as a
+user might desire.
+
+Initially, this does not seem like a serious concern: the user could
+still select a completion from the "*Completions*" buffer once the
+list of candidates becomes small enough to easily manage. But as time
+goes by, this starts to frustrate me. For example, when there are only
+two candidates left, but one is a substring of another, then I cannot
+use the completion feature to quickly select (or "complete to") the
+shorter candidate, unless I type out the full candidate string, or to
+choose from the "*Completions*" buffer. For me this kind of defeats
+the main purpose of the built-in completion system.
+
+So I start wondering, is it possible to fix the problem by finding the
+longest common substring in all the matches? From a naïve first
+impression, this seems to be what the user might expect in most cases.
+
+
+
+======================================================================
+                       Choice of the algorithm
+======================================================================
+
+After some thinking and searching through the internet, I found that
+perhaps the most flexible and performant solution to the problem of
+finding the longest common substring(s) of multiple strings is to
+build a "generalized suffix tree" of them, and then use a tree
+traversal to find the longest common substring(s). Well, this is all
+fun and great. The only problem is that it is difficult to build a
+suffix tree (or a generalized one).
+
+So I decide to implement the seemingly fastest algorithm to construct
+a suffix tree of strings and hope that this can not only solve my
+problem but also help others out in some other problems in the future.
+
+
+
+======================================================================
+                             Definitions
+======================================================================
+
+I describe the basic definition of a suffix tree briefly below.
+
+In this document a string is a sequence of alphabets. In particular,
+for the case of Emacs, these alphabets are just numbers. We begin by
+considering a string S of length n. A suffix of S is a substring of S
+of the form S[i..n] for some i from 1 to n. And we also say the empty
+string is a suffix of S. A suffix tree of S is defined as a rooted
+tree T (so it has a node called "root" that is the ancestor of every
+other node) whose every edge has a label which is a substring of S
+that satisfies the following conditions:
+
+- Starting from the root of T, walking down any path to a leaf, and
+  concatenating the labels along the way, then we will get a suffix of
+  S. And every suffix of S is obtained in this way as well.
+- Every node has at least two out-going edges.
+- For every node, every two out-going edges cannot have labels that
+  start with the same letter. (So two edges with labels both starting
+  with 'a' cannot emanate from the same node.)
+
+Intuitively speaking, this is to list all suffixes of S as an edge
+from the root to a leaf, and then "merge" these suffixes so that any
+common prefix among some of them is in only one edge.
+
+As a concrete example, the suffix tree for "hah$" is given as follows.
+I am using the library "hierarchy.el" to visualize trees.
+                                   
+root
+  h
+    $
+    ah$
+  ah$
+  $
+
+
+
+
+======================================================================
+                  Naive description of the algorithm
+======================================================================
+
+Below is a breif description of the algorithm. For a description in
+"plain English", see the accepted answer to this Stack Overflow post.
+
+https://stackoverflow.com/questions/9452701/
+
+Fonr a more detailed survey on the principle behind the algorithm and
+on many other related topics, see the book "Algorithms on Strings,
+Trees, and Sequences: Computer Science and Computational Biology" by
+Dan Gusfield, or if you prefer reading the original paper, then the
+original paper by Ukkonen is as follows.
+
+https://link.springer.com/article/10.1007/BF01206331
+
+(I am fortunate enough to be able to access the article. If you want
+to read that PDF and don't want to pay Springer, let me know and I can
+send you the file.)
+
+Given a string S of length n, we will first append a symbol that is
+not present anywhere in S, in order to ensure that no suffix of S is
+also the prefix of another suffix of S; otherwise S cannot have a
+suffix tree. I refer to this terminating symbol as $.
+
+Also an edge of the tree is not labelled explicitly by strings. To do
+so would violate already the linear time constraint. Instead, we
+represent each edge with a pair of integers, interpreted as the
+indices of the starting and the ending positions of the associated
+substring in T.
+
+The algorithm has n + 1 iterations. We start with the following
+variables:
+
+- A root node.
+- An active node.
+- An active edge.
+- The length of the active edge.
+- "remainder" with value 0.
+
+Then we want to add n + 1 symbols to the tree iteratively.
+
+In the i-th iteration we look to add the substring
+S[(i-remainder+1)..i] of S. In Emacs Lisp this is expressed as
+(substring S (- i remainder -1) (1+ i)).
+
+And in each iteration we do the following things (the description that
+follows is not rigorous; see the sources mentioned above for more
+detailed and rigorous expositions):
+
+- Check if the "active point" specified by the triple
+  (active node, active edge, active edge length)
+  has an edge going out whose first letter of the label matches the
+  i-th character of S.
+- If it matches, then that means we don't have to add anything to
+  the tree: we just update the specifications of the active point to
+  point to the right place.
+- Otherwise, we add the i-th charcter of S as a new leaf of the
+  active point. This may involve splitting an edge.
+- In both of the sub-cases, if there is a node that we created in
+  the last round, then we add a "suffix link" that points to the
+  current node. This suffix link is the main reason this algorithm
+  can run in linear time.
+- After updating the active point, we still need to make sure that our
+  specification of the active point is valid. We do this by examining
+  if the active length is >= the length of the active edge. If so,
+  then we set the active point to follow the path.
+
+Then we repeat until S(i) equals the terminating symbol.
diff --git a/suffix tree/suffix tree test ground.txt b/suffix tree/suffix tree test ground.txt
new file mode 100644
index 0000000..e566bf7
--- /dev/null
+++ b/suffix tree/suffix tree test ground.txt	
@@ -0,0 +1,145 @@
+suffix tree for "aabbccba$"
+root
+  a
+    bbccba$
+    abbccba$
+    $
+  b
+    ccba$
+    bccba$
+    a$
+  c
+    ba$
+    cba$
+  $
+
+
+
+suffix tree for "durand-bongo-play-previous-or-last"
+root
+  d
+    -bongo-play-previous-or-last
+    urand-bongo-play-previous-or-last
+  u
+    s-or-last
+    rand-bongo-play-previous-or-last
+  r
+    evious-or-last
+    and-bongo-play-previous-or-last
+    -last
+  a
+    y-previous-or-last
+    nd-bongo-play-previous-or-last
+    st
+  n
+    go-play-previous-or-last
+    d-bongo-play-previous-or-last
+  -
+    p
+      revious-or-last
+      lay-previous-or-last
+    bongo-play-previous-or-last
+    or-last
+    last
+  bongo-play-previous-or-last
+  o
+    -play-previous-or-last
+    ngo-play-previous-or-last
+    us-or-last
+    r-last
+  go-play-previous-or-last
+  p
+    revious-or-last
+    lay-previous-or-last
+  la
+    st
+    y-previous-or-last
+  y-previous-or-last
+  evious-or-last
+  vious-or-last
+  ious-or-last
+  s
+    t
+    -or-last
+  t
+
+
+
+suffix tree for strings: aaaaa$
+root
+  a
+    $
+    a
+      $
+      a
+        $
+        a
+          $
+          a$
+  $
+
+
+
+suffix tree for strings: aaaaabbb$
+root
+  a
+    bbb$
+    a
+      bbb$
+      a
+        bbb$
+        a
+          bbb$
+          abbb$
+  b
+    $
+    b
+      $
+      b$
+  $
+
+
+
+Generalized suffix tree for: abab, baba:
+root
+  a
+    $ (1 : 3)
+    b
+      $ (0 : 2)
+      a
+        $ (1 : 1)
+        b$ (0 : 0)
+  b
+    $ (0 : 3)
+    a
+      $ (1 : 2)
+      b
+        a$ (1 : 0)
+        $ (0 : 1)
+  $ (1 : 4)$ (0 : 4)
+
+
+
+Generalized suffix tree for: abab, baba, cbabd:
+root
+  a
+    $ (1 : 3)
+    b
+      $ (0 : 2)
+      a
+        $ (1 : 1)
+        b$ (0 : 0)
+      d$ (2 : 2)
+  b
+    $ (0 : 3)
+    a
+      $ (1 : 2)
+      b
+        a$ (1 : 0)
+        $ (0 : 1)
+        d$ (2 : 1)
+    d$ (2 : 3)
+  $ (2 : 5)$ (1 : 4)$ (0 : 4)
+  cbabd$ (2 : 0)
+  d$ (2 : 4)
+
diff --git a/suffix tree/suffix-tree files.zip b/suffix tree/suffix-tree files.zip
new file mode 100644
index 0000000..946352b
Binary files /dev/null and b/suffix tree/suffix-tree files.zip differ
diff --git a/suffix tree/suffix-tree.el b/suffix tree/suffix-tree.el
new file mode 100644
index 0000000..0d929d0
--- /dev/null
+++ b/suffix tree/suffix-tree.el	
@@ -0,0 +1,397 @@
+;;; suffiex-tree.el --- Ukkonen algorithm for building a suffix tree -*- lexical-binding: t; -*-
+
+;;; Author: Durand
+;;; Version: 0.0.1
+
+;;; Commentary:
+
+;; Our node is represented as a list of the following elements:
+
+;; start      , which is the starting index of the edge going from its parent
+;;              node to this node
+;; end        , the index of the end of the above edge
+;; suffix-link, the index of the node this node's suffix-link points to
+;; children   , a hash-table of pairs of integers and indices of its
+;;              children
+
+;; To compute the length of the edge going into NODE we use:
+;; (- (min end (1+ position)) start)
+;; which is actually how far the position is on that edge,
+;; if it is on that edge.
+
+;;; Code:
+
+;;;###autoload
+(defun st-min (&rest args)
+  "Return the minimum among ARGS.
+If an argument is 'infty, then it is considered greater than
+every number."
+  (apply #'min (delq nil
+                     (mapcar
+                      (lambda (arg)
+                        (cond
+                         ((number-or-marker-p arg) arg)
+                         ((eq arg 'infty) nil)))
+                      args))))
+
+;;;###autoload
+(defun st-edge-length (node position)
+  "Return the length of the edge into NODE.
+See the comment above this function for the reason
+POSITION is here."
+  (- (st-min (car (cdr node)) (1+ position))
+     (car node)))
+
+;;;###autoload
+(defun st-new-node (tree last-added start &optional end)
+  "Make a new node with START and END as the coming edge.
+Then add the new node to TREE.
+LAST-ADDED is the number of elements already in the TREE."
+  (let* ((end (or end 'infty) ;; 'infty represents the index of a leaf
+              )
+         (suffix-link 0) ;; The suffix link is initially 0
+         (new-node
+          (list start end
+                suffix-link
+                (make-hash-table))))
+    (puthash (1+ last-added) new-node tree)
+    (1+ last-added)))
+
+;;;###autoload
+(defun st-add-suffix-link (tree need-sl node)
+  "If NEED-SL is positive, then add the suffix link.
+In particular, the node corresponding to NEED-SL in TREE
+gets a suffix link pointing to NODE.
+
+This always returns NODE."
+  (cond
+   ((and (> need-sl 1) (/= need-sl node))
+    (setcar (cdr (cdr (gethash need-sl tree))) node)))
+  node)
+
+;;;###autoload
+(defun st-canonize (tree node position active-edge-index active-length active-node)
+  "Walk down TREE to find the correct active point."
+  (let ((node-edge-length (st-edge-length (gethash node tree) position)))
+    (cond
+     ((>= active-length node-edge-length)
+      (list t
+            (+ active-edge-index
+               node-edge-length)
+            (- active-length
+               node-edge-length)
+            node))
+     (t
+      (list nil
+            active-edge-index
+            active-length
+            active-node)))))
+
+;;;###autoload
+(defun st-extend-tree (tree last-added position remain
+                       active-node active-edge-index
+                       active-length character str)
+  "Extend a tree by CHARACTER.
+The return value is
+(tree last-added remain active-node
+ active-edge-index active-length)"
+  (let* ((need-sl 0)
+         (remain (1+ remain))
+         continue-p breakp)
+    (while (and (not breakp) (> remain 0))
+      (setq continue-p nil breakp nil)
+      (cond
+       ((= active-length 0)
+        (setq active-edge-index position)))
+      (let* ((actual-node (gethash active-node tree))
+             (nxt (cond
+                   (actual-node
+                    (gethash (aref str active-edge-index)
+                             (cadr (cdr (cdr actual-node))))))))
+        (cond
+         ((null nxt)
+          (let ((leaf (st-new-node tree last-added position)))
+            (setq last-added leaf)
+            (puthash (aref str active-edge-index)
+                     leaf
+                     (cadr (cdr (cdr (gethash active-node tree)))))
+            (setq need-sl (st-add-suffix-link tree need-sl active-node)))
+            ;; rule 2
+            )
+         (t
+          (let* ((result (st-canonize
+                          tree nxt position active-edge-index
+                          active-length active-node)))
+            (cond
+             ((car result)
+              ;; observation 2
+              (setq active-edge-index (cadr result))
+              (setq active-length (caddr result))
+              (setq active-node (cadr (cddr result)))
+              (setq continue-p t))
+             (t
+              (cond
+               ((eq (aref str (+ active-length
+                                 (car (gethash nxt tree))))
+                    character)
+                ;; observation 1
+                (setq active-length (1+ active-length))
+                (setq need-sl (st-add-suffix-link tree need-sl active-node))
+                (setq breakp t)))
+              (cond
+               (breakp)
+               (t ;; splitting
+                (let ((split (st-new-node
+                              tree last-added (car (gethash nxt tree))
+                              (+ (car (gethash nxt tree)) active-length))))
+                  (setq last-added split)
+                  (puthash
+                   (aref str active-edge-index)
+                   split (cadr (cdr (cdr (gethash active-node tree)))))
+                  (let ((leaf (st-new-node tree last-added position)))
+                    (setq last-added leaf)
+                    (puthash character leaf
+                             (cadddr (gethash split tree)))
+                    (setcar (gethash nxt tree)
+                            (+ (car (gethash nxt tree))
+                               active-length))
+                    (puthash (aref str (car (gethash nxt tree))) nxt
+                             (cadddr (gethash split tree)))
+                    ;; rule 2
+                    (setq need-sl
+                          (st-add-suffix-link tree need-sl split)))))))))))
+            (cond
+             ((or continue-p breakp))
+             (t
+              (setq remain (1- remain))
+              (cond
+               ((and (eq active-node 1) ; root
+                     (> active-length 0))
+                (setq active-length (1- active-length))
+                (setq active-edge-index
+                      (1+ (- position remain))))
+               (t
+                (setq active-node
+                      (let ((slink (caddr (gethash active-node tree))))
+                        (cond
+                         ((> slink 1) slink)
+                                        ; or root
+                         (t 1))))))))))
+    (list tree last-added remain active-node
+          active-edge-index active-length)))
+
+;;;###autoload
+(defun st-build-for-str (str)
+  "Build the suffix tree for STR."
+  (let* ((position 0)
+         (character (ignore-error 'error (aref str position)))
+         (tree (make-hash-table))
+         (last-added 0)
+         (remain 0)
+         (active-node (st-new-node tree last-added -1 -1))
+         (active-edge-index 0)
+         (active-length 0)
+         result)
+    (setq last-added active-node)
+    (while character
+      (setq result (st-extend-tree tree last-added position remain
+                                   active-node active-edge-index
+                                   active-length character str))
+      (setq tree (pop result))
+      (setq last-added (pop result))
+      (setq remain (pop result))
+      (setq active-node (pop result))
+      (setq active-edge-index (pop result))
+      (setq active-length (pop result))
+      (setq position (1+ position))
+      (setq character (ignore-error 'error (aref str position))))
+    tree))
+
+;;; Some printing functions
+
+(require 'hierarchy)
+
+;;;###autoload
+(defun st-print-str (str)
+  "Print generalized string"
+  (mapc (lambda (char)
+          (cond ((characterp char) (insert char))
+                (t (insert ", "))))
+        str))
+
+;;;###autoload
+(defun st-print-tree-for-str (str)
+  "Print the suffix tree for STR."
+  (let* ((symbol (make-symbol "test")))
+    (set symbol (st-build-for-str str))
+    (insert "suffix tree for strings: ")
+    (st-print-str str)
+    (insert "\n")
+    (st-print-tree (symbol-value symbol) str)))
+
+;;;###autoload
+(defun st-reduce-index (node strs)
+  "Reduce the second element of the NODE."
+  (let* ((lengths (mapcar #'length strs))
+         (start (car node))
+         (end (cadr node))
+         (first-greater-than-start
+          (let ((sum -1) (index 0) done result)
+            (while (and (not done) (< index (length strs)))
+              (cond
+               ((<= (+ sum (nth index lengths)) start)
+                (setq index (1+ index))
+                (setq sum (+ sum (nth index lengths))))
+               (t (setq result (+ sum (nth index lengths)))
+                  (setq done t))))
+            (cond ((null result) (setq result (1- (apply #'+ lengths)))))
+            result)))
+    (st-min end first-greater-than-start))
+  ;; (let* ((start (car node))
+  ;;        (end (cadr node))
+  ;;        (index start)
+  ;;        result stop)
+  ;;   (while (and (not stop) (or (eq end 'infty) (<= index end)))
+  ;;     (cond
+  ;;      ((and (< index (length str)) (characterp (aref str index))) (setq index (1+ index)))
+  ;;      (t (setq stop t)
+  ;;         (setq result index))))
+  ;;   (cond ((and (numberp end) (= index (1+ end))) (setq result end)))
+  ;;   (cond ((<= result start) (setq result 'end)))
+  ;;   result)
+  )
+
+;; ;;;###autoload
+;; (defun st-build-generalized-tree (strs)
+;;   (let* ((copy strs)
+;;          (long-str
+;;           (let ((index 1) result)
+;;             (while (consp copy)
+;;               (setq result (vconcat result
+;;                                     (car copy)
+;;                                     (vector (- index))))
+;;               (setq index (1+ index))
+;;               (setq copy (cdr copy)))
+;;             result))
+;;          (tree (make-symbol "tree")))
+;;     (set tree (st-build-for-str long-str))))
+
+;;;###autoload
+(defun st-print-tree (tree str)
+  "Print TREE with the aid of STR."
+  (let* ((symbol-tree (make-symbol "test-tree")))
+    (set symbol-tree (hierarchy-new))
+    (maphash
+     (lambda (key value)
+       (hierarchy-add-tree
+        (symbol-value symbol-tree) key nil
+        (lambda (item)
+          (hash-table-values (cadr (cdr (cdr (gethash item tree))))))))
+     tree)
+    (hierarchy-print (symbol-value symbol-tree)
+                     (lambda (item)
+                       (cond ((= item 1) "root")
+                             (t (let* ((node (gethash item tree))
+                                       ;; (reduced (st-reduce-index node str))
+                                       )
+                                  (substring str (car node)
+                                             (cond ((integerp (cadr node)) (cadr node))))
+                                  ;; (cond ((eq reduced 'end) "$")
+                                  ;;       (t (apply #'string
+                                  ;;                 (append
+                                  ;;                  (seq-subseq str (car node)
+                                  ;;                              reduced
+                                  ;;                              ;; (cond ((integerp (cadr node)) (cadr node)))
+                                  ;;                              )
+                                  ;;                  nil))))
+                                  
+                                  ;; (format "%d): (%S, %S): (%d): \"%s\""
+                                  ;;         item
+                                  ;;         (car node)
+                                  ;;         (cadr node)
+                                  ;;         (caddr node)
+                                  ;;         (substring str (car node) (cond ((integerp (cadr node)) (cadr node))))
+                                  ;;         )
+                                  )))))))
+
+(provide 'suffix-tree)
+;;; suffiex-tree.el ends here
+
+;;; archive
+
+;; ;;;###autoload
+;; (defvar st-root nil
+;;   "The root of the suffix tree.")
+
+;; ;;;###autoload
+;; (defvar st-position nil
+;;   "The current position in the string.")
+
+;; ;;;###autoload
+;; (defvar st-wait-for-link nil
+;;   "The node that is waiting to have a suffix link.")
+
+;; ;;;###autoload
+;; (defvar st-remain nil
+;;   "The number of remaining suffixes to insert.")
+
+;; ;;;###autoload
+;; (defvar st-active-node nil
+;;   "Where to insert a new suffix.")
+
+;; ;;;###autoload
+;; (defvar st-active-edge-index nil
+;;   "The index of the active edge.")
+
+;; ;;;###autoload
+;; (defvar st-active-length nil
+;;   "How far down is the active point down the active edge.")
+
+;; (insert (format "after character %c, the tree becomes\n" character))
+;; (insert (format "string is %s\n" (substring str 0 (1+ position))))
+;; (insert (format "active-node: %d\n" active-node))
+;; (insert (format "active-edge: %c\n" (aref str active-edge-index)))
+;; (insert (format "active-length: %d\n" active-length))
+;; (cond ((eq last-added 11)
+;;        (insert (format "slink: %d\n" (caddr (gethash active-node tree))))
+;;        (insert (format "con: %S" continue-p))
+;;        (insert (format "breakp: %S\n" breakp))))
+;; (st-print-tree tree (substring str 0 (1+ position)))
+;; (insert "\n\n")
+
+
+;; ;;;###autoload
+;; (defvar st-output-buffer-name "*suffix-tree*"
+;;   "The name of the buffer that contains the output.")
+
+;; ;;;###autoload
+;; (defun st-print-tree (tree node str prefix)
+;;   "Print TREE in the dedicated output buffer starting at NODE.
+;; PREFIX is used to recursively call this function.
+
+;; We need STR since the information we stored in the tree
+;; only contains the index into STR,
+;; for the sake of optimizations."
+;;   (with-temp-buffer-window st-output-buffer-name '((display-buffer-at-bottom)) nil
+;;     (st-print-tree-internal tree node str prefix)))
+
+;; ;;;###autoload
+;; (defun st-print-tree-internal (tree node str prefix)
+;;   "The function that really prints out the data."
+;;   (let* ((node-data (gethash node tree))
+;;          (start (car node-data))
+;;          (end (cadr node-data))
+;;          (edges (cdddr node-data))
+;;          (node-num (format "(%d)" node))
+;;          (node-label (format "%s-%s-%s"
+;;                              prefix node-num
+;;                              (substring str start end))))
+;;     (prin1 node-label)
+;;     ;; print the first edge
+;;     (let* ((prefix-base (concat
+;;                          prefix
+;;                          (make-string (length node-label) 32)))
+;;            ;; TODO
+;;            ))))
+
+
-- 
cgit v1.2.3-18-g5258