Repository: Textualize/textual

Issue:
Markdown Widget crashes on close tag in heading
The Markdown Widget crashes if there is a closing rich tag in a heading. I.e., if there is a string like `[/some_text]` in a markdown heading. This can become problematic when using Markdown extensions to WikiLinks and having something linke `[[/test.md]]` in a heading.

Note in regular text this issue does not seem to be present. I have only seen this for headings.

**Example**

Running this
```
from textual.app import App, ComposeResult
from textual.widgets import MarkdownViewer

EXAMPLE_MARKDOWN = """\
# Markdown [/test]
"""


class MarkdownExampleApp(App):
    def compose(self) -> ComposeResult:
        yield MarkdownViewer(EXAMPLE_MARKDOWN, show_table_of_contents=True)


if __name__ == "__main__":
    app = MarkdownExampleApp()
    app.run()
```
will produce this error:
```
python3 markdown.py
╭──────────────────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ─────────────────────────────────────────────────────────────────────────────────────────────╮
│ /usr/local/lib/python3.11/site-packages/textual/widgets/_markdown.py:1056 in _on_markdown_table_of_contents_updated                                                                                                        │
│                                                                                                                                                                                                                            │
│   1053 │   ) -> None:                                                                           ╭────────────── locals ──────────────╮                                                                                     │
│   1054 │   │   self.query_one(                                                                  │ message = TableOfContentsUpdated() │                                                                                     │
│   1055 │   │   │   MarkdownTableOfContents                                                      │    self = MarkdownViewer()         │                                                                                     │
│ ❱ 1056 │   │   ).table_of_contents = message.table_of_contents                                  ╰────────────────────────────────────╯                                                                                     │
│   1057 │   │   message.stop()                                                                                                                                                                                              │
│   1058 │                                                                                                                                                                                                                   │
│   1059 │   def _on_markdown_table_of_contents_selected(                                                                                                                                                                    │
│                                                                                                                                                                                                                            │
│ /usr/local/lib/python3.11/site-packages/textual/widgets/_markdown.py:920 in watch_table_of_contents                                                                                                                        │
│                                                                                                                                                                                                                            │
│    917 │                                                                                        ╭──────────────────────── locals ─────────────────────────╮                                                                │
│    918 │   def watch_table_of_contents(self, table_of_contents: TableOfContentsType) -> None:   │              self = MarkdownTableOfContents()           │                                                                │
│    919 │   │   """Triggered when the table of contents changes."""                              │ table_of_contents = [(1, 'Markdown [/test]', 'block1')] │                                                                │
│ ❱  920 │   │   self.set_table_of_contents(table_of_contents)                                    ╰─────────────────────────────────────────────────────────╯                                                                │
│    921 │                                                                                                                                                                                                                   │
│    922 │   def set_table_of_contents(self, table_of_contents: TableOfContentsType) -> None:                                                                                                                                │
│    923 │   │   """Set the table of contents.                                                                                                                                                                               │
│                                                                                                                                                                                                                            │
│ /usr/local/lib/python3.11/site-packages/textual/widgets/_markdown.py:940 in set_table_of_contents                                                                                                                          │
│                                                                                                                                                                                                                            │
│    937 │   │   │   │   │   node.allow_expand = True                                             ╭──────────────────────── locals ─────────────────────────╮                                                                │
│    938 │   │   │   │   else:                                                                    │          block_id = 'block1'                            │                                                                │
│    939 │   │   │   │   │   node = node.add(NUMERALS[level], expand=True)                        │             level = 1                                   │                                                                │
│ ❱  940 │   │   │   node.add_leaf(f"[dim]{NUMERALS[level]}[/] {name}", {"block_id": block_id})   │              name = 'Markdown [/test]'                  │                                                                │
│    941 │                                                                                        │              node = TreeNode('TOC', None)               │                                                                │
│    942 │   async def _on_tree_node_selected(self, message: Tree.NodeSelected) -> None:          │              root = TreeNode('TOC', None)               │                                                                │
│    943 │   │   node_data = message.node.data                                                    │              self = MarkdownTableOfContents()           │                                                                │
│                                                                                                 │ table_of_contents = [(1, 'Markdown [/test]', 'block1')] │                                                                │
│                                                                                                 │              tree = Tree()                              │                                                                │
│                                                                                                 ╰─────────────────────────────────────────────────────────╯                                                                │
│                                                                                                                                                                                                                            │
│ /usr/local/lib/python3.11/site-packages/textual/widgets/_tree.py:352 in add_leaf                                                                                                                                           │
│                                                                                                                                                                                                                            │
│    349 │   │   Returns:                                                                         ╭─────────────── locals ───────────────╮                                                                                   │
│    350 │   │   │   New node.                                                                    │  data = {'block_id': 'block1'}       │                                                                                   │
│    351 │   │   """                                                                              │ label = '[dim]Ⅰ[/] Markdown [/test]' │                                                                                   │
│ ❱  352 │   │   node = self.add(label, data, expand=False, allow_expand=False)                   │  self = TreeNode('TOC', None)        │                                                                                   │
│    353 │   │   return node                                                                      ╰──────────────────────────────────────╯                                                                                   │
│    354 │                                                                                                                                                                                                                   │
│    355 │   class RemoveRootError(Exception):                                                                                                                                                                               │
│                                                                                                                                                                                                                            │
│ /usr/local/lib/python3.11/site-packages/textual/widgets/_tree.py:331 in add                                                                                                                                                │
│                                                                                                                                                                                                                            │
│    328 │   │   Returns:                                                                         ╭────────────────── locals ───────────────────╮                                                                            │
│    329 │   │   │   A new Tree node                                                              │ allow_expand = False                        │                                                                            │
│    330 │   │   """                                                                              │         data = {'block_id': 'block1'}       │                                                                            │
│ ❱  331 │   │   text_label = self._tree.process_label(label)                                     │       expand = False                        │                                                                            │
│    332 │   │   node = self._tree._add_node(self, text_label, data)                              │        label = '[dim]Ⅰ[/] Markdown [/test]' │                                                                            │
│    333 │   │   node._expanded = expand                                                          │         self = TreeNode('TOC', None)        │                                                                            │
│    334 │   │   node._allow_expand = allow_expand                                                ╰─────────────────────────────────────────────╯                                                                            │
│                                                                                                                                                                                                                            │
│ /usr/local/lib/python3.11/site-packages/textual/widgets/_tree.py:635 in process_label                                                                                                                                      │
│                                                                                                                                                                                                                            │
│    632 │   │   │   A Rich Text object.                                                          ╭─────────────── locals ───────────────╮                                                                                   │
│    633 │   │   """                                                                              │ label = '[dim]Ⅰ[/] Markdown [/test]' │                                                                                   │
│    634 │   │   if isinstance(label, str):                                                       │  self = Tree()                       │                                                                                   │
│ ❱  635 │   │   │   text_label = Text.from_markup(label)                                         ╰──────────────────────────────────────╯                                                                                   │
│    636 │   │   else:                                                                                                                                                                                                       │
│    637 │   │   │   text_label = label                                                                                                                                                                                      │
│    638 │   │   first_line = text_label.split()[0]                                                                                                                                                                          │
│                                                                                                                                                                                                                            │
│ /usr/local/lib/python3.11/site-packages/rich/text.py:286 in from_markup                                                                                                                                                    │
│                                                                                                                                                                                                                            │
│ /usr/local/lib/python3.11/site-packages/rich/markup.py:167 in render                                                                                                                                                       │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
MarkupError: closing tag '[/test]' at position 19 doesn't match any open tag```




