   ;; 1.3ms (fast-map)
   ;; 1.3ms (dissoc wild & catch-all from children)
   ;; 1.3ms (reified protocols)
+  ;; 0.8ms (flattened matching)
   (cc/quick-bench (dotimes [_ 1000] (lookup tree-new "/v1/orgs/1/topics" {}))))

    (reify
      Node
      (lookup [this path params]
        #_(println "s=>" segment "..." path)
        (if (.equals segment path)
          params
          (let [p (if (>= (count path) size) (subs path 0 size))]
            (if (.equals segment p)
              (let [childs [(impl/fast-get children' (char-key path size)) ?wild ?catch]
                    path (subs path size)]
                (some #(lookup % path params) childs))))))
      (get-segment [this]
        segment)
      (update-segment [this subs lcs]

    (reify
      Node
      (lookup [this path params]
        (let [i (.indexOf ^String path "/")]
          (if (pos? i)
            (let [value (subs path 0 i)]
              (let [child (impl/fast-get children' (char-key path (inc i)))
                    path' (subs path (inc i))
                    params (assoc params param value)]
                (or (lookup child path' params)
                    (lookup ?wild path' params)
                    (lookup ?catch path' params))))
            (assoc params param path))))
      (get-segment [this]
        segment)