Discussion:
> Note in regular text this issue does not seem to be present. I have only seen this for headings.

Just to clarify, it looks like it isn't the `Markdown` widget itself that's crashing, but rather the `Tree` used for the table of contents, which is why this issues only occurs with headings.
Hey @GuutBoy thanks for the issue and @TomJGooding for the headstart on this.

@GuutBoy could you help me understand better how/why something like `[[/test.md]]` might end up at the end of a markdown heading?
And what would be your expected output?
Would the `[[/test.md]]` just disappear from the output markdown document?
I also don't think I followed your mention of wikilinks/markdown extensions.
Maybe the focus on wikilinks is not so important. The point is that any string like `[/test]` (i.e., something than resembles a unclosed Rich tag) in a Markdown heading will cause Markdown widget to crash. It does not matter if this string is in the beginning, end or anywhere else in the heading. (In fact as TomJGooding points out it seems to be the Tree widget that is really causing the issue).

I just mentioned wikilinks because this is how I noticed the issue because wikilinks are likely to trigger this issue. The use of wikilinks is a common extension to Markdown. WikiLinks is a different way to make links than the regular syntax for links in Markdown. A wikilink surrounds the link path in double brackets like so `[[link]]`. If the path of you link starts with a `/` you trigger this issue (something that would be common if you are linking to local files).  Ideally, wikilinks would be treated as regular Markdown links. But at least it would be good widgets did not just crash on these types of strings

Why would someone have wikilinks in a heading? Well, why not?   

Btw. I noticed that if the I make a regular markdown link with the text starting in a `/` the issue is not triggered. Like so `[/test](/test.md)`.



Resolving patch:
diff --git a/src/textual/widgets/_markdown.py b/src/textual/widgets/_markdown.py
--- a/src/textual/widgets/_markdown.py
+++ b/src/textual/widgets/_markdown.py
@@ -937,7 +937,8 @@ def set_table_of_contents(self, table_of_contents: TableOfContentsType) -> None:
                     node.allow_expand = True
                 else:
                     node = node.add(NUMERALS[level], expand=True)
-            node.add_leaf(f"[dim]{NUMERALS[level]}[/] {name}", {"block_id": block_id})
+            node_label = Text.assemble((f"{NUMERALS[level]} ", "dim"), name)
+            node.add_leaf(node_label, {"block_id": block_id})
 
     async def _on_tree_node_selected(self, message: Tree.NodeSelected) -> None:
         node_data = message.node.data


Test patch:
diff --git a/tests/snapshot_tests/__snapshots__/test_snapshots.ambr b/tests/snapshot_tests/__snapshots__/test_snapshots.ambr
--- a/tests/snapshot_tests/__snapshots__/test_snapshots.ambr
+++ b/tests/snapshot_tests/__snapshots__/test_snapshots.ambr
@@ -21069,145 +21069,145 @@
           font-weight: 700;
       }
   
-      .terminal-1944007215-matrix {
+      .terminal-3017552431-matrix {
           font-family: Fira Code, monospace;
           font-size: 20px;
           line-height: 24.4px;
           font-variant-east-asian: full-width;
       }
   
-      .terminal-1944007215-title {
+      .terminal-3017552431-title {
           font-size: 18px;
           font-weight: bold;
           font-family: arial;
       }
   
-      .terminal-1944007215-r1 { fill: #c5c8c6 }
-  .terminal-1944007215-r2 { fill: #24292f }
-  .terminal-1944007215-r3 { fill: #121212 }
-  .terminal-1944007215-r4 { fill: #e1e1e1 }
-  .terminal-1944007215-r5 { fill: #e2e3e3 }
-  .terminal-1944007215-r6 { fill: #96989b }
-  .terminal-1944007215-r7 { fill: #0053aa }
-  .terminal-1944007215-r8 { fill: #008139 }
-  .terminal-1944007215-r9 { fill: #dde8f3;font-weight: bold }
-  .terminal-1944007215-r10 { fill: #939393;font-weight: bold }
-  .terminal-1944007215-r11 { fill: #14191f }
-  .terminal-1944007215-r12 { fill: #e2e3e3;font-weight: bold }
-  .terminal-1944007215-r13 { fill: #4ebf71;font-weight: bold }
-  .terminal-1944007215-r14 { fill: #e1e1e1;font-style: italic; }
-  .terminal-1944007215-r15 { fill: #e1e1e1;font-weight: bold }
+      .terminal-3017552431-r1 { fill: #c5c8c6 }
+  .terminal-3017552431-r2 { fill: #24292f }
+  .terminal-3017552431-r3 { fill: #121212 }
+  .terminal-3017552431-r4 { fill: #e1e1e1 }
+  .terminal-3017552431-r5 { fill: #e2e3e3 }
+  .terminal-3017552431-r6 { fill: #96989b }
+  .terminal-3017552431-r7 { fill: #0053aa }
+  .terminal-3017552431-r8 { fill: #008139 }
+  .terminal-3017552431-r9 { fill: #dde8f3;font-weight: bold }
+  .terminal-3017552431-r10 { fill: #939393;font-weight: bold }
+  .terminal-3017552431-r11 { fill: #14191f }
+  .terminal-3017552431-r12 { fill: #e2e3e3;font-weight: bold }
+  .terminal-3017552431-r13 { fill: #4ebf71;font-weight: bold }
+  .terminal-3017552431-r14 { fill: #e1e1e1;font-style: italic; }
+  .terminal-3017552431-r15 { fill: #e1e1e1;font-weight: bold }
       </style>
   
       <defs>
-      <clipPath id="terminal-1944007215-clip-terminal">
+      <clipPath id="terminal-3017552431-clip-terminal">
         <rect x="0" y="0" width="975.0" height="584.5999999999999" />
       </clipPath>
-      <clipPath id="terminal-1944007215-line-0">
+      <clipPath id="terminal-3017552431-line-0">
       <rect x="0" y="1.5" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-1">
+  <clipPath id="terminal-3017552431-line-1">
       <rect x="0" y="25.9" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-2">
+  <clipPath id="terminal-3017552431-line-2">
       <rect x="0" y="50.3" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-3">
+  <clipPath id="terminal-3017552431-line-3">
       <rect x="0" y="74.7" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-4">
+  <clipPath id="terminal-3017552431-line-4">
       <rect x="0" y="99.1" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-5">
+  <clipPath id="terminal-3017552431-line-5">
       <rect x="0" y="123.5" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-6">
+  <clipPath id="terminal-3017552431-line-6">
       <rect x="0" y="147.9" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-7">
+  <clipPath id="terminal-3017552431-line-7">
       <rect x="0" y="172.3" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-8">
+  <clipPath id="terminal-3017552431-line-8">
       <rect x="0" y="196.7" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-9">
+  <clipPath id="terminal-3017552431-line-9">
       <rect x="0" y="221.1" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-10">
+  <clipPath id="terminal-3017552431-line-10">
       <rect x="0" y="245.5" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-11">
+  <clipPath id="terminal-3017552431-line-11">
       <rect x="0" y="269.9" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-12">
+  <clipPath id="terminal-3017552431-line-12">
       <rect x="0" y="294.3" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-13">
+  <clipPath id="terminal-3017552431-line-13">
       <rect x="0" y="318.7" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-14">
+  <clipPath id="terminal-3017552431-line-14">
       <rect x="0" y="343.1" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-15">
+  <clipPath id="terminal-3017552431-line-15">
       <rect x="0" y="367.5" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-16">
+  <clipPath id="terminal-3017552431-line-16">
       <rect x="0" y="391.9" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-17">
+  <clipPath id="terminal-3017552431-line-17">
       <rect x="0" y="416.3" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-18">
+  <clipPath id="terminal-3017552431-line-18">
       <rect x="0" y="440.7" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-19">
+  <clipPath id="terminal-3017552431-line-19">
       <rect x="0" y="465.1" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-20">
+  <clipPath id="terminal-3017552431-line-20">
       <rect x="0" y="489.5" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-21">
+  <clipPath id="terminal-3017552431-line-21">
       <rect x="0" y="513.9" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-1944007215-line-22">
+  <clipPath id="terminal-3017552431-line-22">
       <rect x="0" y="538.3" width="976" height="24.65"/>
               </clipPath>
       </defs>
   
-      <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="633.6" rx="8"/><text class="terminal-1944007215-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">MarkdownExampleApp</text>
+      <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="633.6" rx="8"/><text class="terminal-3017552431-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">MarkdownExampleApp</text>
               <g transform="translate(26,22)">
               <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
               <circle cx="22" cy="0" r="7" fill="#febc2e"/>
               <circle cx="44" cy="0" r="7" fill="#28c840"/>
               </g>
           
-      <g transform="translate(9, 41)" clip-path="url(#terminal-1944007215-clip-terminal)">
-      <rect fill="#24292f" x="0" y="1.5" width="280.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="1.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="1.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="1.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="353.8" y="1.5" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="890.6" y="1.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="1.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="1.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="25.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="25.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="36.6" y="25.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="25.9" width="195.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="244" y="25.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="25.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="25.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="25.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="341.6" y="25.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="353.8" y="25.9" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="890.6" y="25.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="25.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="25.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="50.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="50.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="50.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="73.2" y="50.3" width="109.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="183" y="50.3" width="85.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="50.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="50.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="50.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="341.6" y="50.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="353.8" y="50.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="366" y="50.3" width="158.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="524.6" y="50.3" width="183" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="707.6" y="50.3" width="170.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="878.4" y="50.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="890.6" y="50.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="50.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="50.3" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="74.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="74.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="74.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="73.2" y="74.7" width="85.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="158.6" y="74.7" width="109.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="74.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="74.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="74.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="341.6" y="74.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="353.8" y="74.7" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="890.6" y="74.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="74.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="74.7" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="99.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="99.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="99.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="73.2" y="99.1" width="146.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="219.6" y="99.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="99.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="99.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="99.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="99.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="353.8" y="99.1" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="890.6" y="99.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="99.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="99.1" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="123.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="123.5" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="123.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="123.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="123.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="123.5" width="390.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="732" y="123.5" width="170.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="123.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="123.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="147.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="147.9" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="147.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="147.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="147.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="147.9" width="85.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="427" y="147.9" width="475.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="147.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="147.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="172.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="172.3" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="172.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="172.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="172.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="172.3" width="561.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="172.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="172.3" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="196.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="196.7" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="196.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="196.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="196.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="196.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="353.8" y="196.7" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="890.6" y="196.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="196.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="196.7" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="221.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="221.1" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="221.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="221.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="221.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="341.6" y="221.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="353.8" y="221.1" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="890.6" y="221.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="221.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="221.1" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="245.5" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="245.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="341.6" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="353.8" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="366" y="245.5" width="512.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="878.4" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="890.6" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="245.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="245.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="269.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="269.9" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="269.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="269.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="269.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="341.6" y="269.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="353.8" y="269.9" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="890.6" y="269.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="269.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="269.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="294.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="294.3" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="294.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="294.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="294.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="294.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="353.8" y="294.3" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="890.6" y="294.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="294.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="294.3" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="318.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="318.7" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="318.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="318.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="318.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="318.7" width="549" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="890.6" y="318.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="318.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="318.7" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="343.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="343.1" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="343.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="343.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="343.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="343.1" width="561.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="343.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="343.1" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="367.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="367.5" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="367.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="367.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="367.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="367.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="366" y="367.5" width="134.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="500.2" y="367.5" width="97.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="597.8" y="367.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="622.2" y="367.5" width="73.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="695.4" y="367.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="719.8" y="367.5" width="134.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="854" y="367.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="866.2" y="367.5" width="36.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="367.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="367.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="391.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="391.9" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="391.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="391.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="391.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="391.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="366" y="391.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="414.8" y="391.9" width="488" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="391.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="391.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="416.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="416.3" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="416.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="416.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="416.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="416.3" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="366" y="416.3" width="85.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="451.4" y="416.3" width="451.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="416.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="416.3" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="440.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="440.7" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="440.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="440.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="440.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="440.7" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="366" y="440.7" width="317.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="683.2" y="440.7" width="219.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="440.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="440.7" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="465.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="465.1" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="465.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="465.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="465.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="465.1" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="366" y="465.1" width="366" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="732" y="465.1" width="170.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="465.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="465.1" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="489.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="489.5" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="489.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="489.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="489.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="489.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="366" y="489.5" width="85.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="451.4" y="489.5" width="451.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="489.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="489.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="513.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="513.9" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="513.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="513.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="513.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="513.9" width="561.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="513.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="513.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="538.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="538.3" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="538.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="538.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="538.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="538.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="353.8" y="538.3" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="890.6" y="538.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="538.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="538.3" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="562.7" width="280.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="562.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="562.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="341.6" y="562.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="353.8" y="562.7" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="890.6" y="562.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="562.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="562.7" width="24.4" height="24.65" shape-rendering="crispEdges"/>
-      <g class="terminal-1944007215-matrix">
-      <text class="terminal-1944007215-r2" x="280.6" y="20" textLength="12.2" clip-path="url(#terminal-1944007215-line-0)">▊</text><text class="terminal-1944007215-r3" x="341.6" y="20" textLength="12.2" clip-path="url(#terminal-1944007215-line-0)">▁</text><text class="terminal-1944007215-r3" x="353.8" y="20" textLength="536.8" clip-path="url(#terminal-1944007215-line-0)">▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁</text><text class="terminal-1944007215-r3" x="890.6" y="20" textLength="12.2" clip-path="url(#terminal-1944007215-line-0)">▁</text><text class="terminal-1944007215-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1944007215-line-0)">
-  </text><text class="terminal-1944007215-r5" x="12.2" y="44.4" textLength="24.4" clip-path="url(#terminal-1944007215-line-1)">▼&#160;</text><text class="terminal-1944007215-r6" x="36.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1944007215-line-1)">Ⅰ</text><text class="terminal-1944007215-r5" x="48.8" y="44.4" textLength="195.2" clip-path="url(#terminal-1944007215-line-1)">&#160;Markdown&#160;Viewer</text><text class="terminal-1944007215-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1944007215-line-1)">▊</text><text class="terminal-1944007215-r3" x="341.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1944007215-line-1)">▎</text><text class="terminal-1944007215-r7" x="890.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1944007215-line-1)">▊</text><text class="terminal-1944007215-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1944007215-line-1)">
-  </text><text class="terminal-1944007215-r8" x="12.2" y="68.8" textLength="48.8" clip-path="url(#terminal-1944007215-line-2)">├──&#160;</text><text class="terminal-1944007215-r6" x="61" y="68.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-2)">Ⅱ</text><text class="terminal-1944007215-r5" x="73.2" y="68.8" textLength="109.8" clip-path="url(#terminal-1944007215-line-2)">&#160;Features</text><text class="terminal-1944007215-r2" x="280.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-2)">▊</text><text class="terminal-1944007215-r3" x="341.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-2)">▎</text><text class="terminal-1944007215-r9" x="524.6" y="68.8" textLength="183" clip-path="url(#terminal-1944007215-line-2)">Markdown&#160;Viewer</text><text class="terminal-1944007215-r7" x="890.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-2)">▊</text><text class="terminal-1944007215-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-2)">
-  </text><text class="terminal-1944007215-r8" x="12.2" y="93.2" textLength="48.8" clip-path="url(#terminal-1944007215-line-3)">├──&#160;</text><text class="terminal-1944007215-r6" x="61" y="93.2" textLength="12.2" clip-path="url(#terminal-1944007215-line-3)">Ⅱ</text><text class="terminal-1944007215-r5" x="73.2" y="93.2" textLength="85.4" clip-path="url(#terminal-1944007215-line-3)">&#160;Tables</text><text class="terminal-1944007215-r2" x="280.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1944007215-line-3)">▊</text><text class="terminal-1944007215-r3" x="341.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1944007215-line-3)">▎</text><text class="terminal-1944007215-r7" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1944007215-line-3)">▊</text><text class="terminal-1944007215-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1944007215-line-3)">
-  </text><text class="terminal-1944007215-r8" x="12.2" y="117.6" textLength="48.8" clip-path="url(#terminal-1944007215-line-4)">└──&#160;</text><text class="terminal-1944007215-r6" x="61" y="117.6" textLength="12.2" clip-path="url(#terminal-1944007215-line-4)">Ⅱ</text><text class="terminal-1944007215-r5" x="73.2" y="117.6" textLength="146.4" clip-path="url(#terminal-1944007215-line-4)">&#160;Code&#160;Blocks</text><text class="terminal-1944007215-r2" x="280.6" y="117.6" textLength="12.2" clip-path="url(#terminal-1944007215-line-4)">▊</text><text class="terminal-1944007215-r3" x="341.6" y="117.6" textLength="12.2" clip-path="url(#terminal-1944007215-line-4)">▔</text><text class="terminal-1944007215-r3" x="353.8" y="117.6" textLength="536.8" clip-path="url(#terminal-1944007215-line-4)">▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔</text><text class="terminal-1944007215-r3" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-1944007215-line-4)">▔</text><text class="terminal-1944007215-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1944007215-line-4)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="142" textLength="12.2" clip-path="url(#terminal-1944007215-line-5)">▊</text><text class="terminal-1944007215-r4" x="341.6" y="142" textLength="390.4" clip-path="url(#terminal-1944007215-line-5)">This&#160;is&#160;an&#160;example&#160;of&#160;Textual&#x27;s&#160;</text><text class="terminal-1944007215-r10" x="732" y="142" textLength="170.8" clip-path="url(#terminal-1944007215-line-5)">MarkdownViewer</text><text class="terminal-1944007215-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1944007215-line-5)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="166.4" textLength="12.2" clip-path="url(#terminal-1944007215-line-6)">▊</text><text class="terminal-1944007215-r4" x="341.6" y="166.4" textLength="85.4" clip-path="url(#terminal-1944007215-line-6)">widget.</text><text class="terminal-1944007215-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1944007215-line-6)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="190.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-7)">▊</text><text class="terminal-1944007215-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-7)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="215.2" textLength="12.2" clip-path="url(#terminal-1944007215-line-8)">▊</text><text class="terminal-1944007215-r3" x="341.6" y="215.2" textLength="12.2" clip-path="url(#terminal-1944007215-line-8)">▁</text><text class="terminal-1944007215-r3" x="353.8" y="215.2" textLength="536.8" clip-path="url(#terminal-1944007215-line-8)">▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁</text><text class="terminal-1944007215-r3" x="890.6" y="215.2" textLength="12.2" clip-path="url(#terminal-1944007215-line-8)">▁</text><text class="terminal-1944007215-r11" x="951.6" y="215.2" textLength="24.4" clip-path="url(#terminal-1944007215-line-8)">▅▅</text><text class="terminal-1944007215-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1944007215-line-8)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="239.6" textLength="12.2" clip-path="url(#terminal-1944007215-line-9)">▊</text><text class="terminal-1944007215-r3" x="341.6" y="239.6" textLength="12.2" clip-path="url(#terminal-1944007215-line-9)">▎</text><text class="terminal-1944007215-r2" x="890.6" y="239.6" textLength="12.2" clip-path="url(#terminal-1944007215-line-9)">▊</text><text class="terminal-1944007215-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1944007215-line-9)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="264" textLength="12.2" clip-path="url(#terminal-1944007215-line-10)">▊</text><text class="terminal-1944007215-r3" x="341.6" y="264" textLength="12.2" clip-path="url(#terminal-1944007215-line-10)">▎</text><text class="terminal-1944007215-r12" x="366" y="264" textLength="512.4" clip-path="url(#terminal-1944007215-line-10)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Features&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-1944007215-r2" x="890.6" y="264" textLength="12.2" clip-path="url(#terminal-1944007215-line-10)">▊</text><text class="terminal-1944007215-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1944007215-line-10)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="288.4" textLength="12.2" clip-path="url(#terminal-1944007215-line-11)">▊</text><text class="terminal-1944007215-r3" x="341.6" y="288.4" textLength="12.2" clip-path="url(#terminal-1944007215-line-11)">▎</text><text class="terminal-1944007215-r2" x="890.6" y="288.4" textLength="12.2" clip-path="url(#terminal-1944007215-line-11)">▊</text><text class="terminal-1944007215-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1944007215-line-11)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="312.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-12)">▊</text><text class="terminal-1944007215-r3" x="341.6" y="312.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-12)">▔</text><text class="terminal-1944007215-r3" x="353.8" y="312.8" textLength="536.8" clip-path="url(#terminal-1944007215-line-12)">▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔</text><text class="terminal-1944007215-r3" x="890.6" y="312.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-12)">▔</text><text class="terminal-1944007215-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-12)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="337.2" textLength="12.2" clip-path="url(#terminal-1944007215-line-13)">▊</text><text class="terminal-1944007215-r4" x="341.6" y="337.2" textLength="549" clip-path="url(#terminal-1944007215-line-13)">Markdown&#160;syntax&#160;and&#160;extensions&#160;are&#160;supported.</text><text class="terminal-1944007215-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1944007215-line-13)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="361.6" textLength="12.2" clip-path="url(#terminal-1944007215-line-14)">▊</text><text class="terminal-1944007215-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1944007215-line-14)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="386" textLength="12.2" clip-path="url(#terminal-1944007215-line-15)">▊</text><text class="terminal-1944007215-r13" x="341.6" y="386" textLength="24.4" clip-path="url(#terminal-1944007215-line-15)">●&#160;</text><text class="terminal-1944007215-r4" x="366" y="386" textLength="134.2" clip-path="url(#terminal-1944007215-line-15)">Typography&#160;</text><text class="terminal-1944007215-r14" x="500.2" y="386" textLength="97.6" clip-path="url(#terminal-1944007215-line-15)">emphasis</text><text class="terminal-1944007215-r4" x="597.8" y="386" textLength="24.4" clip-path="url(#terminal-1944007215-line-15)">,&#160;</text><text class="terminal-1944007215-r15" x="622.2" y="386" textLength="73.2" clip-path="url(#terminal-1944007215-line-15)">strong</text><text class="terminal-1944007215-r4" x="695.4" y="386" textLength="24.4" clip-path="url(#terminal-1944007215-line-15)">,&#160;</text><text class="terminal-1944007215-r10" x="719.8" y="386" textLength="134.2" clip-path="url(#terminal-1944007215-line-15)">inline&#160;code</text><text class="terminal-1944007215-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1944007215-line-15)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="410.4" textLength="12.2" clip-path="url(#terminal-1944007215-line-16)">▊</text><text class="terminal-1944007215-r4" x="366" y="410.4" textLength="48.8" clip-path="url(#terminal-1944007215-line-16)">etc.</text><text class="terminal-1944007215-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1944007215-line-16)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="434.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-17)">▊</text><text class="terminal-1944007215-r13" x="341.6" y="434.8" textLength="24.4" clip-path="url(#terminal-1944007215-line-17)">●&#160;</text><text class="terminal-1944007215-r4" x="366" y="434.8" textLength="85.4" clip-path="url(#terminal-1944007215-line-17)">Headers</text><text class="terminal-1944007215-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-17)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="459.2" textLength="12.2" clip-path="url(#terminal-1944007215-line-18)">▊</text><text class="terminal-1944007215-r13" x="341.6" y="459.2" textLength="24.4" clip-path="url(#terminal-1944007215-line-18)">●&#160;</text><text class="terminal-1944007215-r4" x="366" y="459.2" textLength="317.2" clip-path="url(#terminal-1944007215-line-18)">Lists&#160;(bullet&#160;and&#160;ordered)</text><text class="terminal-1944007215-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1944007215-line-18)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="483.6" textLength="12.2" clip-path="url(#terminal-1944007215-line-19)">▊</text><text class="terminal-1944007215-r13" x="341.6" y="483.6" textLength="24.4" clip-path="url(#terminal-1944007215-line-19)">●&#160;</text><text class="terminal-1944007215-r4" x="366" y="483.6" textLength="366" clip-path="url(#terminal-1944007215-line-19)">Syntax&#160;highlighted&#160;code&#160;blocks</text><text class="terminal-1944007215-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1944007215-line-19)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="508" textLength="12.2" clip-path="url(#terminal-1944007215-line-20)">▊</text><text class="terminal-1944007215-r13" x="341.6" y="508" textLength="24.4" clip-path="url(#terminal-1944007215-line-20)">●&#160;</text><text class="terminal-1944007215-r4" x="366" y="508" textLength="85.4" clip-path="url(#terminal-1944007215-line-20)">Tables!</text><text class="terminal-1944007215-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1944007215-line-20)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="532.4" textLength="12.2" clip-path="url(#terminal-1944007215-line-21)">▊</text><text class="terminal-1944007215-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1944007215-line-21)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="556.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-22)">▊</text><text class="terminal-1944007215-r3" x="341.6" y="556.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-22)">▁</text><text class="terminal-1944007215-r3" x="353.8" y="556.8" textLength="536.8" clip-path="url(#terminal-1944007215-line-22)">▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁</text><text class="terminal-1944007215-r3" x="890.6" y="556.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-22)">▁</text><text class="terminal-1944007215-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1944007215-line-22)">
-  </text><text class="terminal-1944007215-r2" x="280.6" y="581.2" textLength="12.2" clip-path="url(#terminal-1944007215-line-23)">▊</text><text class="terminal-1944007215-r3" x="341.6" y="581.2" textLength="12.2" clip-path="url(#terminal-1944007215-line-23)">▎</text><text class="terminal-1944007215-r2" x="890.6" y="581.2" textLength="12.2" clip-path="url(#terminal-1944007215-line-23)">▊</text>
+      <g transform="translate(9, 41)" clip-path="url(#terminal-3017552431-clip-terminal)">
+      <rect fill="#24292f" x="0" y="1.5" width="280.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="1.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="1.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="1.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="353.8" y="1.5" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="890.6" y="1.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="1.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="1.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="25.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="25.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="36.6" y="25.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="25.9" width="183" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="244" y="25.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="25.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="25.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="25.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="341.6" y="25.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="353.8" y="25.9" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="890.6" y="25.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="25.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="25.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="50.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="50.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="50.3" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="85.4" y="50.3" width="97.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="183" y="50.3" width="85.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="50.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="50.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="50.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="341.6" y="50.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="353.8" y="50.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="366" y="50.3" width="158.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="524.6" y="50.3" width="183" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="707.6" y="50.3" width="170.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="878.4" y="50.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="890.6" y="50.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="50.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="50.3" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="74.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="74.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="74.7" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="85.4" y="74.7" width="73.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="158.6" y="74.7" width="109.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="74.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="74.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="74.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="341.6" y="74.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#0053aa" x="353.8" y="74.7" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="890.6" y="74.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="74.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="74.7" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="99.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="99.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="99.1" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="85.4" y="99.1" width="134.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="219.6" y="99.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="99.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="99.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="99.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="99.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="353.8" y="99.1" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="890.6" y="99.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="99.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="99.1" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="123.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="123.5" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="123.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="123.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="123.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="123.5" width="390.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="732" y="123.5" width="170.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="123.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="123.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="147.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="147.9" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="147.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="147.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="147.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="147.9" width="85.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="427" y="147.9" width="475.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="147.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="147.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="172.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="172.3" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="172.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="172.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="172.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="172.3" width="561.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="172.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="172.3" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="196.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="196.7" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="196.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="196.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="196.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="196.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="353.8" y="196.7" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="890.6" y="196.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="196.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#23568b" x="951.6" y="196.7" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="221.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="221.1" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="221.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="221.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="221.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="341.6" y="221.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="353.8" y="221.1" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="890.6" y="221.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="221.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="221.1" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="245.5" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="245.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="341.6" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="353.8" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="366" y="245.5" width="512.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="878.4" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="890.6" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="245.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="245.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="269.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="269.9" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="269.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="269.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="269.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="341.6" y="269.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="353.8" y="269.9" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="890.6" y="269.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="269.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="269.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="294.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="294.3" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="294.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="294.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="294.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="294.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="353.8" y="294.3" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="890.6" y="294.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="294.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="294.3" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="318.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="318.7" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="318.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="318.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="318.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="318.7" width="549" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="890.6" y="318.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="318.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="318.7" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="343.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="343.1" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="343.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="343.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="343.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="343.1" width="561.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="343.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="343.1" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="367.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="367.5" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="367.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="367.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="367.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="367.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="366" y="367.5" width="134.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="500.2" y="367.5" width="97.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="597.8" y="367.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="622.2" y="367.5" width="73.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="695.4" y="367.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="719.8" y="367.5" width="134.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="854" y="367.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="866.2" y="367.5" width="36.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="367.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="367.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="391.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="391.9" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="391.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="391.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="391.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="391.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="366" y="391.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="414.8" y="391.9" width="488" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="391.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="391.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="416.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="416.3" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="416.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="416.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="416.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="416.3" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="366" y="416.3" width="85.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="451.4" y="416.3" width="451.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="416.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="416.3" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="440.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="440.7" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="440.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="440.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="440.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="440.7" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="366" y="440.7" width="317.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="683.2" y="440.7" width="219.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="440.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="440.7" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="465.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="465.1" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="465.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="465.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="465.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="465.1" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="366" y="465.1" width="366" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="732" y="465.1" width="170.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="465.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="465.1" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="489.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="489.5" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="489.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="489.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="489.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="489.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="366" y="489.5" width="85.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="451.4" y="489.5" width="451.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="489.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="489.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="513.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="513.9" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="513.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="513.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="513.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="513.9" width="561.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="513.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="513.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="538.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="12.2" y="538.3" width="256.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="268.4" y="538.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="538.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="538.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="341.6" y="538.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="353.8" y="538.3" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="890.6" y="538.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="538.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="538.3" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="0" y="562.7" width="280.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="280.6" y="562.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="292.8" y="562.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="341.6" y="562.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="353.8" y="562.7" width="536.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#121212" x="890.6" y="562.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1e1e1e" x="902.8" y="562.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#14191f" x="951.6" y="562.7" width="24.4" height="24.65" shape-rendering="crispEdges"/>
+      <g class="terminal-3017552431-matrix">
+      <text class="terminal-3017552431-r2" x="280.6" y="20" textLength="12.2" clip-path="url(#terminal-3017552431-line-0)">▊</text><text class="terminal-3017552431-r3" x="341.6" y="20" textLength="12.2" clip-path="url(#terminal-3017552431-line-0)">▁</text><text class="terminal-3017552431-r3" x="353.8" y="20" textLength="536.8" clip-path="url(#terminal-3017552431-line-0)">▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁</text><text class="terminal-3017552431-r3" x="890.6" y="20" textLength="12.2" clip-path="url(#terminal-3017552431-line-0)">▁</text><text class="terminal-3017552431-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3017552431-line-0)">
+  </text><text class="terminal-3017552431-r5" x="12.2" y="44.4" textLength="24.4" clip-path="url(#terminal-3017552431-line-1)">▼&#160;</text><text class="terminal-3017552431-r6" x="36.6" y="44.4" textLength="24.4" clip-path="url(#terminal-3017552431-line-1)">Ⅰ&#160;</text><text class="terminal-3017552431-r5" x="61" y="44.4" textLength="183" clip-path="url(#terminal-3017552431-line-1)">Markdown&#160;Viewer</text><text class="terminal-3017552431-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-3017552431-line-1)">▊</text><text class="terminal-3017552431-r3" x="341.6" y="44.4" textLength="12.2" clip-path="url(#terminal-3017552431-line-1)">▎</text><text class="terminal-3017552431-r7" x="890.6" y="44.4" textLength="12.2" clip-path="url(#terminal-3017552431-line-1)">▊</text><text class="terminal-3017552431-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3017552431-line-1)">
+  </text><text class="terminal-3017552431-r8" x="12.2" y="68.8" textLength="48.8" clip-path="url(#terminal-3017552431-line-2)">├──&#160;</text><text class="terminal-3017552431-r6" x="61" y="68.8" textLength="24.4" clip-path="url(#terminal-3017552431-line-2)">Ⅱ&#160;</text><text class="terminal-3017552431-r5" x="85.4" y="68.8" textLength="97.6" clip-path="url(#terminal-3017552431-line-2)">Features</text><text class="terminal-3017552431-r2" x="280.6" y="68.8" textLength="12.2" clip-path="url(#terminal-3017552431-line-2)">▊</text><text class="terminal-3017552431-r3" x="341.6" y="68.8" textLength="12.2" clip-path="url(#terminal-3017552431-line-2)">▎</text><text class="terminal-3017552431-r9" x="524.6" y="68.8" textLength="183" clip-path="url(#terminal-3017552431-line-2)">Markdown&#160;Viewer</text><text class="terminal-3017552431-r7" x="890.6" y="68.8" textLength="12.2" clip-path="url(#terminal-3017552431-line-2)">▊</text><text class="terminal-3017552431-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3017552431-line-2)">
+  </text><text class="terminal-3017552431-r8" x="12.2" y="93.2" textLength="48.8" clip-path="url(#terminal-3017552431-line-3)">├──&#160;</text><text class="terminal-3017552431-r6" x="61" y="93.2" textLength="24.4" clip-path="url(#terminal-3017552431-line-3)">Ⅱ&#160;</text><text class="terminal-3017552431-r5" x="85.4" y="93.2" textLength="73.2" clip-path="url(#terminal-3017552431-line-3)">Tables</text><text class="terminal-3017552431-r2" x="280.6" y="93.2" textLength="12.2" clip-path="url(#terminal-3017552431-line-3)">▊</text><text class="terminal-3017552431-r3" x="341.6" y="93.2" textLength="12.2" clip-path="url(#terminal-3017552431-line-3)">▎</text><text class="terminal-3017552431-r7" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-3017552431-line-3)">▊</text><text class="terminal-3017552431-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3017552431-line-3)">
+  </text><text class="terminal-3017552431-r8" x="12.2" y="117.6" textLength="48.8" clip-path="url(#terminal-3017552431-line-4)">└──&#160;</text><text class="terminal-3017552431-r6" x="61" y="117.6" textLength="24.4" clip-path="url(#terminal-3017552431-line-4)">Ⅱ&#160;</text><text class="terminal-3017552431-r5" x="85.4" y="117.6" textLength="134.2" clip-path="url(#terminal-3017552431-line-4)">Code&#160;Blocks</text><text class="terminal-3017552431-r2" x="280.6" y="117.6" textLength="12.2" clip-path="url(#terminal-3017552431-line-4)">▊</text><text class="terminal-3017552431-r3" x="341.6" y="117.6" textLength="12.2" clip-path="url(#terminal-3017552431-line-4)">▔</text><text class="terminal-3017552431-r3" x="353.8" y="117.6" textLength="536.8" clip-path="url(#terminal-3017552431-line-4)">▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔</text><text class="terminal-3017552431-r3" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-3017552431-line-4)">▔</text><text class="terminal-3017552431-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3017552431-line-4)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="142" textLength="12.2" clip-path="url(#terminal-3017552431-line-5)">▊</text><text class="terminal-3017552431-r4" x="341.6" y="142" textLength="390.4" clip-path="url(#terminal-3017552431-line-5)">This&#160;is&#160;an&#160;example&#160;of&#160;Textual&#x27;s&#160;</text><text class="terminal-3017552431-r10" x="732" y="142" textLength="170.8" clip-path="url(#terminal-3017552431-line-5)">MarkdownViewer</text><text class="terminal-3017552431-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3017552431-line-5)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="166.4" textLength="12.2" clip-path="url(#terminal-3017552431-line-6)">▊</text><text class="terminal-3017552431-r4" x="341.6" y="166.4" textLength="85.4" clip-path="url(#terminal-3017552431-line-6)">widget.</text><text class="terminal-3017552431-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3017552431-line-6)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="190.8" textLength="12.2" clip-path="url(#terminal-3017552431-line-7)">▊</text><text class="terminal-3017552431-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3017552431-line-7)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="215.2" textLength="12.2" clip-path="url(#terminal-3017552431-line-8)">▊</text><text class="terminal-3017552431-r3" x="341.6" y="215.2" textLength="12.2" clip-path="url(#terminal-3017552431-line-8)">▁</text><text class="terminal-3017552431-r3" x="353.8" y="215.2" textLength="536.8" clip-path="url(#terminal-3017552431-line-8)">▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁</text><text class="terminal-3017552431-r3" x="890.6" y="215.2" textLength="12.2" clip-path="url(#terminal-3017552431-line-8)">▁</text><text class="terminal-3017552431-r11" x="951.6" y="215.2" textLength="24.4" clip-path="url(#terminal-3017552431-line-8)">▅▅</text><text class="terminal-3017552431-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3017552431-line-8)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="239.6" textLength="12.2" clip-path="url(#terminal-3017552431-line-9)">▊</text><text class="terminal-3017552431-r3" x="341.6" y="239.6" textLength="12.2" clip-path="url(#terminal-3017552431-line-9)">▎</text><text class="terminal-3017552431-r2" x="890.6" y="239.6" textLength="12.2" clip-path="url(#terminal-3017552431-line-9)">▊</text><text class="terminal-3017552431-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3017552431-line-9)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="264" textLength="12.2" clip-path="url(#terminal-3017552431-line-10)">▊</text><text class="terminal-3017552431-r3" x="341.6" y="264" textLength="12.2" clip-path="url(#terminal-3017552431-line-10)">▎</text><text class="terminal-3017552431-r12" x="366" y="264" textLength="512.4" clip-path="url(#terminal-3017552431-line-10)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Features&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-3017552431-r2" x="890.6" y="264" textLength="12.2" clip-path="url(#terminal-3017552431-line-10)">▊</text><text class="terminal-3017552431-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3017552431-line-10)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="288.4" textLength="12.2" clip-path="url(#terminal-3017552431-line-11)">▊</text><text class="terminal-3017552431-r3" x="341.6" y="288.4" textLength="12.2" clip-path="url(#terminal-3017552431-line-11)">▎</text><text class="terminal-3017552431-r2" x="890.6" y="288.4" textLength="12.2" clip-path="url(#terminal-3017552431-line-11)">▊</text><text class="terminal-3017552431-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3017552431-line-11)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="312.8" textLength="12.2" clip-path="url(#terminal-3017552431-line-12)">▊</text><text class="terminal-3017552431-r3" x="341.6" y="312.8" textLength="12.2" clip-path="url(#terminal-3017552431-line-12)">▔</text><text class="terminal-3017552431-r3" x="353.8" y="312.8" textLength="536.8" clip-path="url(#terminal-3017552431-line-12)">▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔</text><text class="terminal-3017552431-r3" x="890.6" y="312.8" textLength="12.2" clip-path="url(#terminal-3017552431-line-12)">▔</text><text class="terminal-3017552431-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3017552431-line-12)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="337.2" textLength="12.2" clip-path="url(#terminal-3017552431-line-13)">▊</text><text class="terminal-3017552431-r4" x="341.6" y="337.2" textLength="549" clip-path="url(#terminal-3017552431-line-13)">Markdown&#160;syntax&#160;and&#160;extensions&#160;are&#160;supported.</text><text class="terminal-3017552431-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3017552431-line-13)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="361.6" textLength="12.2" clip-path="url(#terminal-3017552431-line-14)">▊</text><text class="terminal-3017552431-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3017552431-line-14)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="386" textLength="12.2" clip-path="url(#terminal-3017552431-line-15)">▊</text><text class="terminal-3017552431-r13" x="341.6" y="386" textLength="24.4" clip-path="url(#terminal-3017552431-line-15)">●&#160;</text><text class="terminal-3017552431-r4" x="366" y="386" textLength="134.2" clip-path="url(#terminal-3017552431-line-15)">Typography&#160;</text><text class="terminal-3017552431-r14" x="500.2" y="386" textLength="97.6" clip-path="url(#terminal-3017552431-line-15)">emphasis</text><text class="terminal-3017552431-r4" x="597.8" y="386" textLength="24.4" clip-path="url(#terminal-3017552431-line-15)">,&#160;</text><text class="terminal-3017552431-r15" x="622.2" y="386" textLength="73.2" clip-path="url(#terminal-3017552431-line-15)">strong</text><text class="terminal-3017552431-r4" x="695.4" y="386" textLength="24.4" clip-path="url(#terminal-3017552431-line-15)">,&#160;</text><text class="terminal-3017552431-r10" x="719.8" y="386" textLength="134.2" clip-path="url(#terminal-3017552431-line-15)">inline&#160;code</text><text class="terminal-3017552431-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3017552431-line-15)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="410.4" textLength="12.2" clip-path="url(#terminal-3017552431-line-16)">▊</text><text class="terminal-3017552431-r4" x="366" y="410.4" textLength="48.8" clip-path="url(#terminal-3017552431-line-16)">etc.</text><text class="terminal-3017552431-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3017552431-line-16)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="434.8" textLength="12.2" clip-path="url(#terminal-3017552431-line-17)">▊</text><text class="terminal-3017552431-r13" x="341.6" y="434.8" textLength="24.4" clip-path="url(#terminal-3017552431-line-17)">●&#160;</text><text class="terminal-3017552431-r4" x="366" y="434.8" textLength="85.4" clip-path="url(#terminal-3017552431-line-17)">Headers</text><text class="terminal-3017552431-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-3017552431-line-17)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="459.2" textLength="12.2" clip-path="url(#terminal-3017552431-line-18)">▊</text><text class="terminal-3017552431-r13" x="341.6" y="459.2" textLength="24.4" clip-path="url(#terminal-3017552431-line-18)">●&#160;</text><text class="terminal-3017552431-r4" x="366" y="459.2" textLength="317.2" clip-path="url(#terminal-3017552431-line-18)">Lists&#160;(bullet&#160;and&#160;ordered)</text><text class="terminal-3017552431-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-3017552431-line-18)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="483.6" textLength="12.2" clip-path="url(#terminal-3017552431-line-19)">▊</text><text class="terminal-3017552431-r13" x="341.6" y="483.6" textLength="24.4" clip-path="url(#terminal-3017552431-line-19)">●&#160;</text><text class="terminal-3017552431-r4" x="366" y="483.6" textLength="366" clip-path="url(#terminal-3017552431-line-19)">Syntax&#160;highlighted&#160;code&#160;blocks</text><text class="terminal-3017552431-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-3017552431-line-19)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="508" textLength="12.2" clip-path="url(#terminal-3017552431-line-20)">▊</text><text class="terminal-3017552431-r13" x="341.6" y="508" textLength="24.4" clip-path="url(#terminal-3017552431-line-20)">●&#160;</text><text class="terminal-3017552431-r4" x="366" y="508" textLength="85.4" clip-path="url(#terminal-3017552431-line-20)">Tables!</text><text class="terminal-3017552431-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-3017552431-line-20)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="532.4" textLength="12.2" clip-path="url(#terminal-3017552431-line-21)">▊</text><text class="terminal-3017552431-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-3017552431-line-21)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="556.8" textLength="12.2" clip-path="url(#terminal-3017552431-line-22)">▊</text><text class="terminal-3017552431-r3" x="341.6" y="556.8" textLength="12.2" clip-path="url(#terminal-3017552431-line-22)">▁</text><text class="terminal-3017552431-r3" x="353.8" y="556.8" textLength="536.8" clip-path="url(#terminal-3017552431-line-22)">▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁</text><text class="terminal-3017552431-r3" x="890.6" y="556.8" textLength="12.2" clip-path="url(#terminal-3017552431-line-22)">▁</text><text class="terminal-3017552431-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-3017552431-line-22)">
+  </text><text class="terminal-3017552431-r2" x="280.6" y="581.2" textLength="12.2" clip-path="url(#terminal-3017552431-line-23)">▊</text><text class="terminal-3017552431-r3" x="341.6" y="581.2" textLength="12.2" clip-path="url(#terminal-3017552431-line-23)">▎</text><text class="terminal-3017552431-r2" x="890.6" y="581.2" textLength="12.2" clip-path="url(#terminal-3017552431-line-23)">▊</text>
       </g>
       </g>
   </svg>
diff --git a/tests/test_markdownviewer.py b/tests/test_markdownviewer.py
--- a/tests/test_markdownviewer.py
+++ b/tests/test_markdownviewer.py
@@ -1,10 +1,12 @@
 from pathlib import Path
 
 import pytest
+from rich.text import Text
 
+import textual.widgets._markdown as MD
 from textual.app import App, ComposeResult
 from textual.geometry import Offset
-from textual.widgets import Markdown, MarkdownViewer
+from textual.widgets import Markdown, MarkdownViewer, Tree
 
 TEST_MARKDOWN = """\
 * [First]({{file}}#first)
@@ -45,8 +47,12 @@ async def test_markdown_file_viewer_anchor_link(tmp_path, link: int) -> None:
 
 
 class MarkdownStringViewerApp(App[None]):
+    def __init__(self, markdown_string: str) -> None:
+        self.markdown_string = markdown_string
+        super().__init__()
+
     def compose(self) -> ComposeResult:
-        yield MarkdownViewer(TEST_MARKDOWN.replace("{{file}}", ""))
+        yield MarkdownViewer(self.markdown_string)
 
     async def on_mount(self) -> None:
         self.query_one(MarkdownViewer).show_table_of_contents = False
@@ -57,8 +63,27 @@ async def test_markdown_string_viewer_anchor_link(link: int) -> None:
     """Test https://github.com/Textualize/textual/issues/3094
 
     Also https://github.com/Textualize/textual/pull/3244#issuecomment-1710278718."""
-    async with MarkdownStringViewerApp().run_test() as pilot:
+    async with MarkdownStringViewerApp(
+        TEST_MARKDOWN.replace("{{file}}", "")
+    ).run_test() as pilot:
         # There's not really anything to test *for* here, but the lack of an
         # exception is the win (before the fix this is testing it would have
         # been FileNotFoundError).
         await pilot.click(Markdown, Offset(2, link))
+
+
+@pytest.mark.parametrize("text", ["Hey [[/test]]", "[i]Hey there[/i]"])
+async def test_headings_that_look_like_they_contain_markup(text: str) -> None:
+    """Regression test for https://github.com/Textualize/textual/issues/3689.
+
+    Things that look like markup are escaped in markdown headings in the table of contents.
+    """
+
+    document = f"# {text}"
+    async with MarkdownStringViewerApp(document).run_test() as pilot:
+        assert pilot.app.query_one(MD.MarkdownH1)._text == Text(text)
+        toc_tree = pilot.app.query_one(MD.MarkdownTableOfContents).query_one(Tree)
+        # The toc label looks like "I {text}" but the I is styled so we drop it.
+        toc_label = toc_tree.root.children[0].label
+        _, text_label = toc_label.divide([2])
+        assert text_label == Text(text)