diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,8 @@
+0.1
+===
+- Added AST example
+- defaultChartConfig/graphToChartWith refactor
+
 0.0.3
 ===
 
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c) 2020, Tony Day
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Tony Day nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/dotparse.cabal b/dotparse.cabal
--- a/dotparse.cabal
+++ b/dotparse.cabal
@@ -1,127 +1,132 @@
-cabal-version:   3.0
-name:            dotparse
-version:         0.0.3
-synopsis:        dot language parsing and printing.
-description:     This package provides parsing and printing of the dot language.
+cabal-version: 3.0
+name: dotparse
+version: 0.1.0.0
+license: BSD-3-Clause
+license-file: LICENSE
+copyright: Tony Day (c) 2020
+category: graphics
+author: Tony Day
+maintainer: tonyday567@gmail.com
+homepage: https://github.com/tonyday567/dotparse#readme
+bug-reports: https://github.com/tonyday567/dotparse/issues
+synopsis: dot language parsing and printing.
+description:
+    This package provides parsing and printing of the dot language.
 
-  == Usage
+    == Usage
 
-  >>> :set -XOverloadedLabels
-  >>> :set -XOverloadedStrings
-  >>> import DotParse
-  >>> import Chart
-  >>> import DotParse.Examples (exInt)
-  >>> ex <- processGraph exInt
-  >>> writeChartOptions "other/exga.svg" (graphToChartWith defaultChartConfig ex)
+    >>> :set -XOverloadedLabels
+    >>> :set -XOverloadedStrings
+    >>> import DotParse
+    >>> import Chart
+    >>> import Data.Text (pack)
+    >>> import DotParse.Examples (exInt)
+    >>> ex <- processGraph exInt
+    >>> writeChartOptions "other/exga.svg" (graphToChart ex)
 
-  ![usage example](docs/other/exga.svg)
+    ![usage example](docs/other/exga.svg)
 
 
-category:        project
-author:          Tony Day
-maintainer:      tonyday567@gmail.com
-copyright:       Tony Day (c) 2022
-license:         BSD-3-Clause
-homepage:        https://github.com/tonyday567/dotparse#readme
-bug-reports:     https://github.com/tonyday567/dotparse/issues
-build-type:      Simple
-extra-doc-files: other/*.svg
-                 ChangeLog.md
-                 readme.org
+build-type: Simple
+tested-with: GHC == 8.10.7 || ==9.2.8 || ==9.4.5 || ==9.6.2 || ==9.8.1
+extra-doc-files:
+    ChangeLog.md
+    other/*.svg
+    readme.org
 
 source-repository head
-  type:     git
-  location: https://github.com/tonyday567/dotparse
+    type: git
+    location: https://github.com/tonyday567/dotparse
 
+common ghc-options-stanza
+    ghc-options:
+        -Wall
+        -Wcompat
+        -Widentities
+        -Wincomplete-record-updates
+        -Wincomplete-uni-patterns
+        -Wpartial-fields
+        -Wredundant-constraints
+
 common ghc2021-stanza
-  if impl(ghc >=9.2)
-    default-language:
-      GHC2021
-  if impl(ghc <9.2)
-    default-language:
-      Haskell2010
-    default-extensions:
-      BangPatterns
-      BinaryLiterals
-      ConstrainedClassMethods
-      ConstraintKinds
-      DeriveDataTypeable
-      DeriveFoldable
-      DeriveFunctor
-      DeriveGeneric
-      DeriveLift
-      DeriveTraversable
-      DoAndIfThenElse
-      EmptyCase
-      EmptyDataDecls
-      EmptyDataDeriving
-      ExistentialQuantification
-      ExplicitForAll
-      FlexibleContexts
-      FlexibleInstances
-      ForeignFunctionInterface
-      GADTSyntax
-      GeneralisedNewtypeDeriving
-      HexFloatLiterals
-      ImplicitPrelude
-      InstanceSigs
-      KindSignatures
-      MonomorphismRestriction
-      MultiParamTypeClasses
-      NamedFieldPuns
-      NamedWildCards
-      NumericUnderscores
-      PatternGuards
-      PolyKinds
-      PostfixOperators
-      RankNTypes
-      RelaxedPolyRec
-      ScopedTypeVariables
-      StandaloneDeriving
-      StarIsType
-      TraditionalRecordSyntax
-      TupleSections
-      TypeApplications
-      TypeOperators
-      TypeSynonymInstances
-  if impl(ghc <9.2) && impl(ghc >=8.10)
-    default-extensions:
-      ImportQualifiedPost
-      StandaloneKindSignatures
+    if impl ( ghc >= 9.2 )
+        default-language: GHC2021
 
-common ghc-options-stanza
-  ghc-options:
-    -Wall
-    -Wcompat
-    -Wincomplete-record-updates
-    -Wincomplete-uni-patterns
-    -Wredundant-constraints
-    -Widentities
-    -Wpartial-fields
+    if impl ( ghc < 9.2 )
+        default-language: Haskell2010
+        default-extensions:
+            BangPatterns
+            BinaryLiterals
+            ConstrainedClassMethods
+            ConstraintKinds
+            DeriveDataTypeable
+            DeriveFoldable
+            DeriveFunctor
+            DeriveGeneric
+            DeriveLift
+            DeriveTraversable
+            DoAndIfThenElse
+            EmptyCase
+            EmptyDataDecls
+            EmptyDataDeriving
+            ExistentialQuantification
+            ExplicitForAll
+            FlexibleContexts
+            FlexibleInstances
+            ForeignFunctionInterface
+            GADTSyntax
+            GeneralisedNewtypeDeriving
+            HexFloatLiterals
+            ImplicitPrelude
+            InstanceSigs
+            KindSignatures
+            MonomorphismRestriction
+            MultiParamTypeClasses
+            NamedFieldPuns
+            NamedWildCards
+            NumericUnderscores
+            PatternGuards
+            PolyKinds
+            PostfixOperators
+            RankNTypes
+            RelaxedPolyRec
+            ScopedTypeVariables
+            StandaloneDeriving
+            StarIsType
+            TraditionalRecordSyntax
+            TupleSections
+            TypeApplications
+            TypeOperators
+            TypeSynonymInstances
 
-library
-  import: ghc2021-stanza
-  import: ghc-options-stanza
-  hs-source-dirs:     src
-  build-depends:
-    , algebraic-graphs    >=0.6 && <0.8
-    , base                >=4.7 && <5
-    , bytestring          >=0.11.3 && <0.13
-    , chart-svg           >=0.3 && < 0.5
-    , containers          ^>=0.6
-    , flatparse           >=0.3.2 && <0.6
-    , numhask-space       >=0.10 && <0.12
-    , optics-core         ^>=0.4
-    , process-extras      ^>=0.7.4
-    , string-interpolate ^>=0.3
-    , template-haskell    >=2.16 && < 2.21
-    , text                >=1.2 && <2.1
-    , these               >=1.1.1 && < 1.3
+    if impl ( ghc < 9.2 ) && impl ( ghc >= 8.10 )
+        default-extensions:
+            ImportQualifiedPost
+            StandaloneKindSignatures
 
-  exposed-modules:
-    DotParse
-    DotParse.Examples
-    DotParse.Examples.NumHask
-    DotParse.FlatParse
-    DotParse.FlatParse.TH
-    DotParse.Types
+library
+    import: ghc-options-stanza
+    import: ghc2021-stanza
+    hs-source-dirs: src
+    build-depends:
+        , algebraic-graphs   >=0.6 && <0.8
+        , base               >=4.7 && <5
+        , bytestring         >=0.11.3 && <0.13
+        , chart-svg          >=0.6 && <0.7
+        , containers         >=0.6 && <0.8
+        , flatparse          >=0.3.5 && <0.6
+        , numhask-space      >=0.10 && <0.12
+        , optics-core        >=0.4 && <0.5
+        , process-extras     >=0.7.4 && <0.8
+        , string-interpolate >=0.3 && <0.4
+        , template-haskell   >=2.16 && <2.22
+        , text               >=1.2 && <2.2
+        , these              >=1.1 && <1.3
+    exposed-modules:
+        DotParse
+        DotParse.Examples
+        DotParse.Examples.AST
+        DotParse.Examples.NumHask
+        DotParse.FlatParse
+        DotParse.FlatParse.TH
+        DotParse.Types
diff --git a/other/ast.svg b/other/ast.svg
new file mode 100644
--- /dev/null
+++ b/other/ast.svg
@@ -0,0 +1,1114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 9.0.0 (20230911.1827)
+ -->
+<!-- Pages: 1 -->
+<svg width="339pt" height="360pt"
+ viewBox="0.00 0.00 339.06 360.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(0.200865 0.200865) rotate(0) translate(4 1788.25)">
+<polygon fill="white" stroke="none" points="-4,4 -4,-1788.25 1684,-1788.25 1684,4 -4,4"/>
+<!-- Tree -->
+<g id="node1" class="node">
+<title>Tree</title>
+<g id="a_node1"><a xlink:href="https://hackage.haskell.org/package/containers/docs/Data-Tree.html#t:Tree" xlink:title="&lt;xTree&gt; Tree">
+<polygon fill="none" stroke="black" points="401.75,-1397 401.75,-1433 455.75,-1433 455.75,-1397 401.75,-1397"/>
+<text text-anchor="middle" x="428.75" y="-1410.2" font-family="Times,serif" font-size="14.00">Tree</text>
+</a>
+</g>
+</g>
+<!-- TitleOptions -->
+<g id="node2" class="node">
+<title>TitleOptions</title>
+<g id="a_node2"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:TitleOptions" xlink:title="&lt;xTitleOptions&gt; TitleOptions| &lt;xtext&gt; text| &lt;xstyle&gt; style| &lt;xplace&gt; place| &lt;xbuffer&gt; buffer| &lt;xanchor&gt; anchor">
+<polygon fill="none" stroke="black" points="632.12,-1192.5 632.12,-1339.5 716.38,-1339.5 716.38,-1192.5 632.12,-1192.5"/>
+<text text-anchor="middle" x="674.25" y="-1322.2" font-family="Times,serif" font-size="14.00">TitleOptions</text>
+<polyline fill="none" stroke="black" points="632.12,-1315 716.38,-1315"/>
+<text text-anchor="middle" x="674.25" y="-1297.7" font-family="Times,serif" font-size="14.00">text</text>
+<polyline fill="none" stroke="black" points="632.12,-1290.5 716.38,-1290.5"/>
+<text text-anchor="middle" x="674.25" y="-1273.2" font-family="Times,serif" font-size="14.00">style</text>
+<polyline fill="none" stroke="black" points="632.12,-1266 716.38,-1266"/>
+<text text-anchor="middle" x="674.25" y="-1248.7" font-family="Times,serif" font-size="14.00">place</text>
+<polyline fill="none" stroke="black" points="632.12,-1241.5 716.38,-1241.5"/>
+<text text-anchor="middle" x="674.25" y="-1224.2" font-family="Times,serif" font-size="14.00">buffer</text>
+<polyline fill="none" stroke="black" points="632.12,-1217 716.38,-1217"/>
+<text text-anchor="middle" x="674.25" y="-1199.7" font-family="Times,serif" font-size="14.00">anchor</text>
+</a>
+</g>
+</g>
+<!-- Style -->
+<g id="node7" class="node">
+<title>Style</title>
+<g id="a_node7"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Style.html#t:Style" xlink:title="&lt;xStyle&gt; Style| &lt;xvsize&gt; vsize| &lt;xvshift&gt; vshift| &lt;xtranslate&gt; translate| &lt;xsize&gt; size| &lt;xscaleP&gt; scaleP| &lt;xrotation&gt; rotation| &lt;xlineJoin&gt; lineJoin| &lt;xlineCap&gt; lineCap| &lt;xhsize&gt; hsize| &lt;xglyphShape&gt; glyphShape| &lt;xframe&gt; frame| &lt;xescapeText&gt; escapeText| &lt;xdashoffset&gt; dashoffset| &lt;xdasharray&gt; dasharray| &lt;xcolor&gt; color| &lt;xborderSize&gt; borderSize| &lt;xborderColor&gt; borderColor| &lt;xanchor&gt; anchor">
+<polygon fill="none" stroke="black" points="1136.62,-670.25 1136.62,-1135.75 1218.62,-1135.75 1218.62,-670.25 1136.62,-670.25"/>
+<text text-anchor="middle" x="1177.62" y="-1118.45" font-family="Times,serif" font-size="14.00">Style</text>
+<polyline fill="none" stroke="black" points="1136.62,-1111.25 1218.62,-1111.25"/>
+<text text-anchor="middle" x="1177.62" y="-1093.95" font-family="Times,serif" font-size="14.00">vsize</text>
+<polyline fill="none" stroke="black" points="1136.62,-1086.75 1218.62,-1086.75"/>
+<text text-anchor="middle" x="1177.62" y="-1069.45" font-family="Times,serif" font-size="14.00">vshift</text>
+<polyline fill="none" stroke="black" points="1136.62,-1062.25 1218.62,-1062.25"/>
+<text text-anchor="middle" x="1177.62" y="-1044.95" font-family="Times,serif" font-size="14.00">translate</text>
+<polyline fill="none" stroke="black" points="1136.62,-1037.75 1218.62,-1037.75"/>
+<text text-anchor="middle" x="1177.62" y="-1020.45" font-family="Times,serif" font-size="14.00">size</text>
+<polyline fill="none" stroke="black" points="1136.62,-1013.25 1218.62,-1013.25"/>
+<text text-anchor="middle" x="1177.62" y="-995.95" font-family="Times,serif" font-size="14.00">scaleP</text>
+<polyline fill="none" stroke="black" points="1136.62,-988.75 1218.62,-988.75"/>
+<text text-anchor="middle" x="1177.62" y="-971.45" font-family="Times,serif" font-size="14.00">rotation</text>
+<polyline fill="none" stroke="black" points="1136.62,-964.25 1218.62,-964.25"/>
+<text text-anchor="middle" x="1177.62" y="-946.95" font-family="Times,serif" font-size="14.00">lineJoin</text>
+<polyline fill="none" stroke="black" points="1136.62,-939.75 1218.62,-939.75"/>
+<text text-anchor="middle" x="1177.62" y="-922.45" font-family="Times,serif" font-size="14.00">lineCap</text>
+<polyline fill="none" stroke="black" points="1136.62,-915.25 1218.62,-915.25"/>
+<text text-anchor="middle" x="1177.62" y="-897.95" font-family="Times,serif" font-size="14.00">hsize</text>
+<polyline fill="none" stroke="black" points="1136.62,-890.75 1218.62,-890.75"/>
+<text text-anchor="middle" x="1177.62" y="-873.45" font-family="Times,serif" font-size="14.00">glyphShape</text>
+<polyline fill="none" stroke="black" points="1136.62,-866.25 1218.62,-866.25"/>
+<text text-anchor="middle" x="1177.62" y="-848.95" font-family="Times,serif" font-size="14.00">frame</text>
+<polyline fill="none" stroke="black" points="1136.62,-841.75 1218.62,-841.75"/>
+<text text-anchor="middle" x="1177.62" y="-824.45" font-family="Times,serif" font-size="14.00">escapeText</text>
+<polyline fill="none" stroke="black" points="1136.62,-817.25 1218.62,-817.25"/>
+<text text-anchor="middle" x="1177.62" y="-799.95" font-family="Times,serif" font-size="14.00">dashoffset</text>
+<polyline fill="none" stroke="black" points="1136.62,-792.75 1218.62,-792.75"/>
+<text text-anchor="middle" x="1177.62" y="-775.45" font-family="Times,serif" font-size="14.00">dasharray</text>
+<polyline fill="none" stroke="black" points="1136.62,-768.25 1218.62,-768.25"/>
+<text text-anchor="middle" x="1177.62" y="-750.95" font-family="Times,serif" font-size="14.00">color</text>
+<polyline fill="none" stroke="black" points="1136.62,-743.75 1218.62,-743.75"/>
+<text text-anchor="middle" x="1177.62" y="-726.45" font-family="Times,serif" font-size="14.00">borderSize</text>
+<polyline fill="none" stroke="black" points="1136.62,-719.25 1218.62,-719.25"/>
+<text text-anchor="middle" x="1177.62" y="-701.95" font-family="Times,serif" font-size="14.00">borderColor</text>
+<polyline fill="none" stroke="black" points="1136.62,-694.75 1218.62,-694.75"/>
+<text text-anchor="middle" x="1177.62" y="-677.45" font-family="Times,serif" font-size="14.00">anchor</text>
+</a>
+</g>
+</g>
+<!-- TitleOptions&#45;&gt;Style -->
+<g id="edge1" class="edge">
+<title>TitleOptions:xstyle&#45;&gt;Style:xStyle</title>
+<path fill="none" stroke="black" d="M717.25,-1278C743.47,-1278 739.84,-1304.81 764.75,-1313 807.82,-1327.15 823.3,-1325.92 866.75,-1313 976.73,-1280.31 992.26,-1242.22 1083,-1172 1106.18,-1154.06 1104.41,-1128.2 1129.14,-1124.46"/>
+<polygon fill="black" stroke="black" points="1129.25,-1126.2 1134.12,-1124.11 1129,-1122.71 1129.25,-1126.2"/>
+</g>
+<!-- Place -->
+<g id="node15" class="node">
+<title>Place</title>
+<g id="a_node15"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:Place" xlink:title="&lt;xPlace&gt; Place| &lt;xPlaceTop&gt; PlaceTop| &lt;xPlaceRight&gt; PlaceRight| &lt;xPlaceLeft&gt; PlaceLeft| &lt;xPlaceBottom&gt; PlaceBottom| &lt;xPlaceAbsolute&gt; PlaceAbsolute">
+<polygon fill="none" stroke="black" points="884.75,-919.5 884.75,-1066.5 978.75,-1066.5 978.75,-919.5 884.75,-919.5"/>
+<text text-anchor="middle" x="931.75" y="-1049.2" font-family="Times,serif" font-size="14.00">Place</text>
+<polyline fill="none" stroke="black" points="884.75,-1042 978.75,-1042"/>
+<text text-anchor="middle" x="931.75" y="-1024.7" font-family="Times,serif" font-size="14.00">PlaceTop</text>
+<polyline fill="none" stroke="black" points="884.75,-1017.5 978.75,-1017.5"/>
+<text text-anchor="middle" x="931.75" y="-1000.2" font-family="Times,serif" font-size="14.00">PlaceRight</text>
+<polyline fill="none" stroke="black" points="884.75,-993 978.75,-993"/>
+<text text-anchor="middle" x="931.75" y="-975.7" font-family="Times,serif" font-size="14.00">PlaceLeft</text>
+<polyline fill="none" stroke="black" points="884.75,-968.5 978.75,-968.5"/>
+<text text-anchor="middle" x="931.75" y="-951.2" font-family="Times,serif" font-size="14.00">PlaceBottom</text>
+<polyline fill="none" stroke="black" points="884.75,-944 978.75,-944"/>
+<text text-anchor="middle" x="931.75" y="-926.7" font-family="Times,serif" font-size="14.00">PlaceAbsolute</text>
+</a>
+</g>
+</g>
+<!-- TitleOptions&#45;&gt;Place -->
+<g id="edge2" class="edge">
+<title>TitleOptions:xplace&#45;&gt;Place:xPlace</title>
+<path fill="none" stroke="black" d="M717.25,-1254C751.42,-1254 737.49,-1215.89 746.75,-1183 753.76,-1158.1 746.11,-1085.93 764.75,-1068 801.87,-1032.31 828.77,-1052.2 878.27,-1053.89"/>
+<polygon fill="black" stroke="black" points="878.21,-1055.64 883.24,-1053.97 878.27,-1052.14 878.21,-1055.64"/>
+</g>
+<!-- Anchor -->
+<g id="node38" class="node">
+<title>Anchor</title>
+<g id="a_node38"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Style.html#t:Anchor" xlink:title="&lt;xAnchor&gt; Anchor| &lt;xAnchorStart&gt; AnchorStart| &lt;xAnchorMiddle&gt; AnchorMiddle| &lt;xAnchorEnd&gt; AnchorEnd">
+<polygon fill="none" stroke="black" points="1375.75,-739 1375.75,-837 1472,-837 1472,-739 1375.75,-739"/>
+<text text-anchor="middle" x="1423.88" y="-819.7" font-family="Times,serif" font-size="14.00">Anchor</text>
+<polyline fill="none" stroke="black" points="1375.75,-812.5 1472,-812.5"/>
+<text text-anchor="middle" x="1423.88" y="-795.2" font-family="Times,serif" font-size="14.00">AnchorStart</text>
+<polyline fill="none" stroke="black" points="1375.75,-788 1472,-788"/>
+<text text-anchor="middle" x="1423.88" y="-770.7" font-family="Times,serif" font-size="14.00">AnchorMiddle</text>
+<polyline fill="none" stroke="black" points="1375.75,-763.5 1472,-763.5"/>
+<text text-anchor="middle" x="1423.88" y="-746.2" font-family="Times,serif" font-size="14.00">AnchorEnd</text>
+</a>
+</g>
+</g>
+<!-- TitleOptions&#45;&gt;Anchor -->
+<g id="edge3" class="edge">
+<title>TitleOptions:xanchor&#45;&gt;Anchor:xAnchor</title>
+<path fill="none" stroke="black" d="M717.25,-1205C792.52,-1205 809.69,-1224.43 884.75,-1230 1052.8,-1242.47 1105.06,-1223.35 1254.25,-1145 1299.36,-1121.31 1320.23,-1118.93 1344.25,-1074 1368.11,-1029.38 1327.67,-883.94 1362.25,-847 1370.08,-838.63 1407.2,-847.44 1419.73,-842.86"/>
+<polygon fill="black" stroke="black" points="1420.98,-844.09 1422.89,-839.15 1418.32,-841.82 1420.98,-844.09"/>
+</g>
+<!-- Ticks -->
+<g id="node3" class="node">
+<title>Ticks</title>
+<g id="a_node3"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:Ticks" xlink:title="&lt;xTicks&gt; Ticks| &lt;xtick&gt; tick| &lt;xtextTick&gt; textTick| &lt;xlineTick&gt; lineTick| &lt;xglyphTick&gt; glyphTick">
+<polygon fill="none" stroke="black" points="638.5,-599.75 638.5,-722.25 710,-722.25 710,-599.75 638.5,-599.75"/>
+<text text-anchor="middle" x="674.25" y="-704.95" font-family="Times,serif" font-size="14.00">Ticks</text>
+<polyline fill="none" stroke="black" points="638.5,-697.75 710,-697.75"/>
+<text text-anchor="middle" x="674.25" y="-680.45" font-family="Times,serif" font-size="14.00">tick</text>
+<polyline fill="none" stroke="black" points="638.5,-673.25 710,-673.25"/>
+<text text-anchor="middle" x="674.25" y="-655.95" font-family="Times,serif" font-size="14.00">textTick</text>
+<polyline fill="none" stroke="black" points="638.5,-648.75 710,-648.75"/>
+<text text-anchor="middle" x="674.25" y="-631.45" font-family="Times,serif" font-size="14.00">lineTick</text>
+<polyline fill="none" stroke="black" points="638.5,-624.25 710,-624.25"/>
+<text text-anchor="middle" x="674.25" y="-606.95" font-family="Times,serif" font-size="14.00">glyphTick</text>
+</a>
+</g>
+</g>
+<!-- TickStyle -->
+<g id="node4" class="node">
+<title>TickStyle</title>
+<g id="a_node4"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:TickStyle" xlink:title="&lt;xTickStyle&gt; TickStyle| &lt;xstyle&gt; style| &lt;xbuffer&gt; buffer| &lt;xanchorTo&gt; anchorTo">
+<polygon fill="none" stroke="black" points="897.5,-510 897.5,-608 966,-608 966,-510 897.5,-510"/>
+<text text-anchor="middle" x="931.75" y="-590.7" font-family="Times,serif" font-size="14.00">TickStyle</text>
+<polyline fill="none" stroke="black" points="897.5,-583.5 966,-583.5"/>
+<text text-anchor="middle" x="931.75" y="-566.2" font-family="Times,serif" font-size="14.00">style</text>
+<polyline fill="none" stroke="black" points="897.5,-559 966,-559"/>
+<text text-anchor="middle" x="931.75" y="-541.7" font-family="Times,serif" font-size="14.00">buffer</text>
+<polyline fill="none" stroke="black" points="897.5,-534.5 966,-534.5"/>
+<text text-anchor="middle" x="931.75" y="-517.2" font-family="Times,serif" font-size="14.00">anchorTo</text>
+</a>
+</g>
+</g>
+<!-- Ticks&#45;&gt;TickStyle -->
+<g id="edge5" class="edge">
+<title>Ticks:xtextTick&#45;&gt;TickStyle:xTickStyle</title>
+<path fill="none" stroke="black" d="M711.25,-661C780.43,-661 808.94,-692 866.75,-654 888.92,-639.43 871.38,-603.04 890.36,-596.89"/>
+<polygon fill="black" stroke="black" points="890.54,-598.63 895.25,-596.21 890.06,-595.16 890.54,-598.63"/>
+<text text-anchor="middle" x="815.75" y="-675.2" font-family="Times,serif" font-size="14.00">_Just</text>
+</g>
+<!-- Ticks&#45;&gt;TickStyle -->
+<g id="edge6" class="edge">
+<title>Ticks:xlineTick&#45;&gt;TickStyle:xTickStyle</title>
+<path fill="none" stroke="black" d="M711.25,-636C746.15,-636 833.85,-625.65 866.75,-614 879.12,-609.62 880.9,-599.82 890.5,-596.86"/>
+<polygon fill="black" stroke="black" points="890.54,-598.62 895.25,-596.21 890.06,-595.15 890.54,-598.62"/>
+<text text-anchor="middle" x="815.75" y="-635.2" font-family="Times,serif" font-size="14.00">_Just</text>
+</g>
+<!-- Ticks&#45;&gt;TickStyle -->
+<g id="edge7" class="edge">
+<title>Ticks:xglyphTick&#45;&gt;TickStyle:xTickStyle</title>
+<path fill="none" stroke="black" d="M711.25,-612C736.41,-612 739.94,-597.67 764.75,-593.5 809.46,-585.99 821.46,-591.62 866.75,-593.5 877.82,-593.96 881.95,-595.37 890.65,-595.84"/>
+<polygon fill="black" stroke="black" points="890.19,-597.58 895.24,-595.96 890.28,-594.08 890.19,-597.58"/>
+<text text-anchor="middle" x="815.75" y="-596.2" font-family="Times,serif" font-size="14.00">_Just</text>
+</g>
+<!-- Tick -->
+<g id="node6" class="node">
+<title>Tick</title>
+<g id="a_node6"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:Tick" xlink:title="&lt;xTick&gt; Tick| &lt;xtickExtend&#39;&gt; tickExtend&#39;| &lt;xnumTicks&#39;&gt; numTicks&#39;| &lt;xformatN&#39;&gt; formatN&#39;| &lt;xTickRound&gt; TickRound| &lt;xTickPlaced&gt; TickPlaced| &lt;xTickNone&gt; TickNone| &lt;xTickLabels&gt; TickLabels| &lt;xTickExact&gt; TickExact">
+<polygon fill="none" stroke="black" points="893.38,-626.75 893.38,-847.25 970.12,-847.25 970.12,-626.75 893.38,-626.75"/>
+<text text-anchor="middle" x="931.75" y="-829.95" font-family="Times,serif" font-size="14.00">Tick</text>
+<polyline fill="none" stroke="black" points="893.38,-822.75 970.12,-822.75"/>
+<text text-anchor="middle" x="931.75" y="-805.45" font-family="Times,serif" font-size="14.00">tickExtend&#39;</text>
+<polyline fill="none" stroke="black" points="893.38,-798.25 970.12,-798.25"/>
+<text text-anchor="middle" x="931.75" y="-780.95" font-family="Times,serif" font-size="14.00">numTicks&#39;</text>
+<polyline fill="none" stroke="black" points="893.38,-773.75 970.12,-773.75"/>
+<text text-anchor="middle" x="931.75" y="-756.45" font-family="Times,serif" font-size="14.00">formatN&#39;</text>
+<polyline fill="none" stroke="black" points="893.38,-749.25 970.12,-749.25"/>
+<text text-anchor="middle" x="931.75" y="-731.95" font-family="Times,serif" font-size="14.00">TickRound</text>
+<polyline fill="none" stroke="black" points="893.38,-724.75 970.12,-724.75"/>
+<text text-anchor="middle" x="931.75" y="-707.45" font-family="Times,serif" font-size="14.00">TickPlaced</text>
+<polyline fill="none" stroke="black" points="893.38,-700.25 970.12,-700.25"/>
+<text text-anchor="middle" x="931.75" y="-682.95" font-family="Times,serif" font-size="14.00">TickNone</text>
+<polyline fill="none" stroke="black" points="893.38,-675.75 970.12,-675.75"/>
+<text text-anchor="middle" x="931.75" y="-658.45" font-family="Times,serif" font-size="14.00">TickLabels</text>
+<polyline fill="none" stroke="black" points="893.38,-651.25 970.12,-651.25"/>
+<text text-anchor="middle" x="931.75" y="-633.95" font-family="Times,serif" font-size="14.00">TickExact</text>
+</a>
+</g>
+</g>
+<!-- Ticks&#45;&gt;Tick -->
+<g id="edge4" class="edge">
+<title>Ticks:xtick&#45;&gt;Tick:xTick</title>
+<path fill="none" stroke="black" d="M711.25,-686C813.48,-686 789.44,-828.95 886.49,-834.81"/>
+<polygon fill="black" stroke="black" points="886.19,-836.56 891.24,-834.96 886.29,-833.06 886.19,-836.56"/>
+<text text-anchor="middle" x="815.75" y="-833.2" font-family="Times,serif" font-size="14.00">_Just</text>
+</g>
+<!-- TickStyle&#45;&gt;Style -->
+<g id="edge8" class="edge">
+<title>TickStyle:xstyle&#45;&gt;Style:xStyle</title>
+<path fill="none" stroke="black" d="M966.75,-571C1018.79,-571 1046.62,-547.79 1083,-585 1123.59,-626.51 1078.83,-1089.69 1129.68,-1122.2"/>
+<polygon fill="black" stroke="black" points="1128.88,-1123.79 1134.18,-1123.56 1129.9,-1120.44 1128.88,-1123.79"/>
+</g>
+<!-- HudChartSection -->
+<g id="node22" class="node">
+<title>HudChartSection</title>
+<g id="a_node22"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:HudChartSection" xlink:title="&lt;xHudChartSection&gt; HudChartSection| &lt;xHudStyleSection&gt; HudStyleSection| &lt;xHudSection&gt; HudSection| &lt;xCanvasStyleSection&gt; CanvasStyleSection| &lt;xCanvasSection&gt; CanvasSection">
+<polygon fill="none" stroke="black" points="1115.62,-245.75 1115.62,-368.25 1239.62,-368.25 1239.62,-245.75 1115.62,-245.75"/>
+<text text-anchor="middle" x="1177.62" y="-350.95" font-family="Times,serif" font-size="14.00">HudChartSection</text>
+<polyline fill="none" stroke="black" points="1115.62,-343.75 1239.62,-343.75"/>
+<text text-anchor="middle" x="1177.62" y="-326.45" font-family="Times,serif" font-size="14.00">HudStyleSection</text>
+<polyline fill="none" stroke="black" points="1115.62,-319.25 1239.62,-319.25"/>
+<text text-anchor="middle" x="1177.62" y="-301.95" font-family="Times,serif" font-size="14.00">HudSection</text>
+<polyline fill="none" stroke="black" points="1115.62,-294.75 1239.62,-294.75"/>
+<text text-anchor="middle" x="1177.62" y="-277.45" font-family="Times,serif" font-size="14.00">CanvasStyleSection</text>
+<polyline fill="none" stroke="black" points="1115.62,-270.25 1239.62,-270.25"/>
+<text text-anchor="middle" x="1177.62" y="-252.95" font-family="Times,serif" font-size="14.00">CanvasSection</text>
+</a>
+</g>
+</g>
+<!-- TickStyle&#45;&gt;HudChartSection -->
+<g id="edge9" class="edge">
+<title>TickStyle:xanchorTo&#45;&gt;HudChartSection:xHudChartSection</title>
+<path fill="none" stroke="black" d="M966.75,-522C977.89,-522 974.01,-510.08 978.75,-500 987.92,-480.51 984.12,-472.45 996.75,-455 1005.91,-442.33 1082.52,-370.11 1108.68,-357.79"/>
+<polygon fill="black" stroke="black" points="1108.89,-359.55 1113.18,-356.44 1107.88,-356.2 1108.89,-359.55"/>
+</g>
+<!-- TickExtend -->
+<g id="node5" class="node">
+<title>TickExtend</title>
+<g id="a_node5"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:TickExtend" xlink:title="&lt;xTickExtend&gt; TickExtend| &lt;xNoTickExtend&gt; NoTickExtend">
+<polygon fill="none" stroke="black" points="1129.88,-602.5 1129.88,-651.5 1225.38,-651.5 1225.38,-602.5 1129.88,-602.5"/>
+<text text-anchor="middle" x="1177.62" y="-634.2" font-family="Times,serif" font-size="14.00">TickExtend</text>
+<polyline fill="none" stroke="black" points="1129.88,-627 1225.38,-627"/>
+<text text-anchor="middle" x="1177.62" y="-609.7" font-family="Times,serif" font-size="14.00">NoTickExtend</text>
+</a>
+</g>
+</g>
+<!-- Tick&#45;&gt;TickExtend -->
+<g id="edge10" class="edge">
+<title>Tick:xtickExtend&#39;&#45;&gt;TickExtend:xTickExtend</title>
+<path fill="none" stroke="black" d="M970.75,-811C1072.29,-811 1026.92,-646.31 1122.15,-639.23"/>
+<polygon fill="black" stroke="black" points="1122.18,-640.98 1127.11,-639.05 1122.05,-637.49 1122.18,-640.98"/>
+<text text-anchor="middle" x="1039.88" y="-809.2" font-family="Times,serif" font-size="14.00">_Just</text>
+</g>
+<!-- FormatN -->
+<g id="node25" class="node">
+<title>FormatN</title>
+<g id="a_node25"><a xlink:href="https://hackage.haskell.org/package/formatn/docs/Data-FormatN.html#t:FormatN" xlink:title="&lt;xFormatN&gt; FormatN| &lt;xsigFigs&gt; sigFigs| &lt;xmaxDistinguishIterations&gt; maxDistinguishIterations| &lt;xfstyle&gt; fstyle| &lt;xcutRightZeros&gt; cutRightZeros| &lt;xaddLPad&gt; addLPad">
+<polygon fill="none" stroke="black" points="1101,-414.5 1101,-561.5 1254.25,-561.5 1254.25,-414.5 1101,-414.5"/>
+<text text-anchor="middle" x="1177.62" y="-544.2" font-family="Times,serif" font-size="14.00">FormatN</text>
+<polyline fill="none" stroke="black" points="1101,-537 1254.25,-537"/>
+<text text-anchor="middle" x="1177.62" y="-519.7" font-family="Times,serif" font-size="14.00">sigFigs</text>
+<polyline fill="none" stroke="black" points="1101,-512.5 1254.25,-512.5"/>
+<text text-anchor="middle" x="1177.62" y="-495.2" font-family="Times,serif" font-size="14.00">maxDistinguishIterations</text>
+<polyline fill="none" stroke="black" points="1101,-488 1254.25,-488"/>
+<text text-anchor="middle" x="1177.62" y="-470.7" font-family="Times,serif" font-size="14.00">fstyle</text>
+<polyline fill="none" stroke="black" points="1101,-463.5 1254.25,-463.5"/>
+<text text-anchor="middle" x="1177.62" y="-446.2" font-family="Times,serif" font-size="14.00">cutRightZeros</text>
+<polyline fill="none" stroke="black" points="1101,-439 1254.25,-439"/>
+<text text-anchor="middle" x="1177.62" y="-421.7" font-family="Times,serif" font-size="14.00">addLPad</text>
+</a>
+</g>
+</g>
+<!-- Tick&#45;&gt;FormatN -->
+<g id="edge11" class="edge">
+<title>Tick:xformatN&#39;&#45;&gt;FormatN:xFormatN</title>
+<path fill="none" stroke="black" d="M970.75,-762C1028.15,-762 967.22,-684.72 996.75,-635.5 1026.58,-585.79 1039.8,-551.61 1094.49,-549.14"/>
+<polygon fill="black" stroke="black" points="1094.53,-550.89 1099.49,-549.03 1094.45,-547.39 1094.53,-550.89"/>
+<text text-anchor="middle" x="1039.88" y="-638.2" font-family="Times,serif" font-size="14.00">_Just</text>
+</g>
+<!-- Style&#45;&gt;Style -->
+<g id="edge17" class="edge">
+<title>Style:xframe&#45;&gt;Style:xStyle</title>
+<path fill="none" stroke="black" d="M1136.16,-852.56C1104.05,-859.77 1071.31,-891.12 1071.31,-989 1071.31,-1080.76 1100.09,-1114.05 1130.14,-1123.8"/>
+<polygon fill="black" stroke="black" points="1129.41,-1125.41 1134.7,-1125.04 1130.34,-1122.04 1129.41,-1125.41"/>
+<text text-anchor="middle" x="1057.44" y="-897.95" font-family="Times,serif" font-size="14.00">_Just</text>
+</g>
+<!-- ScaleP -->
+<g id="node9" class="node">
+<title>ScaleP</title>
+<g id="a_node9"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Style.html#t:ScaleP" xlink:title="&lt;xScaleP&gt; ScaleP| &lt;xScalePY&gt; ScalePY| &lt;xScalePX&gt; ScalePX| &lt;xScalePMinDim&gt; ScalePMinDim| &lt;xScalePArea&gt; ScalePArea| &lt;xNoScaleP&gt; NoScaleP">
+<polygon fill="none" stroke="black" points="1373.5,-1090.5 1373.5,-1237.5 1474.25,-1237.5 1474.25,-1090.5 1373.5,-1090.5"/>
+<text text-anchor="middle" x="1423.88" y="-1220.2" font-family="Times,serif" font-size="14.00">ScaleP</text>
+<polyline fill="none" stroke="black" points="1373.5,-1213 1474.25,-1213"/>
+<text text-anchor="middle" x="1423.88" y="-1195.7" font-family="Times,serif" font-size="14.00">ScalePY</text>
+<polyline fill="none" stroke="black" points="1373.5,-1188.5 1474.25,-1188.5"/>
+<text text-anchor="middle" x="1423.88" y="-1171.2" font-family="Times,serif" font-size="14.00">ScalePX</text>
+<polyline fill="none" stroke="black" points="1373.5,-1164 1474.25,-1164"/>
+<text text-anchor="middle" x="1423.88" y="-1146.7" font-family="Times,serif" font-size="14.00">ScalePMinDim</text>
+<polyline fill="none" stroke="black" points="1373.5,-1139.5 1474.25,-1139.5"/>
+<text text-anchor="middle" x="1423.88" y="-1122.2" font-family="Times,serif" font-size="14.00">ScalePArea</text>
+<polyline fill="none" stroke="black" points="1373.5,-1115 1474.25,-1115"/>
+<text text-anchor="middle" x="1423.88" y="-1097.7" font-family="Times,serif" font-size="14.00">NoScaleP</text>
+</a>
+</g>
+</g>
+<!-- Style&#45;&gt;ScaleP -->
+<g id="edge13" class="edge">
+<title>Style:xscaleP&#45;&gt;ScaleP:xScaleP</title>
+<path fill="none" stroke="black" d="M1219.62,-1001C1233.58,-1001 1340.12,-1192.98 1367.82,-1221.48"/>
+<polygon fill="black" stroke="black" points="1366.53,-1222.71 1371.63,-1224.14 1368.53,-1219.84 1366.53,-1222.71"/>
+</g>
+<!-- Point -->
+<g id="node14" class="node">
+<title>Point</title>
+<g id="a_node14"><a xlink:href="https://hackage.haskell.org/package/numhask-space/docs/NumHask-Space-Point.html#t:Point" xlink:title="&lt;xPoint&gt; Point| &lt;x_y&gt; _y| &lt;x_x&gt; _x">
+<polygon fill="none" stroke="black" points="1618,-1265.25 1618,-1338.75 1672,-1338.75 1672,-1265.25 1618,-1265.25"/>
+<text text-anchor="middle" x="1645" y="-1321.45" font-family="Times,serif" font-size="14.00">Point</text>
+<polyline fill="none" stroke="black" points="1618,-1314.25 1672,-1314.25"/>
+<text text-anchor="middle" x="1645" y="-1296.95" font-family="Times,serif" font-size="14.00">_y</text>
+<polyline fill="none" stroke="black" points="1618,-1289.75 1672,-1289.75"/>
+<text text-anchor="middle" x="1645" y="-1272.45" font-family="Times,serif" font-size="14.00">_x</text>
+</a>
+</g>
+</g>
+<!-- Style&#45;&gt;Point -->
+<g id="edge12" class="edge">
+<title>Style:xtranslate&#45;&gt;Point:xPoint</title>
+<path fill="none" stroke="black" d="M1219.62,-1050C1268.67,-1050 1243.95,-1106.94 1272.25,-1147 1306.75,-1195.84 1311.81,-1214.89 1362.25,-1247 1452.3,-1304.32 1491.3,-1281.59 1592,-1317 1601,-1320.16 1603.93,-1324.64 1610.81,-1326.32"/>
+<polygon fill="black" stroke="black" points="1610.33,-1328.03 1615.5,-1326.84 1610.72,-1324.55 1610.33,-1328.03"/>
+<text text-anchor="middle" x="1423.88" y="-1295.2" font-family="Times,serif" font-size="14.00">_Just</text>
+</g>
+<!-- LineJoin -->
+<g id="node18" class="node">
+<title>LineJoin</title>
+<g id="a_node18"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Style.html#t:LineJoin" xlink:title="&lt;xLineJoin&gt; LineJoin| &lt;xLineJoinRound&gt; LineJoinRound| &lt;xLineJoinMiter&gt; LineJoinMiter| &lt;xLineJoinBevel&gt; LineJoinBevel">
+<polygon fill="none" stroke="black" points="1374.25,-973 1374.25,-1071 1473.5,-1071 1473.5,-973 1374.25,-973"/>
+<text text-anchor="middle" x="1423.88" y="-1053.7" font-family="Times,serif" font-size="14.00">LineJoin</text>
+<polyline fill="none" stroke="black" points="1374.25,-1046.5 1473.5,-1046.5"/>
+<text text-anchor="middle" x="1423.88" y="-1029.2" font-family="Times,serif" font-size="14.00">LineJoinRound</text>
+<polyline fill="none" stroke="black" points="1374.25,-1022 1473.5,-1022"/>
+<text text-anchor="middle" x="1423.88" y="-1004.7" font-family="Times,serif" font-size="14.00">LineJoinMiter</text>
+<polyline fill="none" stroke="black" points="1374.25,-997.5 1473.5,-997.5"/>
+<text text-anchor="middle" x="1423.88" y="-980.2" font-family="Times,serif" font-size="14.00">LineJoinBevel</text>
+</a>
+</g>
+</g>
+<!-- Style&#45;&gt;LineJoin -->
+<g id="edge14" class="edge">
+<title>Style:xlineJoin&#45;&gt;LineJoin:xLineJoin</title>
+<path fill="none" stroke="black" d="M1219.62,-952C1300.59,-952 1290.4,-1053.64 1366.73,-1058.8"/>
+<polygon fill="black" stroke="black" points="1366.31,-1060.53 1371.36,-1058.95 1366.42,-1057.04 1366.31,-1060.53"/>
+<text text-anchor="middle" x="1308.25" y="-1056.2" font-family="Times,serif" font-size="14.00">_Just</text>
+</g>
+<!-- LineCap -->
+<g id="node19" class="node">
+<title>LineCap</title>
+<g id="a_node19"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Style.html#t:LineCap" xlink:title="&lt;xLineCap&gt; LineCap| &lt;xLineCapSquare&gt; LineCapSquare| &lt;xLineCapRound&gt; LineCapRound| &lt;xLineCapButt&gt; LineCapButt">
+<polygon fill="none" stroke="black" points="1373.88,-856 1373.88,-954 1473.88,-954 1473.88,-856 1373.88,-856"/>
+<text text-anchor="middle" x="1423.88" y="-936.7" font-family="Times,serif" font-size="14.00">LineCap</text>
+<polyline fill="none" stroke="black" points="1373.88,-929.5 1473.88,-929.5"/>
+<text text-anchor="middle" x="1423.88" y="-912.2" font-family="Times,serif" font-size="14.00">LineCapSquare</text>
+<polyline fill="none" stroke="black" points="1373.88,-905 1473.88,-905"/>
+<text text-anchor="middle" x="1423.88" y="-887.7" font-family="Times,serif" font-size="14.00">LineCapRound</text>
+<polyline fill="none" stroke="black" points="1373.88,-880.5 1473.88,-880.5"/>
+<text text-anchor="middle" x="1423.88" y="-863.2" font-family="Times,serif" font-size="14.00">LineCapButt</text>
+</a>
+</g>
+</g>
+<!-- Style&#45;&gt;LineCap -->
+<g id="edge15" class="edge">
+<title>Style:xlineCap&#45;&gt;LineCap:xLineCap</title>
+<path fill="none" stroke="black" d="M1219.62,-928C1285.88,-928 1303.4,-941.14 1366.61,-941.96"/>
+<polygon fill="black" stroke="black" points="1366.35,-943.71 1371.36,-941.99 1366.37,-940.21 1366.35,-943.71"/>
+<text text-anchor="middle" x="1308.25" y="-944.2" font-family="Times,serif" font-size="14.00">_Just</text>
+</g>
+<!-- GlyphShape -->
+<g id="node23" class="node">
+<title>GlyphShape</title>
+<g id="a_node23"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Style.html#t:GlyphShape" xlink:title="&lt;xGlyphShape&gt; GlyphShape| &lt;xVLineGlyph&gt; VLineGlyph| &lt;xTriangleGlyph&gt; TriangleGlyph| &lt;xSquareGlyph&gt; SquareGlyph| &lt;xRectSharpGlyph&gt; RectSharpGlyph| &lt;xRectRoundedGlyph&gt; RectRoundedGlyph| &lt;xPathGlyph&gt; PathGlyph| &lt;xHLineGlyph&gt; HLineGlyph| &lt;xEllipseGlyph&gt; EllipseGlyph| &lt;xCircleGlyph&gt; CircleGlyph">
+<polygon fill="none" stroke="black" points="1362.25,-474.5 1362.25,-719.5 1485.5,-719.5 1485.5,-474.5 1362.25,-474.5"/>
+<text text-anchor="middle" x="1423.88" y="-702.2" font-family="Times,serif" font-size="14.00">GlyphShape</text>
+<polyline fill="none" stroke="black" points="1362.25,-695 1485.5,-695"/>
+<text text-anchor="middle" x="1423.88" y="-677.7" font-family="Times,serif" font-size="14.00">VLineGlyph</text>
+<polyline fill="none" stroke="black" points="1362.25,-670.5 1485.5,-670.5"/>
+<text text-anchor="middle" x="1423.88" y="-653.2" font-family="Times,serif" font-size="14.00">TriangleGlyph</text>
+<polyline fill="none" stroke="black" points="1362.25,-646 1485.5,-646"/>
+<text text-anchor="middle" x="1423.88" y="-628.7" font-family="Times,serif" font-size="14.00">SquareGlyph</text>
+<polyline fill="none" stroke="black" points="1362.25,-621.5 1485.5,-621.5"/>
+<text text-anchor="middle" x="1423.88" y="-604.2" font-family="Times,serif" font-size="14.00">RectSharpGlyph</text>
+<polyline fill="none" stroke="black" points="1362.25,-597 1485.5,-597"/>
+<text text-anchor="middle" x="1423.88" y="-579.7" font-family="Times,serif" font-size="14.00">RectRoundedGlyph</text>
+<polyline fill="none" stroke="black" points="1362.25,-572.5 1485.5,-572.5"/>
+<text text-anchor="middle" x="1423.88" y="-555.2" font-family="Times,serif" font-size="14.00">PathGlyph</text>
+<polyline fill="none" stroke="black" points="1362.25,-548 1485.5,-548"/>
+<text text-anchor="middle" x="1423.88" y="-530.7" font-family="Times,serif" font-size="14.00">HLineGlyph</text>
+<polyline fill="none" stroke="black" points="1362.25,-523.5 1485.5,-523.5"/>
+<text text-anchor="middle" x="1423.88" y="-506.2" font-family="Times,serif" font-size="14.00">EllipseGlyph</text>
+<polyline fill="none" stroke="black" points="1362.25,-499 1485.5,-499"/>
+<text text-anchor="middle" x="1423.88" y="-481.7" font-family="Times,serif" font-size="14.00">CircleGlyph</text>
+</a>
+</g>
+</g>
+<!-- Style&#45;&gt;GlyphShape -->
+<g id="edge16" class="edge">
+<title>Style:xglyphShape&#45;&gt;GlyphShape:xGlyphShape</title>
+<path fill="none" stroke="black" d="M1219.62,-878C1293.22,-878 1216,-768.46 1272.25,-721 1301.5,-696.32 1319.7,-705.79 1355.8,-706.9"/>
+<polygon fill="black" stroke="black" points="1355.71,-708.65 1360.74,-706.98 1355.76,-705.15 1355.71,-708.65"/>
+</g>
+<!-- EscapeText -->
+<g id="node27" class="node">
+<title>EscapeText</title>
+<g id="a_node27"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Style.html#t:EscapeText" xlink:title="&lt;xEscapeText&gt; EscapeText| &lt;xNoEscapeText&gt; NoEscapeText">
+<polygon fill="none" stroke="black" points="1376.12,-406.5 1376.12,-455.5 1471.62,-455.5 1471.62,-406.5 1376.12,-406.5"/>
+<text text-anchor="middle" x="1423.88" y="-438.2" font-family="Times,serif" font-size="14.00">EscapeText</text>
+<polyline fill="none" stroke="black" points="1376.12,-431 1471.62,-431"/>
+<text text-anchor="middle" x="1423.88" y="-413.7" font-family="Times,serif" font-size="14.00">NoEscapeText</text>
+</a>
+</g>
+</g>
+<!-- Style&#45;&gt;EscapeText -->
+<g id="edge18" class="edge">
+<title>Style:xescapeText&#45;&gt;EscapeText:xEscapeText</title>
+<path fill="none" stroke="black" d="M1219.62,-829C1222.34,-829 1361.08,-467.45 1362.25,-465 1365.91,-457.38 1364.84,-448.81 1368.83,-445.01"/>
+<polygon fill="black" stroke="black" points="1369.25,-446.71 1373.44,-443.48 1368.14,-443.39 1369.25,-446.71"/>
+</g>
+<!-- Colour -->
+<g id="node29" class="node">
+<title>Colour</title>
+<g id="a_node29"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Data-Colour.html#t:Colour" xlink:title="&lt;xColour&gt; Colour| &lt;xopac&#39;&gt; opac&#39;| &lt;xlightness&#39;&gt; lightness&#39;| &lt;xhue&#39;&gt; hue&#39;| &lt;xchroma&#39;&gt; chroma&#39;">
+<polygon fill="none" stroke="black" points="1390.75,-264.75 1390.75,-387.25 1457,-387.25 1457,-264.75 1390.75,-264.75"/>
+<text text-anchor="middle" x="1423.88" y="-369.95" font-family="Times,serif" font-size="14.00">Colour</text>
+<polyline fill="none" stroke="black" points="1390.75,-362.75 1457,-362.75"/>
+<text text-anchor="middle" x="1423.88" y="-345.45" font-family="Times,serif" font-size="14.00">opac&#39;</text>
+<polyline fill="none" stroke="black" points="1390.75,-338.25 1457,-338.25"/>
+<text text-anchor="middle" x="1423.88" y="-320.95" font-family="Times,serif" font-size="14.00">lightness&#39;</text>
+<polyline fill="none" stroke="black" points="1390.75,-313.75 1457,-313.75"/>
+<text text-anchor="middle" x="1423.88" y="-296.45" font-family="Times,serif" font-size="14.00">hue&#39;</text>
+<polyline fill="none" stroke="black" points="1390.75,-289.25 1457,-289.25"/>
+<text text-anchor="middle" x="1423.88" y="-271.95" font-family="Times,serif" font-size="14.00">chroma&#39;</text>
+</a>
+</g>
+</g>
+<!-- Style&#45;&gt;Colour -->
+<g id="edge19" class="edge">
+<title>Style:xcolor&#45;&gt;Colour:xColour</title>
+<path fill="none" stroke="black" d="M1219.62,-756C1264.56,-756 1243.76,-704.7 1254.25,-661 1269.62,-597 1247.3,-574.91 1272.25,-514 1286.81,-478.46 1343.25,-385.15 1383.55,-375.76"/>
+<polygon fill="black" stroke="black" points="1383.62,-377.52 1388.37,-375.18 1383.2,-374.04 1383.62,-377.52"/>
+</g>
+<!-- Style&#45;&gt;Colour -->
+<g id="edge20" class="edge">
+<title>Style:xborderColor&#45;&gt;Colour:xColour</title>
+<path fill="none" stroke="black" d="M1219.62,-707C1245.21,-707 1245.31,-684.98 1254.25,-661 1274.57,-606.53 1234.13,-443.9 1272.25,-400 1305.86,-361.3 1334.03,-373.83 1383.42,-374.93"/>
+<polygon fill="black" stroke="black" points="1383.34,-376.68 1388.36,-374.98 1383.38,-373.18 1383.34,-376.68"/>
+</g>
+<!-- Style&#45;&gt;Anchor -->
+<g id="edge21" class="edge">
+<title>Style:xanchor&#45;&gt;Anchor:xAnchor</title>
+<path fill="none" stroke="black" d="M1219.62,-682C1264.42,-682 1322.48,-812.44 1368.47,-824.16"/>
+<polygon fill="black" stroke="black" points="1368.19,-825.89 1373.37,-824.8 1368.64,-822.42 1368.19,-825.89"/>
+</g>
+<!-- ShapeRendering -->
+<g id="node8" class="node">
+<title>ShapeRendering</title>
+<g id="a_node8"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Markup.html#t:ShapeRendering" xlink:title="&lt;xShapeRendering&gt; ShapeRendering| &lt;xUseGeometricPrecision&gt; UseGeometricPrecision| &lt;xUseCssCrisp&gt; UseCssCrisp| &lt;xNoShapeRendering&gt; NoShapeRendering">
+<polygon fill="none" stroke="black" points="601.75,-1615 601.75,-1713 746.75,-1713 746.75,-1615 601.75,-1615"/>
+<text text-anchor="middle" x="674.25" y="-1695.7" font-family="Times,serif" font-size="14.00">ShapeRendering</text>
+<polyline fill="none" stroke="black" points="601.75,-1688.5 746.75,-1688.5"/>
+<text text-anchor="middle" x="674.25" y="-1671.2" font-family="Times,serif" font-size="14.00">UseGeometricPrecision</text>
+<polyline fill="none" stroke="black" points="601.75,-1664 746.75,-1664"/>
+<text text-anchor="middle" x="674.25" y="-1646.7" font-family="Times,serif" font-size="14.00">UseCssCrisp</text>
+<polyline fill="none" stroke="black" points="601.75,-1639.5 746.75,-1639.5"/>
+<text text-anchor="middle" x="674.25" y="-1622.2" font-family="Times,serif" font-size="14.00">NoShapeRendering</text>
+</a>
+</g>
+</g>
+<!-- RenderStyle -->
+<g id="node10" class="node">
+<title>RenderStyle</title>
+<g id="a_node10"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Markup.html#t:RenderStyle" xlink:title="&lt;xRenderStyle&gt; RenderStyle| &lt;xIndented&gt; Indented| &lt;xCompact&gt; Compact">
+<polygon fill="none" stroke="black" points="387.38,-1710.25 387.38,-1783.75 470.12,-1783.75 470.12,-1710.25 387.38,-1710.25"/>
+<text text-anchor="middle" x="428.75" y="-1766.45" font-family="Times,serif" font-size="14.00">RenderStyle</text>
+<polyline fill="none" stroke="black" points="387.38,-1759.25 470.12,-1759.25"/>
+<text text-anchor="middle" x="428.75" y="-1741.95" font-family="Times,serif" font-size="14.00">Indented</text>
+<polyline fill="none" stroke="black" points="387.38,-1734.75 470.12,-1734.75"/>
+<text text-anchor="middle" x="428.75" y="-1717.45" font-family="Times,serif" font-size="14.00">Compact</text>
+</a>
+</g>
+</g>
+<!-- Rect -->
+<g id="node11" class="node">
+<title>Rect</title>
+<g id="a_node11"><a xlink:href="https://hackage.haskell.org/package/numhask-space/docs/NumHask-Space-Rect.html#t:Rect" xlink:title="&lt;xRect&gt; Rect">
+<polygon fill="none" stroke="black" points="1396.88,-1582 1396.88,-1618 1450.88,-1618 1450.88,-1582 1396.88,-1582"/>
+<text text-anchor="middle" x="1423.88" y="-1595.2" font-family="Times,serif" font-size="14.00">Rect</text>
+</a>
+</g>
+</g>
+<!-- Priority -->
+<g id="node12" class="node">
+<title>Priority</title>
+<g id="a_node12"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:Priority" xlink:title="&lt;xPriority&gt; Priority">
+<polygon fill="none" stroke="black" points="400.12,-1051 400.12,-1087 457.38,-1087 457.38,-1051 400.12,-1051"/>
+<text text-anchor="middle" x="428.75" y="-1064.2" font-family="Times,serif" font-size="14.00">Priority</text>
+</a>
+</g>
+</g>
+<!-- PreferColorScheme -->
+<g id="node13" class="node">
+<title>PreferColorScheme</title>
+<g id="a_node13"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Primitive.html#t:PreferColorScheme" xlink:title="&lt;xPreferColorScheme&gt; PreferColorScheme| &lt;xPreferNormal&gt; PreferNormal| &lt;xPreferLight&gt; PreferLight| &lt;xPreferHud&gt; PreferHud| &lt;xPreferDark&gt; PreferDark">
+<polygon fill="none" stroke="black" points="612.62,-1473.75 612.62,-1596.25 735.88,-1596.25 735.88,-1473.75 612.62,-1473.75"/>
+<text text-anchor="middle" x="674.25" y="-1578.95" font-family="Times,serif" font-size="14.00">PreferColorScheme</text>
+<polyline fill="none" stroke="black" points="612.62,-1571.75 735.88,-1571.75"/>
+<text text-anchor="middle" x="674.25" y="-1554.45" font-family="Times,serif" font-size="14.00">PreferNormal</text>
+<polyline fill="none" stroke="black" points="612.62,-1547.25 735.88,-1547.25"/>
+<text text-anchor="middle" x="674.25" y="-1529.95" font-family="Times,serif" font-size="14.00">PreferLight</text>
+<polyline fill="none" stroke="black" points="612.62,-1522.75 735.88,-1522.75"/>
+<text text-anchor="middle" x="674.25" y="-1505.45" font-family="Times,serif" font-size="14.00">PreferHud</text>
+<polyline fill="none" stroke="black" points="612.62,-1498.25 735.88,-1498.25"/>
+<text text-anchor="middle" x="674.25" y="-1480.95" font-family="Times,serif" font-size="14.00">PreferDark</text>
+</a>
+</g>
+</g>
+<!-- PathData -->
+<g id="node16" class="node">
+<title>PathData</title>
+<g id="a_node16"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Data-Path.html#t:PathData" xlink:title="&lt;xPathData&gt; PathData| &lt;xStartP&gt; StartP| &lt;xQuadP&gt; QuadP| &lt;xLineP&gt; LineP| &lt;xCubicP&gt; CubicP| &lt;xArcP&gt; ArcP">
+<polygon fill="none" stroke="black" points="1391.12,-1415.5 1391.12,-1562.5 1456.62,-1562.5 1456.62,-1415.5 1391.12,-1415.5"/>
+<text text-anchor="middle" x="1423.88" y="-1545.2" font-family="Times,serif" font-size="14.00">PathData</text>
+<polyline fill="none" stroke="black" points="1391.12,-1538 1456.62,-1538"/>
+<text text-anchor="middle" x="1423.88" y="-1520.7" font-family="Times,serif" font-size="14.00">StartP</text>
+<polyline fill="none" stroke="black" points="1391.12,-1513.5 1456.62,-1513.5"/>
+<text text-anchor="middle" x="1423.88" y="-1496.2" font-family="Times,serif" font-size="14.00">QuadP</text>
+<polyline fill="none" stroke="black" points="1391.12,-1489 1456.62,-1489"/>
+<text text-anchor="middle" x="1423.88" y="-1471.7" font-family="Times,serif" font-size="14.00">LineP</text>
+<polyline fill="none" stroke="black" points="1391.12,-1464.5 1456.62,-1464.5"/>
+<text text-anchor="middle" x="1423.88" y="-1447.2" font-family="Times,serif" font-size="14.00">CubicP</text>
+<polyline fill="none" stroke="black" points="1391.12,-1440 1456.62,-1440"/>
+<text text-anchor="middle" x="1423.88" y="-1422.7" font-family="Times,serif" font-size="14.00">ArcP</text>
+</a>
+</g>
+</g>
+<!-- ArcInfo -->
+<g id="node37" class="node">
+<title>ArcInfo</title>
+<g id="a_node37"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Data-Path.html#t:ArcInfo" xlink:title="&lt;xArcInfo&gt; ArcInfo| &lt;xradii&gt; radii| &lt;xphi&gt; phi| &lt;xlarge&gt; large| &lt;xclockwise&gt; clockwise">
+<polygon fill="none" stroke="black" points="1610,-1357.75 1610,-1480.25 1680,-1480.25 1680,-1357.75 1610,-1357.75"/>
+<text text-anchor="middle" x="1645" y="-1462.95" font-family="Times,serif" font-size="14.00">ArcInfo</text>
+<polyline fill="none" stroke="black" points="1610,-1455.75 1680,-1455.75"/>
+<text text-anchor="middle" x="1645" y="-1438.45" font-family="Times,serif" font-size="14.00">radii</text>
+<polyline fill="none" stroke="black" points="1610,-1431.25 1680,-1431.25"/>
+<text text-anchor="middle" x="1645" y="-1413.95" font-family="Times,serif" font-size="14.00">phi</text>
+<polyline fill="none" stroke="black" points="1610,-1406.75 1680,-1406.75"/>
+<text text-anchor="middle" x="1645" y="-1389.45" font-family="Times,serif" font-size="14.00">large</text>
+<polyline fill="none" stroke="black" points="1610,-1382.25 1680,-1382.25"/>
+<text text-anchor="middle" x="1645" y="-1364.95" font-family="Times,serif" font-size="14.00">clockwise</text>
+</a>
+</g>
+</g>
+<!-- PathData&#45;&gt;ArcInfo -->
+<g id="edge22" class="edge">
+<title>PathData:xArcP&#45;&gt;ArcInfo:xArcInfo</title>
+<path fill="none" stroke="black" d="M1457.88,-1428C1525.6,-1428 1539.27,-1465.54 1603.61,-1467.89"/>
+<polygon fill="black" stroke="black" points="1603.46,-1469.63 1608.49,-1467.97 1603.52,-1466.13 1603.46,-1469.63"/>
+<text text-anchor="middle" x="1547.75" y="-1469.2" font-family="Times,serif" font-size="14.00">(ArcP arcinfo _)</text>
+</g>
+<!-- MarkupOptions -->
+<g id="node17" class="node">
+<title>MarkupOptions</title>
+<g id="a_node17"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Markup.html#t:MarkupOptions" xlink:title="&lt;xMarkupOptions&gt; MarkupOptions| &lt;xrenderStyle&gt; renderStyle| &lt;xmarkupHeight&gt; markupHeight| &lt;xcssOptions&gt; cssOptions| &lt;xchartAspect&gt; chartAspect">
+<polygon fill="none" stroke="black" points="137.75,-1554.75 137.75,-1677.25 240,-1677.25 240,-1554.75 137.75,-1554.75"/>
+<text text-anchor="middle" x="188.88" y="-1659.95" font-family="Times,serif" font-size="14.00">MarkupOptions</text>
+<polyline fill="none" stroke="black" points="137.75,-1652.75 240,-1652.75"/>
+<text text-anchor="middle" x="188.88" y="-1635.45" font-family="Times,serif" font-size="14.00">renderStyle</text>
+<polyline fill="none" stroke="black" points="137.75,-1628.25 240,-1628.25"/>
+<text text-anchor="middle" x="188.88" y="-1610.95" font-family="Times,serif" font-size="14.00">markupHeight</text>
+<polyline fill="none" stroke="black" points="137.75,-1603.75 240,-1603.75"/>
+<text text-anchor="middle" x="188.88" y="-1586.45" font-family="Times,serif" font-size="14.00">cssOptions</text>
+<polyline fill="none" stroke="black" points="137.75,-1579.25 240,-1579.25"/>
+<text text-anchor="middle" x="188.88" y="-1561.95" font-family="Times,serif" font-size="14.00">chartAspect</text>
+</a>
+</g>
+</g>
+<!-- MarkupOptions&#45;&gt;RenderStyle -->
+<g id="edge23" class="edge">
+<title>MarkupOptions:xrenderStyle&#45;&gt;RenderStyle:xRenderStyle</title>
+<path fill="none" stroke="black" d="M240,-1641C260.23,-1641 350.05,-1753.28 380.61,-1769.94"/>
+<polygon fill="black" stroke="black" points="380.02,-1771.59 385.31,-1771.52 381.13,-1768.27 380.02,-1771.59"/>
+</g>
+<!-- CssOptions -->
+<g id="node28" class="node">
+<title>CssOptions</title>
+<g id="a_node28"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Markup.html#t:CssOptions" xlink:title="&lt;xCssOptions&gt; CssOptions| &lt;xshapeRendering&gt; shapeRendering| &lt;xpreferColorScheme&gt; preferColorScheme| &lt;xfontFamilies&gt; fontFamilies| &lt;xcssExtra&gt; cssExtra">
+<polygon fill="none" stroke="black" points="367.5,-1568.75 367.5,-1691.25 490,-1691.25 490,-1568.75 367.5,-1568.75"/>
+<text text-anchor="middle" x="428.75" y="-1673.95" font-family="Times,serif" font-size="14.00">CssOptions</text>
+<polyline fill="none" stroke="black" points="367.5,-1666.75 490,-1666.75"/>
+<text text-anchor="middle" x="428.75" y="-1649.45" font-family="Times,serif" font-size="14.00">shapeRendering</text>
+<polyline fill="none" stroke="black" points="367.5,-1642.25 490,-1642.25"/>
+<text text-anchor="middle" x="428.75" y="-1624.95" font-family="Times,serif" font-size="14.00">preferColorScheme</text>
+<polyline fill="none" stroke="black" points="367.5,-1617.75 490,-1617.75"/>
+<text text-anchor="middle" x="428.75" y="-1600.45" font-family="Times,serif" font-size="14.00">fontFamilies</text>
+<polyline fill="none" stroke="black" points="367.5,-1593.25 490,-1593.25"/>
+<text text-anchor="middle" x="428.75" y="-1575.95" font-family="Times,serif" font-size="14.00">cssExtra</text>
+</a>
+</g>
+</g>
+<!-- MarkupOptions&#45;&gt;CssOptions -->
+<g id="edge24" class="edge">
+<title>MarkupOptions:xcssOptions&#45;&gt;CssOptions:xCssOptions</title>
+<path fill="none" stroke="black" d="M240,-1591C306.7,-1591 299.21,-1673.59 361.27,-1678.75"/>
+<polygon fill="black" stroke="black" points="360.92,-1680.48 365.99,-1678.94 361.06,-1676.99 360.92,-1680.48"/>
+</g>
+<!-- ChartAspect -->
+<g id="node33" class="node">
+<title>ChartAspect</title>
+<g id="a_node33"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Primitive.html#t:ChartAspect" xlink:title="&lt;xChartAspect&gt; ChartAspect| &lt;xUnscaledAspect&gt; UnscaledAspect| &lt;xFixedAspect&gt; FixedAspect| &lt;xCanvasAspect&gt; CanvasAspect">
+<polygon fill="none" stroke="black" points="376.88,-1452 376.88,-1550 480.62,-1550 480.62,-1452 376.88,-1452"/>
+<text text-anchor="middle" x="428.75" y="-1532.7" font-family="Times,serif" font-size="14.00">ChartAspect</text>
+<polyline fill="none" stroke="black" points="376.88,-1525.5 480.62,-1525.5"/>
+<text text-anchor="middle" x="428.75" y="-1508.2" font-family="Times,serif" font-size="14.00">UnscaledAspect</text>
+<polyline fill="none" stroke="black" points="376.88,-1501 480.62,-1501"/>
+<text text-anchor="middle" x="428.75" y="-1483.7" font-family="Times,serif" font-size="14.00">FixedAspect</text>
+<polyline fill="none" stroke="black" points="376.88,-1476.5 480.62,-1476.5"/>
+<text text-anchor="middle" x="428.75" y="-1459.2" font-family="Times,serif" font-size="14.00">CanvasAspect</text>
+</a>
+</g>
+</g>
+<!-- MarkupOptions&#45;&gt;ChartAspect -->
+<g id="edge25" class="edge">
+<title>MarkupOptions:xchartAspect&#45;&gt;ChartAspect:xChartAspect</title>
+<path fill="none" stroke="black" d="M240,-1567C299.53,-1567 313.13,-1540 369.42,-1538.11"/>
+<polygon fill="black" stroke="black" points="369.27,-1539.86 374.24,-1538.03 369.21,-1536.36 369.27,-1539.86"/>
+</g>
+<!-- LegendOptions -->
+<g id="node20" class="node">
+<title>LegendOptions</title>
+<g id="a_node20"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:LegendOptions" xlink:title="&lt;xLegendOptions&gt; LegendOptions| &lt;xvgap&gt; vgap| &lt;xtextStyle&gt; textStyle| &lt;xscaleP&gt; scaleP| &lt;xscaleChartsBy&gt; scaleChartsBy| &lt;xplace&gt; place| &lt;xouterPad&gt; outerPad| &lt;xlegendSize&gt; legendSize| &lt;xlegendCharts&gt; legendCharts| &lt;xinnerPad&gt; innerPad| &lt;xhgap&gt; hgap| &lt;xframe&gt; frame| &lt;xbuffer&gt; buffer">
+<polygon fill="none" stroke="black" points="624.62,-854.75 624.62,-1173.25 723.88,-1173.25 723.88,-854.75 624.62,-854.75"/>
+<text text-anchor="middle" x="674.25" y="-1155.95" font-family="Times,serif" font-size="14.00">LegendOptions</text>
+<polyline fill="none" stroke="black" points="624.62,-1148.75 723.88,-1148.75"/>
+<text text-anchor="middle" x="674.25" y="-1131.45" font-family="Times,serif" font-size="14.00">vgap</text>
+<polyline fill="none" stroke="black" points="624.62,-1124.25 723.88,-1124.25"/>
+<text text-anchor="middle" x="674.25" y="-1106.95" font-family="Times,serif" font-size="14.00">textStyle</text>
+<polyline fill="none" stroke="black" points="624.62,-1099.75 723.88,-1099.75"/>
+<text text-anchor="middle" x="674.25" y="-1082.45" font-family="Times,serif" font-size="14.00">scaleP</text>
+<polyline fill="none" stroke="black" points="624.62,-1075.25 723.88,-1075.25"/>
+<text text-anchor="middle" x="674.25" y="-1057.95" font-family="Times,serif" font-size="14.00">scaleChartsBy</text>
+<polyline fill="none" stroke="black" points="624.62,-1050.75 723.88,-1050.75"/>
+<text text-anchor="middle" x="674.25" y="-1033.45" font-family="Times,serif" font-size="14.00">place</text>
+<polyline fill="none" stroke="black" points="624.62,-1026.25 723.88,-1026.25"/>
+<text text-anchor="middle" x="674.25" y="-1008.95" font-family="Times,serif" font-size="14.00">outerPad</text>
+<polyline fill="none" stroke="black" points="624.62,-1001.75 723.88,-1001.75"/>
+<text text-anchor="middle" x="674.25" y="-984.45" font-family="Times,serif" font-size="14.00">legendSize</text>
+<polyline fill="none" stroke="black" points="624.62,-977.25 723.88,-977.25"/>
+<text text-anchor="middle" x="674.25" y="-959.95" font-family="Times,serif" font-size="14.00">legendCharts</text>
+<polyline fill="none" stroke="black" points="624.62,-952.75 723.88,-952.75"/>
+<text text-anchor="middle" x="674.25" y="-935.45" font-family="Times,serif" font-size="14.00">innerPad</text>
+<polyline fill="none" stroke="black" points="624.62,-928.25 723.88,-928.25"/>
+<text text-anchor="middle" x="674.25" y="-910.95" font-family="Times,serif" font-size="14.00">hgap</text>
+<polyline fill="none" stroke="black" points="624.62,-903.75 723.88,-903.75"/>
+<text text-anchor="middle" x="674.25" y="-886.45" font-family="Times,serif" font-size="14.00">frame</text>
+<polyline fill="none" stroke="black" points="624.62,-879.25 723.88,-879.25"/>
+<text text-anchor="middle" x="674.25" y="-861.95" font-family="Times,serif" font-size="14.00">buffer</text>
+</a>
+</g>
+</g>
+<!-- LegendOptions&#45;&gt;Style -->
+<g id="edge26" class="edge">
+<title>LegendOptions:xtextStyle&#45;&gt;Style:xStyle</title>
+<path fill="none" stroke="black" d="M725.25,-1112C905.58,-1112 952.07,-1123.72 1129.27,-1124"/>
+<polygon fill="black" stroke="black" points="1129.11,-1125.74 1134.11,-1124 1129.11,-1122.24 1129.11,-1125.74"/>
+</g>
+<!-- LegendOptions&#45;&gt;Style -->
+<g id="edge30" class="edge">
+<title>LegendOptions:xframe&#45;&gt;Style:xStyle</title>
+<path fill="none" stroke="black" d="M725.25,-891C837.92,-891 879.42,-840.32 978.75,-893.5 1086.08,-950.96 1014.33,-1117.99 1129.27,-1123.84"/>
+<polygon fill="black" stroke="black" points="1129.07,-1125.59 1134.11,-1123.96 1129.16,-1122.09 1129.07,-1125.59"/>
+<text text-anchor="middle" x="931.75" y="-896.2" font-family="Times,serif" font-size="14.00">_Just</text>
+</g>
+<!-- LegendOptions&#45;&gt;ScaleP -->
+<g id="edge27" class="edge">
+<title>LegendOptions:xscaleP&#45;&gt;ScaleP:xScaleP</title>
+<path fill="none" stroke="black" d="M725.25,-1088C749.92,-1088 746.6,-1110.29 764.75,-1127 816.46,-1174.61 823,-1196.43 884.75,-1230 930.34,-1254.78 945.39,-1255.59 996.75,-1263 1149.61,-1285.05 1206.04,-1331.92 1344.25,-1263 1360.95,-1254.67 1354,-1231.43 1366.68,-1226.1"/>
+<polygon fill="black" stroke="black" points="1366.77,-1227.86 1371.38,-1225.26 1366.16,-1224.42 1366.77,-1227.86"/>
+</g>
+<!-- LegendOptions&#45;&gt;Place -->
+<g id="edge28" class="edge">
+<title>LegendOptions:xplace&#45;&gt;Place:xPlace</title>
+<path fill="none" stroke="black" d="M725.25,-1039C788.16,-1039 806.43,-1025.11 866.75,-1043 873.21,-1044.92 874.84,-1049.76 878.73,-1052.33"/>
+<polygon fill="black" stroke="black" points="878.01,-1053.95 883.29,-1053.6 878.94,-1050.58 878.01,-1053.95"/>
+</g>
+<!-- Chart -->
+<g id="node34" class="node">
+<title>Chart</title>
+<g id="a_node34"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Primitive.html#t:Chart" xlink:title="&lt;xChart&gt; Chart| &lt;xchartStyle&gt; chartStyle| &lt;xchartData&gt; chartData">
+<polygon fill="none" stroke="black" points="896.38,-1147.25 896.38,-1220.75 967.12,-1220.75 967.12,-1147.25 896.38,-1147.25"/>
+<text text-anchor="middle" x="931.75" y="-1203.45" font-family="Times,serif" font-size="14.00">Chart</text>
+<polyline fill="none" stroke="black" points="896.38,-1196.25 967.12,-1196.25"/>
+<text text-anchor="middle" x="931.75" y="-1178.95" font-family="Times,serif" font-size="14.00">chartStyle</text>
+<polyline fill="none" stroke="black" points="896.38,-1171.75 967.12,-1171.75"/>
+<text text-anchor="middle" x="931.75" y="-1154.45" font-family="Times,serif" font-size="14.00">chartData</text>
+</a>
+</g>
+</g>
+<!-- LegendOptions&#45;&gt;Chart -->
+<g id="edge29" class="edge">
+<title>LegendOptions:xlegendCharts&#45;&gt;Chart:xChart</title>
+<path fill="none" stroke="black" d="M725.25,-965C767.72,-965 742.16,-1016.04 764.75,-1052 811.9,-1127.08 805.24,-1205.09 889.27,-1208.86"/>
+<polygon fill="black" stroke="black" points="889.2,-1210.61 894.24,-1208.97 889.28,-1207.11 889.2,-1210.61"/>
+<text text-anchor="middle" x="815.75" y="-1207.2" font-family="Times,serif" font-size="14.00">each % _2 % each</text>
+</g>
+<!-- HudOptions -->
+<g id="node21" class="node">
+<title>HudOptions</title>
+<g id="a_node21"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:HudOptions" xlink:title="&lt;xHudOptions&gt; HudOptions| &lt;xtitles&gt; titles| &lt;xlegends&gt; legends| &lt;xframes&gt; frames| &lt;xaxes&gt; axes">
+<polygon fill="none" stroke="black" points="147.88,-1027.75 147.88,-1150.25 229.88,-1150.25 229.88,-1027.75 147.88,-1027.75"/>
+<text text-anchor="middle" x="188.88" y="-1132.95" font-family="Times,serif" font-size="14.00">HudOptions</text>
+<polyline fill="none" stroke="black" points="147.88,-1125.75 229.88,-1125.75"/>
+<text text-anchor="middle" x="188.88" y="-1108.45" font-family="Times,serif" font-size="14.00">titles</text>
+<polyline fill="none" stroke="black" points="147.88,-1101.25 229.88,-1101.25"/>
+<text text-anchor="middle" x="188.88" y="-1083.95" font-family="Times,serif" font-size="14.00">legends</text>
+<polyline fill="none" stroke="black" points="147.88,-1076.75 229.88,-1076.75"/>
+<text text-anchor="middle" x="188.88" y="-1059.45" font-family="Times,serif" font-size="14.00">frames</text>
+<polyline fill="none" stroke="black" points="147.88,-1052.25 229.88,-1052.25"/>
+<text text-anchor="middle" x="188.88" y="-1034.95" font-family="Times,serif" font-size="14.00">axes</text>
+</a>
+</g>
+</g>
+<!-- HudOptions&#45;&gt;TitleOptions -->
+<g id="edge31" class="edge">
+<title>HudOptions:xtitles&#45;&gt;TitleOptions:xTitleOptions</title>
+<path fill="none" stroke="black" d="M230.88,-1114C258.13,-1114 238.18,-1150.29 258,-1169 387.47,-1291.2 449.65,-1326.18 624.97,-1326.99"/>
+<polygon fill="black" stroke="black" points="624.73,-1328.74 629.74,-1327 624.74,-1325.24 624.73,-1328.74"/>
+<text text-anchor="middle" x="428.75" y="-1317.2" font-family="Times,serif" font-size="14.00">each % #item</text>
+</g>
+<!-- HudOptions&#45;&gt;Priority -->
+<g id="edge32" class="edge">
+<title>HudOptions:xtitles&#45;&gt;Priority:xPriority</title>
+<path fill="none" stroke="black" d="M230.88,-1114C283.69,-1114 298.37,-1120.22 349.5,-1107 364.75,-1103.06 380.59,-1096.11 394.07,-1089.23"/>
+<polygon fill="black" stroke="black" points="394.72,-1090.86 398.35,-1086.99 393.1,-1087.76 394.72,-1090.86"/>
+<text text-anchor="middle" x="303.75" y="-1118.2" font-family="Times,serif" font-size="14.00">each % #priority</text>
+</g>
+<!-- HudOptions&#45;&gt;Priority -->
+<g id="edge33" class="edge">
+<title>HudOptions:xlegends&#45;&gt;Priority:xPriority</title>
+<path fill="none" stroke="black" d="M230.88,-1089C234.9,-1089 337.88,-1078.41 393.64,-1072.64"/>
+<polygon fill="black" stroke="black" points="393.57,-1074.41 398.37,-1072.15 393.21,-1070.92 393.57,-1074.41"/>
+<text text-anchor="middle" x="303.75" y="-1089.2" font-family="Times,serif" font-size="14.00">each % #priority</text>
+</g>
+<!-- HudOptions&#45;&gt;Priority -->
+<g id="edge35" class="edge">
+<title>HudOptions:xframes&#45;&gt;Priority:xPriority</title>
+<path fill="none" stroke="black" d="M230.88,-1064C243.38,-1064 245.61,-1058.18 258,-1056.5 298.3,-1051.03 308.96,-1053.32 349.5,-1056.5 364.07,-1057.64 380.01,-1059.95 393.75,-1062.27"/>
+<polygon fill="black" stroke="black" points="393.18,-1063.95 398.4,-1063.08 393.78,-1060.5 393.18,-1063.95"/>
+<text text-anchor="middle" x="303.75" y="-1059.2" font-family="Times,serif" font-size="14.00">each % #priority</text>
+</g>
+<!-- HudOptions&#45;&gt;Priority -->
+<g id="edge37" class="edge">
+<title>HudOptions:xaxes&#45;&gt;Priority:xPriority</title>
+<path fill="none" stroke="black" d="M230.88,-1040C243.38,-1040 245.61,-1034.18 258,-1032.5 298.3,-1027.03 309.78,-1023.79 349.5,-1032.5 364.78,-1035.85 380.62,-1042.43 394.09,-1049.1"/>
+<polygon fill="black" stroke="black" points="393.11,-1050.56 398.36,-1051.27 394.7,-1047.44 393.11,-1050.56"/>
+<text text-anchor="middle" x="303.75" y="-1035.2" font-family="Times,serif" font-size="14.00">each % #priority</text>
+</g>
+<!-- HudOptions&#45;&gt;LegendOptions -->
+<g id="edge34" class="edge">
+<title>HudOptions:xlegends&#45;&gt;LegendOptions:xLegendOptions</title>
+<path fill="none" stroke="black" d="M230.88,-1089C254.99,-1089 237.54,-1123.23 258,-1136 394.29,-1221.04 458.89,-1162.53 617.1,-1161.03"/>
+<polygon fill="black" stroke="black" points="616.74,-1162.78 621.74,-1161.01 616.73,-1159.28 616.74,-1162.78"/>
+<text text-anchor="middle" x="428.75" y="-1185.2" font-family="Times,serif" font-size="14.00">each % #item</text>
+</g>
+<!-- FrameOptions -->
+<g id="node24" class="node">
+<title>FrameOptions</title>
+<g id="a_node24"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:FrameOptions" xlink:title="&lt;xFrameOptions&gt; FrameOptions| &lt;xframe&gt; frame| &lt;xbuffer&gt; buffer| &lt;xanchorTo&gt; anchorTo">
+<polygon fill="none" stroke="black" points="884.75,-226 884.75,-324 978.75,-324 978.75,-226 884.75,-226"/>
+<text text-anchor="middle" x="931.75" y="-306.7" font-family="Times,serif" font-size="14.00">FrameOptions</text>
+<polyline fill="none" stroke="black" points="884.75,-299.5 978.75,-299.5"/>
+<text text-anchor="middle" x="931.75" y="-282.2" font-family="Times,serif" font-size="14.00">frame</text>
+<polyline fill="none" stroke="black" points="884.75,-275 978.75,-275"/>
+<text text-anchor="middle" x="931.75" y="-257.7" font-family="Times,serif" font-size="14.00">buffer</text>
+<polyline fill="none" stroke="black" points="884.75,-250.5 978.75,-250.5"/>
+<text text-anchor="middle" x="931.75" y="-233.2" font-family="Times,serif" font-size="14.00">anchorTo</text>
+</a>
+</g>
+</g>
+<!-- HudOptions&#45;&gt;FrameOptions -->
+<g id="edge36" class="edge">
+<title>HudOptions:xframes&#45;&gt;FrameOptions:xFrameOptions</title>
+<path fill="none" stroke="black" d="M230.88,-1064C262.2,-1064 348.15,-541.63 367.5,-517 518.95,-324.27 635.4,-312.2 878.26,-312"/>
+<polygon fill="black" stroke="black" points="878.24,-313.75 883.24,-312 878.24,-310.25 878.24,-313.75"/>
+<text text-anchor="middle" x="545.88" y="-384.2" font-family="Times,serif" font-size="14.00">each % #item</text>
+</g>
+<!-- AxisOptions -->
+<g id="node35" class="node">
+<title>AxisOptions</title>
+<g id="a_node35"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:AxisOptions" xlink:title="&lt;xAxisOptions&gt; AxisOptions| &lt;xticks&gt; ticks| &lt;xplace&gt; place| &lt;xaxisBar&gt; axisBar| &lt;xadjustments&gt; adjustments">
+<polygon fill="none" stroke="black" points="386.62,-526.75 386.62,-649.25 470.88,-649.25 470.88,-526.75 386.62,-526.75"/>
+<text text-anchor="middle" x="428.75" y="-631.95" font-family="Times,serif" font-size="14.00">AxisOptions</text>
+<polyline fill="none" stroke="black" points="386.62,-624.75 470.88,-624.75"/>
+<text text-anchor="middle" x="428.75" y="-607.45" font-family="Times,serif" font-size="14.00">ticks</text>
+<polyline fill="none" stroke="black" points="386.62,-600.25 470.88,-600.25"/>
+<text text-anchor="middle" x="428.75" y="-582.95" font-family="Times,serif" font-size="14.00">place</text>
+<polyline fill="none" stroke="black" points="386.62,-575.75 470.88,-575.75"/>
+<text text-anchor="middle" x="428.75" y="-558.45" font-family="Times,serif" font-size="14.00">axisBar</text>
+<polyline fill="none" stroke="black" points="386.62,-551.25 470.88,-551.25"/>
+<text text-anchor="middle" x="428.75" y="-533.95" font-family="Times,serif" font-size="14.00">adjustments</text>
+</a>
+</g>
+</g>
+<!-- HudOptions&#45;&gt;AxisOptions -->
+<g id="edge38" class="edge">
+<title>HudOptions:xaxes&#45;&gt;AxisOptions:xAxisOptions</title>
+<path fill="none" stroke="black" d="M188.88,-1027C188.88,-835.01 191.52,-641.4 379.28,-637.07"/>
+<polygon fill="black" stroke="black" points="379.26,-638.82 384.24,-637.02 379.22,-635.32 379.26,-638.82"/>
+<text text-anchor="middle" x="303.75" y="-682.2" font-family="Times,serif" font-size="14.00">each % #item</text>
+</g>
+<!-- FrameOptions&#45;&gt;Style -->
+<g id="edge39" class="edge">
+<title>FrameOptions:xframe&#45;&gt;Style:xStyle</title>
+<path fill="none" stroke="black" d="M978.75,-287C990.81,-287 1079.54,-465.94 1083,-477.5 1103.07,-544.52 1065.85,-1090.6 1129.58,-1122.54"/>
+<polygon fill="black" stroke="black" points="1128.88,-1124.17 1134.15,-1123.65 1129.7,-1120.77 1128.88,-1124.17"/>
+<text text-anchor="middle" x="1039.88" y="-480.2" font-family="Times,serif" font-size="14.00">#frame % _Just</text>
+</g>
+<!-- FrameOptions&#45;&gt;HudChartSection -->
+<g id="edge40" class="edge">
+<title>FrameOptions:xanchorTo&#45;&gt;HudChartSection:xHudChartSection</title>
+<path fill="none" stroke="black" d="M978.75,-238C1016.71,-238 1069,-344.32 1108.41,-355.12"/>
+<polygon fill="black" stroke="black" points="1107.93,-356.82 1113.13,-355.79 1108.42,-353.35 1107.93,-356.82"/>
+</g>
+<!-- FStyle -->
+<g id="node26" class="node">
+<title>FStyle</title>
+<g id="a_node26"><a xlink:href="https://hackage.haskell.org/package/formatn/docs/Data-FormatN.html#t:FStyle" xlink:title="&lt;xFStyle&gt; FStyle| &lt;xFSPrec&gt; FSPrec| &lt;xFSPercent&gt; FSPercent| &lt;xFSNone&gt; FSNone| &lt;xFSFixed Int&gt; FSFixed Int| &lt;xFSExponent&gt; FSExponent| &lt;xFSDollar&gt; FSDollar| &lt;xFSDecimal&gt; FSDecimal| &lt;xFSCommaPrec&gt; FSCommaPrec| &lt;xFSComma&gt; FSComma">
+<polygon fill="none" stroke="black" points="1374.25,-0.5 1374.25,-245.5 1473.5,-245.5 1473.5,-0.5 1374.25,-0.5"/>
+<text text-anchor="middle" x="1423.88" y="-228.2" font-family="Times,serif" font-size="14.00">FStyle</text>
+<polyline fill="none" stroke="black" points="1374.25,-221 1473.5,-221"/>
+<text text-anchor="middle" x="1423.88" y="-203.7" font-family="Times,serif" font-size="14.00">FSPrec</text>
+<polyline fill="none" stroke="black" points="1374.25,-196.5 1473.5,-196.5"/>
+<text text-anchor="middle" x="1423.88" y="-179.2" font-family="Times,serif" font-size="14.00">FSPercent</text>
+<polyline fill="none" stroke="black" points="1374.25,-172 1473.5,-172"/>
+<text text-anchor="middle" x="1423.88" y="-154.7" font-family="Times,serif" font-size="14.00">FSNone</text>
+<polyline fill="none" stroke="black" points="1374.25,-147.5 1473.5,-147.5"/>
+<text text-anchor="middle" x="1423.88" y="-130.2" font-family="Times,serif" font-size="14.00">FSFixed Int</text>
+<polyline fill="none" stroke="black" points="1374.25,-123 1473.5,-123"/>
+<text text-anchor="middle" x="1423.88" y="-105.7" font-family="Times,serif" font-size="14.00">FSExponent</text>
+<polyline fill="none" stroke="black" points="1374.25,-98.5 1473.5,-98.5"/>
+<text text-anchor="middle" x="1423.88" y="-81.2" font-family="Times,serif" font-size="14.00">FSDollar</text>
+<polyline fill="none" stroke="black" points="1374.25,-74 1473.5,-74"/>
+<text text-anchor="middle" x="1423.88" y="-56.7" font-family="Times,serif" font-size="14.00">FSDecimal</text>
+<polyline fill="none" stroke="black" points="1374.25,-49.5 1473.5,-49.5"/>
+<text text-anchor="middle" x="1423.88" y="-32.2" font-family="Times,serif" font-size="14.00">FSCommaPrec</text>
+<polyline fill="none" stroke="black" points="1374.25,-25 1473.5,-25"/>
+<text text-anchor="middle" x="1423.88" y="-7.7" font-family="Times,serif" font-size="14.00">FSComma</text>
+</a>
+</g>
+</g>
+<!-- FormatN&#45;&gt;FStyle -->
+<g id="edge41" class="edge">
+<title>FormatN:xfstyle&#45;&gt;FStyle:xFStyle</title>
+<path fill="none" stroke="black" d="M1254.25,-476C1279.24,-476 1262.38,-387.96 1272.25,-365 1300.53,-299.21 1299.21,-236.77 1366.58,-233.16"/>
+<polygon fill="black" stroke="black" points="1366.41,-234.92 1371.36,-233.04 1366.32,-231.42 1366.41,-234.92"/>
+</g>
+<!-- CssOptions&#45;&gt;ShapeRendering -->
+<g id="edge42" class="edge">
+<title>CssOptions:xshapeRendering&#45;&gt;ShapeRendering:xShapeRendering</title>
+<path fill="none" stroke="black" d="M490,-1655C541.51,-1655 547.6,-1697.3 595.38,-1700.77"/>
+<polygon fill="black" stroke="black" points="595.18,-1702.52 600.24,-1700.95 595.3,-1699.02 595.18,-1702.52"/>
+</g>
+<!-- CssOptions&#45;&gt;PreferColorScheme -->
+<g id="edge43" class="edge">
+<title>CssOptions:xpreferColorScheme&#45;&gt;PreferColorScheme:xPreferColorScheme</title>
+<path fill="none" stroke="black" d="M490,-1630C545.5,-1630 553.1,-1587.35 605.04,-1584.19"/>
+<polygon fill="black" stroke="black" points="604.79,-1585.94 609.74,-1584.05 604.69,-1582.45 604.79,-1585.94"/>
+</g>
+<!-- ChartTree -->
+<g id="node30" class="node">
+<title>ChartTree</title>
+<g id="a_node30"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Primitive.html#t:ChartTree" xlink:title="&lt;xChartTree&gt; ChartTree| &lt;xtree&gt; tree| &lt;xcharts&#39;&gt; charts&#39;">
+<polygon fill="none" stroke="black" points="153.5,-1367.25 153.5,-1440.75 224.25,-1440.75 224.25,-1367.25 153.5,-1367.25"/>
+<text text-anchor="middle" x="188.88" y="-1423.45" font-family="Times,serif" font-size="14.00">ChartTree</text>
+<polyline fill="none" stroke="black" points="153.5,-1416.25 224.25,-1416.25"/>
+<text text-anchor="middle" x="188.88" y="-1398.95" font-family="Times,serif" font-size="14.00">tree</text>
+<polyline fill="none" stroke="black" points="153.5,-1391.75 224.25,-1391.75"/>
+<text text-anchor="middle" x="188.88" y="-1374.45" font-family="Times,serif" font-size="14.00">charts&#39;</text>
+</a>
+</g>
+</g>
+<!-- ChartTree&#45;&gt;Tree -->
+<g id="edge44" class="edge">
+<title>ChartTree:xtree&#45;&gt;Tree:xTree</title>
+<path fill="none" stroke="black" d="M224.88,-1404C284.81,-1404 354.51,-1408.8 394.93,-1412.06"/>
+<polygon fill="black" stroke="black" points="394.77,-1413.8 399.9,-1412.46 395.06,-1410.31 394.77,-1413.8"/>
+</g>
+<!-- ChartTree&#45;&gt;Chart -->
+<g id="edge45" class="edge">
+<title>ChartTree:xcharts&#39;&#45;&gt;Chart:xChart</title>
+<path fill="none" stroke="black" d="M224.88,-1379C341.04,-1379 640.02,-1394.86 746.75,-1349 828.28,-1313.97 806.01,-1213.84 889.55,-1209.17"/>
+<polygon fill="black" stroke="black" points="889.29,-1210.93 894.24,-1209.04 889.19,-1207.43 889.29,-1210.93"/>
+<text text-anchor="middle" x="545.88" y="-1383.2" font-family="Times,serif" font-size="14.00">each</text>
+</g>
+<!-- ChartOptions -->
+<g id="node31" class="node">
+<title>ChartOptions</title>
+<g id="a_node31"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Markup.html#t:ChartOptions" xlink:title="&lt;xChartOptions&gt; ChartOptions| &lt;xmarkupOptions&gt; markupOptions| &lt;xhudOptions&gt; hudOptions| &lt;xchartTree&gt; chartTree">
+<polygon fill="none" stroke="black" points="0,-1417 0,-1515 100.75,-1515 100.75,-1417 0,-1417"/>
+<text text-anchor="middle" x="50.38" y="-1497.7" font-family="Times,serif" font-size="14.00">ChartOptions</text>
+<polyline fill="none" stroke="black" points="0,-1490.5 100.75,-1490.5"/>
+<text text-anchor="middle" x="50.38" y="-1473.2" font-family="Times,serif" font-size="14.00">markupOptions</text>
+<polyline fill="none" stroke="black" points="0,-1466 100.75,-1466"/>
+<text text-anchor="middle" x="50.38" y="-1448.7" font-family="Times,serif" font-size="14.00">hudOptions</text>
+<polyline fill="none" stroke="black" points="0,-1441.5 100.75,-1441.5"/>
+<text text-anchor="middle" x="50.38" y="-1424.2" font-family="Times,serif" font-size="14.00">chartTree</text>
+</a>
+</g>
+</g>
+<!-- ChartOptions&#45;&gt;MarkupOptions -->
+<g id="edge46" class="edge">
+<title>ChartOptions:xmarkupOptions&#45;&gt;MarkupOptions:xMarkupOptions</title>
+<path fill="none" stroke="black" d="M100.75,-1478C183.16,-1478 60.11,-1654.91 131.28,-1664.59"/>
+<polygon fill="black" stroke="black" points="131.14,-1666.33 136.24,-1664.9 131.36,-1662.84 131.14,-1666.33"/>
+</g>
+<!-- ChartOptions&#45;&gt;HudOptions -->
+<g id="edge47" class="edge">
+<title>ChartOptions:xhudOptions&#45;&gt;HudOptions:xHudOptions</title>
+<path fill="none" stroke="black" d="M100.75,-1454C134.15,-1454 114.1,-1173.95 141.23,-1141.13"/>
+<polygon fill="black" stroke="black" points="142.03,-1142.69 145.55,-1138.73 140.33,-1139.63 142.03,-1142.69"/>
+</g>
+<!-- ChartOptions&#45;&gt;ChartTree -->
+<g id="edge48" class="edge">
+<title>ChartOptions:xchartTree&#45;&gt;ChartTree:xChartTree</title>
+<path fill="none" stroke="black" d="M100.75,-1429C121.74,-1429 128.47,-1429 146.79,-1429"/>
+<polygon fill="black" stroke="black" points="146.36,-1430.75 151.36,-1429 146.36,-1427.25 146.36,-1430.75"/>
+</g>
+<!-- ChartData -->
+<g id="node32" class="node">
+<title>ChartData</title>
+<g id="a_node32"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Primitive.html#t:ChartData" xlink:title="&lt;xChartData&gt; ChartData| &lt;xtextData&#39;&gt; textData&#39;| &lt;xrectData&#39;&gt; rectData&#39;| &lt;xpathData&#39;&gt; pathData&#39;| &lt;xlineData&#39;&gt; lineData&#39;| &lt;xglyphData&#39;&gt; glyphData&#39;| &lt;xblankData&#39;&gt; blankData&#39;">
+<polygon fill="none" stroke="black" points="1140.38,-1464.25 1140.38,-1635.75 1214.88,-1635.75 1214.88,-1464.25 1140.38,-1464.25"/>
+<text text-anchor="middle" x="1177.62" y="-1618.45" font-family="Times,serif" font-size="14.00">ChartData</text>
+<polyline fill="none" stroke="black" points="1140.38,-1611.25 1214.88,-1611.25"/>
+<text text-anchor="middle" x="1177.62" y="-1593.95" font-family="Times,serif" font-size="14.00">textData&#39;</text>
+<polyline fill="none" stroke="black" points="1140.38,-1586.75 1214.88,-1586.75"/>
+<text text-anchor="middle" x="1177.62" y="-1569.45" font-family="Times,serif" font-size="14.00">rectData&#39;</text>
+<polyline fill="none" stroke="black" points="1140.38,-1562.25 1214.88,-1562.25"/>
+<text text-anchor="middle" x="1177.62" y="-1544.95" font-family="Times,serif" font-size="14.00">pathData&#39;</text>
+<polyline fill="none" stroke="black" points="1140.38,-1537.75 1214.88,-1537.75"/>
+<text text-anchor="middle" x="1177.62" y="-1520.45" font-family="Times,serif" font-size="14.00">lineData&#39;</text>
+<polyline fill="none" stroke="black" points="1140.38,-1513.25 1214.88,-1513.25"/>
+<text text-anchor="middle" x="1177.62" y="-1495.95" font-family="Times,serif" font-size="14.00">glyphData&#39;</text>
+<polyline fill="none" stroke="black" points="1140.38,-1488.75 1214.88,-1488.75"/>
+<text text-anchor="middle" x="1177.62" y="-1471.45" font-family="Times,serif" font-size="14.00">blankData&#39;</text>
+</a>
+</g>
+</g>
+<!-- ChartData&#45;&gt;Rect -->
+<g id="edge50" class="edge">
+<title>ChartData:xrectData&#39;&#45;&gt;Rect:xRect</title>
+<path fill="none" stroke="black" d="M1215.62,-1575C1277.5,-1575 1348.98,-1586.01 1390.05,-1593.42"/>
+<polygon fill="black" stroke="black" points="1389.66,-1595.13 1394.89,-1594.3 1390.29,-1591.68 1389.66,-1595.13"/>
+<text text-anchor="middle" x="1308.25" y="-1588.2" font-family="Times,serif" font-size="14.00">_Just % each</text>
+</g>
+<!-- ChartData&#45;&gt;Rect -->
+<g id="edge54" class="edge">
+<title>ChartData:xblankData&#39;&#45;&gt;Rect:xRect</title>
+<path fill="none" stroke="black" d="M1215.62,-1476C1274.93,-1476 1301.9,-1469.98 1344.25,-1511.5 1364.28,-1531.14 1343.82,-1550.85 1362.25,-1572 1369.67,-1580.52 1380.21,-1586.59 1390.48,-1590.84"/>
+<polygon fill="black" stroke="black" points="1389.76,-1592.44 1395.05,-1592.6 1391.01,-1589.18 1389.76,-1592.44"/>
+<text text-anchor="middle" x="1308.25" y="-1514.2" font-family="Times,serif" font-size="14.00">_Just % each</text>
+</g>
+<!-- ChartData&#45;&gt;Point -->
+<g id="edge52" class="edge">
+<title>ChartData:xlineData&#39;&#45;&gt;Point:xPoint</title>
+<path fill="none" stroke="black" d="M1215.62,-1525C1250.1,-1525 1246.96,-1495.42 1272.25,-1472 1312.06,-1435.13 1313.99,-1414.32 1362.25,-1389.5 1455.06,-1341.77 1494.3,-1377.69 1592,-1341 1601.69,-1337.36 1603.73,-1330.39 1610.99,-1327.91"/>
+<polygon fill="black" stroke="black" points="1610.82,-1329.7 1615.5,-1327.23 1610.3,-1326.24 1610.82,-1329.7"/>
+<text text-anchor="middle" x="1423.88" y="-1392.2" font-family="Times,serif" font-size="14.00">_Just % each % each</text>
+</g>
+<!-- ChartData&#45;&gt;Point -->
+<g id="edge53" class="edge">
+<title>ChartData:xglyphData&#39;&#45;&gt;Point:xPoint</title>
+<path fill="none" stroke="black" d="M1215.62,-1501C1268.65,-1501 1236.02,-1434.71 1272.25,-1396 1304.53,-1361.52 1317.2,-1353.67 1362.25,-1339.5 1468.38,-1306.11 1502.38,-1326.22 1610.77,-1326.98"/>
+<polygon fill="black" stroke="black" points="1610.48,-1328.73 1615.49,-1326.99 1610.49,-1325.23 1610.48,-1328.73"/>
+<text text-anchor="middle" x="1423.88" y="-1342.2" font-family="Times,serif" font-size="14.00">_Just % each</text>
+</g>
+<!-- ChartData&#45;&gt;PathData -->
+<g id="edge51" class="edge">
+<title>ChartData:xpathData&#39;&#45;&gt;PathData:xPathData</title>
+<path fill="none" stroke="black" d="M1215.62,-1550C1290.95,-1550 1311.33,-1550 1383.65,-1550"/>
+<polygon fill="black" stroke="black" points="1383.36,-1551.75 1388.36,-1550 1383.36,-1548.25 1383.36,-1551.75"/>
+<text text-anchor="middle" x="1308.25" y="-1553.2" font-family="Times,serif" font-size="14.00">_Just % each</text>
+</g>
+<!-- (Text,Point) -->
+<g id="node40" class="node">
+<title>(Text,Point)</title>
+<polygon fill="none" stroke="black" points="1382.88,-1637.25 1382.88,-1710.75 1464.88,-1710.75 1464.88,-1637.25 1382.88,-1637.25"/>
+<text text-anchor="middle" x="1423.88" y="-1693.45" font-family="Times,serif" font-size="14.00">(Text,Point)</text>
+<polyline fill="none" stroke="black" points="1382.88,-1686.25 1464.88,-1686.25"/>
+<text text-anchor="middle" x="1423.88" y="-1668.95" font-family="Times,serif" font-size="14.00">_2</text>
+<polyline fill="none" stroke="black" points="1382.88,-1661.75 1464.88,-1661.75"/>
+<text text-anchor="middle" x="1423.88" y="-1644.45" font-family="Times,serif" font-size="14.00">_1</text>
+</g>
+<!-- ChartData&#45;&gt;(Text,Point) -->
+<g id="edge49" class="edge">
+<title>ChartData:xtextData&#39;&#45;&gt;(Text,Point):x(Text,Point)</title>
+<path fill="none" stroke="black" d="M1215.62,-1599C1299.66,-1599 1295.9,-1693.99 1375.48,-1698.81"/>
+<polygon fill="black" stroke="black" points="1375.31,-1700.56 1380.36,-1698.95 1375.42,-1697.06 1375.31,-1700.56"/>
+<text text-anchor="middle" x="1308.25" y="-1693.2" font-family="Times,serif" font-size="14.00">_Just % each</text>
+</g>
+<!-- Chart&#45;&gt;Style -->
+<g id="edge55" class="edge">
+<title>Chart:xchartStyle&#45;&gt;Style:xStyle</title>
+<path fill="none" stroke="black" d="M967.75,-1184C1044.82,-1184 1055.82,-1127.24 1129.28,-1124.13"/>
+<polygon fill="black" stroke="black" points="1129.15,-1125.89 1134.11,-1124.03 1129.08,-1122.39 1129.15,-1125.89"/>
+</g>
+<!-- Chart&#45;&gt;ChartData -->
+<g id="edge56" class="edge">
+<title>Chart:xchartData&#45;&gt;ChartData:xChartData</title>
+<path fill="none" stroke="black" d="M967.75,-1159C1075.76,-1159 1031.29,-1606.01 1133.35,-1623.47"/>
+<polygon fill="black" stroke="black" points="1132.99,-1625.2 1138.12,-1623.87 1133.28,-1621.71 1132.99,-1625.2"/>
+</g>
+<!-- AxisOptions&#45;&gt;Ticks -->
+<g id="edge57" class="edge">
+<title>AxisOptions:xticks&#45;&gt;Ticks:xTicks</title>
+<path fill="none" stroke="black" d="M471.75,-613C554.84,-613 552.19,-705.14 630.93,-709.82"/>
+<polygon fill="black" stroke="black" points="630.69,-711.56 635.74,-709.96 630.79,-708.06 630.69,-711.56"/>
+</g>
+<!-- AxisOptions&#45;&gt;Place -->
+<g id="edge58" class="edge">
+<title>AxisOptions:xplace&#45;&gt;Place:xPlace</title>
+<path fill="none" stroke="black" d="M471.75,-588C511.6,-588 483.03,-638.95 508,-670 590.45,-772.53 656.03,-749.72 746.75,-845 748.93,-847.29 858.58,-1018.54 880.88,-1049.3"/>
+<polygon fill="black" stroke="black" points="879.26,-1050.08 883.79,-1052.83 881.97,-1047.86 879.26,-1050.08"/>
+</g>
+<!-- AxisBar -->
+<g id="node36" class="node">
+<title>AxisBar</title>
+<g id="a_node36"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:AxisBar" xlink:title="&lt;xAxisBar&gt; AxisBar| &lt;xstyle&gt; style| &lt;xsize&gt; size| &lt;xoverhang&gt; overhang| &lt;xbuffer&gt; buffer| &lt;xanchorTo&gt; anchorTo">
+<polygon fill="none" stroke="black" points="897.88,-343.5 897.88,-490.5 965.62,-490.5 965.62,-343.5 897.88,-343.5"/>
+<text text-anchor="middle" x="931.75" y="-473.2" font-family="Times,serif" font-size="14.00">AxisBar</text>
+<polyline fill="none" stroke="black" points="897.88,-466 965.62,-466"/>
+<text text-anchor="middle" x="931.75" y="-448.7" font-family="Times,serif" font-size="14.00">style</text>
+<polyline fill="none" stroke="black" points="897.88,-441.5 965.62,-441.5"/>
+<text text-anchor="middle" x="931.75" y="-424.2" font-family="Times,serif" font-size="14.00">size</text>
+<polyline fill="none" stroke="black" points="897.88,-417 965.62,-417"/>
+<text text-anchor="middle" x="931.75" y="-399.7" font-family="Times,serif" font-size="14.00">overhang</text>
+<polyline fill="none" stroke="black" points="897.88,-392.5 965.62,-392.5"/>
+<text text-anchor="middle" x="931.75" y="-375.2" font-family="Times,serif" font-size="14.00">buffer</text>
+<polyline fill="none" stroke="black" points="897.88,-368 965.62,-368"/>
+<text text-anchor="middle" x="931.75" y="-350.7" font-family="Times,serif" font-size="14.00">anchorTo</text>
+</a>
+</g>
+</g>
+<!-- AxisOptions&#45;&gt;AxisBar -->
+<g id="edge59" class="edge">
+<title>AxisOptions:xaxisBar&#45;&gt;AxisBar:xAxisBar</title>
+<path fill="none" stroke="black" d="M471.75,-563C594.56,-563 627.27,-564.41 746.75,-536 814.25,-519.95 824.69,-480.41 890.63,-478.11"/>
+<polygon fill="black" stroke="black" points="890.27,-479.86 895.24,-478.03 890.21,-476.36 890.27,-479.86"/>
+<text text-anchor="middle" x="674.25" y="-563.2" font-family="Times,serif" font-size="14.00">_Just</text>
+</g>
+<!-- Adjustments -->
+<g id="node39" class="node">
+<title>Adjustments</title>
+<g id="a_node39"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:Adjustments" xlink:title="&lt;xAdjustments&gt; Adjustments| &lt;xmaxYRatio&gt; maxYRatio| &lt;xmaxXRatio&gt; maxXRatio| &lt;xangledRatio&gt; angledRatio| &lt;xallowDiagonal&gt; allowDiagonal">
+<polygon fill="none" stroke="black" points="626.5,-403.75 626.5,-526.25 722,-526.25 722,-403.75 626.5,-403.75"/>
+<text text-anchor="middle" x="674.25" y="-508.95" font-family="Times,serif" font-size="14.00">Adjustments</text>
+<polyline fill="none" stroke="black" points="626.5,-501.75 722,-501.75"/>
+<text text-anchor="middle" x="674.25" y="-484.45" font-family="Times,serif" font-size="14.00">maxYRatio</text>
+<polyline fill="none" stroke="black" points="626.5,-477.25 722,-477.25"/>
+<text text-anchor="middle" x="674.25" y="-459.95" font-family="Times,serif" font-size="14.00">maxXRatio</text>
+<polyline fill="none" stroke="black" points="626.5,-452.75 722,-452.75"/>
+<text text-anchor="middle" x="674.25" y="-435.45" font-family="Times,serif" font-size="14.00">angledRatio</text>
+<polyline fill="none" stroke="black" points="626.5,-428.25 722,-428.25"/>
+<text text-anchor="middle" x="674.25" y="-410.95" font-family="Times,serif" font-size="14.00">allowDiagonal</text>
+</a>
+</g>
+</g>
+<!-- AxisOptions&#45;&gt;Adjustments -->
+<g id="edge60" class="edge">
+<title>AxisOptions:xadjustments&#45;&gt;Adjustments:xAdjustments</title>
+<path fill="none" stroke="black" d="M471.75,-539C488.12,-539 491.86,-535.22 508,-532.5 557.89,-524.09 571.4,-514.8 618.96,-514.05"/>
+<polygon fill="black" stroke="black" points="618.75,-515.8 623.74,-514.01 618.72,-512.3 618.75,-515.8"/>
+<text text-anchor="middle" x="545.88" y="-535.2" font-family="Times,serif" font-size="14.00">_Just</text>
+</g>
+<!-- AxisBar&#45;&gt;Style -->
+<g id="edge61" class="edge">
+<title>AxisBar:xstyle&#45;&gt;Style:xStyle</title>
+<path fill="none" stroke="black" d="M966.75,-454C990.42,-454 980.16,-481.12 996.75,-498 1029.66,-531.48 1059.51,-518.35 1083,-559 1113.5,-611.78 1075.28,-1090.61 1129.69,-1122.35"/>
+<polygon fill="black" stroke="black" points="1128.88,-1123.94 1134.17,-1123.59 1129.82,-1120.57 1128.88,-1123.94"/>
+</g>
+<!-- AxisBar&#45;&gt;HudChartSection -->
+<g id="edge62" class="edge">
+<title>AxisBar:xanchorTo&#45;&gt;HudChartSection:xHudChartSection</title>
+<path fill="none" stroke="black" d="M966.75,-356C1030.29,-356 1047.76,-356 1108.24,-356"/>
+<polygon fill="black" stroke="black" points="1108.11,-357.75 1113.11,-356 1108.11,-354.25 1108.11,-357.75"/>
+</g>
+<!-- (Text,Point)&#45;&gt;Point -->
+<g id="edge63" class="edge">
+<title>(Text,Point):x_2&#45;&gt;Point:xPoint</title>
+<path fill="none" stroke="black" d="M1465.88,-1674C1488.1,-1674 1480.05,-1649.55 1485.5,-1628 1496.12,-1586.03 1478.36,-1469.25 1503.5,-1434 1528.56,-1398.85 1562.52,-1425.53 1592,-1394 1612.01,-1372.6 1589.36,-1333.72 1610.6,-1327.77"/>
+<polygon fill="black" stroke="black" points="1610.74,-1329.52 1615.5,-1327.18 1610.32,-1326.04 1610.74,-1329.52"/>
+</g>
+</g>
+</svg>
diff --git a/other/exga.svg b/other/exga.svg
--- a/other/exga.svg
+++ b/other/exga.svg
@@ -1,4 +1,4 @@
-<svg height="500" viewBox="-0.25 -483.23 428.9983 483.4803" width="443" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><style>svg {
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="445" height="500" viewBox="-0.4457 -0.5000 0.8914 1.0"><style>svg {
   color-scheme: light dark;
 }
 {
@@ -22,4 +22,11 @@
   .legendBorder g {
     fill: rgb(5%, 5%, 5%);
   }
-}</style><g class="chart"><g class="edges"><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 360.9900,-227.29 C 364.7400,-217.15 369.6200,-203.9500 373.74,-192.83 L 375.9300,-186.9"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 341.66,-231.76 C 327.63,-219.4100 305.45,-199.91 289.9000,-186.23 L 285.3,-182.19"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 348.79,-227.29 C 345.0300,-217.51 340.19,-204.8700 336.02,-194.01 L 333.78,-188.18"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 367.8400,-157.82 C 363.81,-155.06 359.3400,-152.24 355.0,-149.99 C 312.9800,-128.2900 260.2900,-111.07 230.46,-102.16 L 224.4500,-100.38"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 375.7900,-152.29 C 371.87,-142.08 366.76,-128.77 362.4800,-117.6 L 360.2,-111.65"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 387.99,-152.29 C 391.61,-142.51 396.2800,-129.88 400.3000,-119.01 L 402.4600,-113.18"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 204.88,-112.78 C 201.68,-140.37 196.0000,-196.0800 196.0000,-243.49 C 196.0000,-320.48 196.0000,-320.48 196.0000,-320.48 C 196.0000,-362.1 188.7700,-372.9 172.0,-410.9800 C 166.72,-422.97 158.9400,-435.35 152.1500,-445.12 L 148.5,-450.26"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 217.9100,-79.7650 C 227.0600,-68.243 240.2200,-51.6830 250.3000,-38.994 L 254.1400,-34.167"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 207.7100,-76.196 C 208.08,-67.134 208.5500,-55.866 208.96,-45.841 L 209.2200,-39.467"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 196.59,-79.42 C 188.4900,-68.4730 177.1400,-53.13 168.0500,-40.846 L 164.31,-35.7900"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 192.0300,-83.65 C 172.8300,-71.022 139.39,-49.034 117.4800,-34.622 L 112.17,-31.1320"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 154.52,-456.76 C 183.53,-444.06 243.6400,-417.77 276.08,-403.57 L 281.8100,-401.0700"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 122.8,-455.1200 C 101.55,-442.72 62.8730,-420.16 38.9150,-406.18 L 33.454,-403.0"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 133.57,-447.3300 C 126.8800,-420.73 115.0000,-366.91 115.0000,-320.48 C 115.0000,-320.48 115.0000,-320.48 115.0000,-243.49 C 115.0000,-200.2400 113.2700,-149.9 112.0900,-120.4800 L 111.83,-114.18"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 291.8700,-375.76 C 288.1800,-365.98 283.4200,-353.38 279.38,-342.69 L 277.1,-336.64"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 311.28,-380.81 C 325.33,-368.99 347.6300,-350.2300 363.64,-336.77 L 368.39,-332.78"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 304.35,-375.76 C 308.02,-366.39 312.7,-354.44 316.7700,-344.05 L 319.08,-338.15"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 284.12,-307.08 C 298.3400,-294.72 321.1200,-274.93 337.0,-261.13 L 341.69,-257.0500"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 277.44,-302.28 C 281.32,-292.5 286.34,-279.87 290.66,-269.0 L 292.9700,-263.1800"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 264.7900,-302.28 C 261.03,-292.5 256.19,-279.87 252.02,-269.0 L 249.7800,-263.1800"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 120.53,-76.9310 C 126.38,-66.758 133.95,-53.604 140.31,-42.556 L 143.51,-36.997"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 107.2100,-75.0750 C 105.35,-65.9970 103.0700,-54.924 101.06,-45.13 L 99.7840,-38.912"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 154.0400,-39.181 C 155.5000,-67.246 158.0000,-121.96 158.0000,-168.49 C 158.0000,-320.48 158.0000,-320.48 158.0000,-320.48 C 158.0000,-363.33 149.1400,-412.69 143.2200,-440.93 L 141.86,-447.3000"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 89.6780,-38.0020 C 80.352,-65.432 64.0,-120.3900 64.0,-168.49 C 64.0,-320.48 64.0,-320.48 64.0,-320.48 C 64.0,-370.68 100.2,-420.86 121.9700,-446.49 L 126.11,-451.28"/></g></g><g class="shapes"><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="355.0" cy="-244.49" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="382.0" cy="-169.49" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="207.0000" cy="-94.495" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="138.0" cy="-464.98" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="298.0000" cy="-392.98" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="271.0" cy="-319.48" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="272.0" cy="-169.49" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="354.0" cy="-94.495" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="265.0" cy="-19.498" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="18.0" cy="-392.98" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="383.0000" cy="-319.48" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="300.0000" cy="-244.49" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="327.0" cy="-169.49" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="409.0" cy="-94.495" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="210.0" cy="-19.498" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="111.0" cy="-94.495" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="326.0" cy="-319.48" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="243.0" cy="-244.49" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="153.0" cy="-19.498" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="96.0000" cy="-19.498" r="19.4983"/></g></g><g class="labels"><g fill="rgb(-51%, 30%, 37%)" fill-opacity="1.0" font-size="14.0" stroke="none" stroke-width="0.0" text-anchor="middle"><text x="355.0" y="-240.7900">0</text><text x="382.0" y="-165.7900">1</text><text x="207.0000" y="-90.795">2</text><text x="138.0" y="-461.28">3</text><text x="298.0000" y="-389.2800">4</text><text x="271.0" y="-315.7800">5</text><text x="272.0" y="-165.7900">6</text><text x="354.0" y="-90.795">7</text><text x="265.0" y="-15.7980">8</text><text x="18.0" y="-389.2800">9</text><text x="383.0000" y="-315.7800">10</text><text x="300.0000" y="-240.7900">11</text><text x="327.0" y="-165.7900">12</text><text x="409.0" y="-90.795">13</text><text x="210.0" y="-15.7980">14</text><text x="111.0" y="-90.795">15</text><text x="326.0" y="-315.7800">16</text><text x="243.0" y="-240.7900">17</text><text x="153.0" y="-15.7980">18</text><text x="96.0000" y="-15.7980">19</text></g></g></g><g class="hud"/></svg>
+}
+svg { font-family: system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
+}
+
+ticktext { font-family: SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;
+}
+
+</style><g class="chart"><g class="edges"><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.3022,0.0262 C 0.3103,0.0477 0.3210,0.0761 0.3299,0.0997 L 0.3344,0.1116"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.2630,0.0170 C 0.2340,0.0427 0.1874,0.0838 0.1550,0.1125 L 0.1455,0.1209"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.2774,0.0262 C 0.2697,0.0465 0.2598,0.0729 0.2512,0.0957 L 0.2466,0.1078"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.3187,0.1712 C 0.3103,0.1772 0.3010,0.1833 0.2918,0.1881 C 0.2036,0.2342 0.0923,0.2696 0.0298,0.2875 L 0.0172,0.2911"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.3345,0.1819 C 0.3264,0.2034 0.3157,0.2318 0.3068,0.2554 L 0.3024,0.2673"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.3594,0.1819 C 0.3670,0.2022 0.3770,0.2286 0.3855,0.2514 L 0.3901,0.2636"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.0227,0.2657 C -0.0292,0.2087 -0.0410,0.0923 -0.0410,-0.0067 C -0.0410,-0.1664 -0.0410,-0.1664 -0.0410,-0.1664 C -0.0410,-0.2519 -0.0545,-0.2747 -0.0900,-0.3525 C -0.1012,-0.3773 -0.1181,-0.4026 -0.1328,-0.4224 L -0.1407,-0.4329"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.0041,0.3318 C 0.0247,0.3564 0.0551,0.3928 0.0777,0.4200 L 0.0856,0.4295"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.0157,0.3399 C -0.0141,0.3589 -0.0122,0.3827 -0.0105,0.4038 L -0.0095,0.4166"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.0390,0.3340 C -0.0547,0.3564 -0.0766,0.3877 -0.0944,0.4131 L -0.1017,0.4235"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.0488,0.3252 C -0.0874,0.3513 -0.1545,0.3966 -0.1989,0.4265 L -0.2096,0.4338"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.1299,-0.4465 C -0.0691,-0.4207 0.0593,-0.3662 0.1279,-0.3371 L 0.1400,-0.3320"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.1945,-0.4426 C -0.2379,-0.4173 -0.3168,-0.3712 -0.3658,-0.3427 L -0.3769,-0.3362"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.1717,-0.4265 C -0.1842,-0.3719 -0.2063,-0.2614 -0.2063,-0.1664 C -0.2063,-0.1664 -0.2063,-0.1664 -0.2063,-0.0067 C -0.2063,0.0827 -0.2107,0.1865 -0.2137,0.2478 L -0.2144,0.2609"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.1604,-0.2803 C 0.1525,-0.2599 0.1423,-0.2337 0.1338,-0.2116 L 0.1292,-0.1997"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.2008,-0.2907 C 0.2297,-0.2665 0.2754,-0.2282 0.3084,-0.2005 L 0.3182,-0.1923"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.1864,-0.2803 C 0.1938,-0.2613 0.2031,-0.2371 0.2114,-0.2159 L 0.2160,-0.2039"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.1434,-0.1387 C 0.1729,-0.1129 0.2203,-0.0714 0.2532,-0.0427 L 0.2628,-0.0343"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.1291,-0.1295 C 0.1370,-0.1092 0.1473,-0.0828 0.1562,-0.0600 L 0.1609,-0.0478"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.1034,-0.1295 C 0.0955,-0.1092 0.0852,-0.0828 0.0763,-0.0600 L 0.0715,-0.0478"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.1957,0.3391 C -0.1828,0.3605 -0.1660,0.3881 -0.1520,0.4112 L -0.1454,0.4221"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.2234,0.3438 C -0.2266,0.3622 -0.2305,0.3845 -0.2340,0.4043 L -0.2362,0.4169"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.1234,0.4166 C -0.1216,0.3580 -0.1185,0.2451 -0.1185,0.1490 C -0.1185,-0.1664 -0.1185,-0.1664 -0.1185,-0.1664 C -0.1185,-0.2548 -0.1386,-0.3565 -0.1519,-0.4142 L -0.1548,-0.4265"/></g><g stroke-width="0.0020" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.2575,0.4191 C -0.2784,0.3620 -0.3145,0.2487 -0.3145,0.1490 C -0.3145,-0.1664 -0.3145,-0.1664 -0.3145,-0.1664 C -0.3145,-0.2693 -0.2406,-0.3722 -0.1962,-0.4248 L -0.1877,-0.4346"/></g></g><g class="shapes"><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="0.2898" cy="-0.0087" r="0.0367"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="0.3469" cy="0.1470" r="0.0367"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="-0.0185" cy="0.3027" r="0.0367"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="-0.1635" cy="-0.4627" r="0.0367"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="0.1734" cy="-0.3157" r="0.0367"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="0.1162" cy="-0.1644" r="0.0367"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="0.1183" cy="0.1470" r="0.0367"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="0.2898" cy="0.3027" r="0.0367"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="0.1081" cy="0.4584" r="0.0367"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="-0.4085" cy="-0.3157" r="0.0367"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="0.3490" cy="-0.1644" r="0.0411"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="0.1754" cy="-0.0087" r="0.0411"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="0.2326" cy="0.1470" r="0.0411"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="0.4041" cy="0.3027" r="0.0411"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="-0.0063" cy="0.4584" r="0.0411"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="-0.2165" cy="0.3027" r="0.0411"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="0.2306" cy="-0.1644" r="0.0411"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="0.0570" cy="-0.0087" r="0.0411"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="-0.1247" cy="0.4584" r="0.0411"/></g><g stroke-width="0.0010" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><circle cx="-0.2431" cy="0.4584" r="0.0411"/></g></g><g class="labels"><g stroke-width="0.0" stroke="none" fill="rgb(40%, 40%, 40%)" fill-opacity="0.8" font-size="0.0327" text-anchor="middle"><text x="0.2898" y="0.0035">0</text><text x="0.3469" y="0.1592">1</text><text x="-0.0185" y="0.3149">2</text><text x="-0.1635" y="-0.4505">3</text><text x="0.1734" y="-0.3035">4</text><text x="0.1162" y="-0.1522">5</text><text x="0.1183" y="0.1592">6</text><text x="0.2898" y="0.3149">7</text><text x="0.1081" y="0.4706">8</text><text x="-0.4085" y="-0.3035">9</text><text x="0.3490" y="-0.1522">10</text><text x="0.1754" y="0.0035">11</text><text x="0.2326" y="0.1592">12</text><text x="0.4041" y="0.3149">13</text><text x="-0.0063" y="0.4706">14</text><text x="-0.2165" y="0.3149">15</text><text x="0.2306" y="-0.1522">16</text><text x="0.0570" y="0.0035">17</text><text x="-0.1247" y="0.4706">18</text><text x="-0.2431" y="0.4706">19</text></g></g></g><g class="hud"></g></svg>
diff --git a/other/nh.svg b/other/nh.svg
--- a/other/nh.svg
+++ b/other/nh.svg
@@ -1,4 +1,4 @@
-<svg height="500" viewBox="-315.65 -324.5 1005.0000 325.0" width="1546" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><style>svg {
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="500" viewBox="-0.5654 -0.5000 1.13 1.0"><style>svg {
   color-scheme: light dark;
 }
 {
@@ -22,4 +22,11 @@
   .legendBorder g {
     fill: rgb(5%, 5%, 5%);
   }
-}</style><g class="chart"><g class="edges"><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 226.67,-180.3000 C 218.42,-189.6300 208.1400,-201.23 199.34,-211.1700 L 195.15,-215.9000"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 170.21,-180.3000 C 171.85,-189.1200 173.87,-199.97 175.64,-209.5300 L 176.82,-215.9000"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 110.74,-180.3000 C 123.2400,-189.81 138.84,-201.6800 152.07,-211.7500 L 157.2,-215.65"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 192.3600,-252.3000 C 198.9,-261.46 207.0,-272.81 214.02,-282.62 L 217.78,-287.9"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 162.7,-252.3000 C 153.29,-261.7100 141.56,-273.44 131.56,-283.4400 L 127.1,-287.9"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 76.124,-252.3000 C 82.0090,-261.46 89.304,-272.81 95.6150,-282.62 L 99.004,-287.9"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 181.36,-36.303 C 176.31,-45.3740 170.05,-56.5960 164.62,-66.35 L 161.53,-71.896"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 124.56,-96.119 C 98.982,-102.5 62.272,-116.1700 45.0,-144.0 C 32.513,-164.12 41.437,-191.1 51.02,-210.0600 L 53.992,-215.6700"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 179.35,-101.76 C 205.58,-112.2 246.22,-128.66 281.0,-144.0 C 281.87,-144.38 282.75,-144.78 283.64,-145.17 L 289.5500,-147.86"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 338.83,-108.3 C 335.11,-117.29 330.51,-128.39 326.5,-138.08 L 324.09,-143.9"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 254.03,-36.4830 C 232.89,-47.366 205.83,-61.292 184.89,-72.069 L 179.16,-75.02"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 291.56,-36.4120 C 296.76,-61.887 306.46,-109.37 312.26,-137.79 L 313.51,-143.89"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 122.6400,-36.303 C 127.6900,-45.3740 133.95,-56.5960 139.38,-66.35 L 142.47,-71.896"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 289.61,-177.0 C 269.5900,-187.22 242.1500,-201.2400 219.7400,-212.7 L 214.1500,-215.55"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 313.79,-180.3000 C 312.15,-189.1200 310.13,-199.97 308.36,-209.5300 L 307.18,-215.9000"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 285.71,-252.3000 C 275.84,-261.6400 263.55,-273.26 253.03,-283.21 L 248.34,-287.65"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 63.4720,-36.4830 C 80.423,-46.539 101.75,-59.193 119.2300,-69.561 L 124.5200,-72.699"/></g></g><g class="shapes"><g fill="rgb(2%, 29%, 48%)" fill-opacity="0.1" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="58.9997" x="212.5002" y="-180.0"/></g><g fill="rgb(2%, 29%, 48%)" fill-opacity="0.1" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="64.0001" x="198.0000" y="-324.0"/></g><g fill="rgb(2%, 29%, 48%)" fill-opacity="0.1" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="54.0" x="140.0" y="-180.0"/></g><g fill="rgb(2%, 29%, 48%)" fill-opacity="0.1" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="67.9997" x="54.0002" y="-180.0"/></g><g fill="rgb(2%, 29%, 48%)" fill-opacity="0.1" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="81.0" x="139.5" y="-252.0"/></g><g fill="rgb(2%, 29%, 48%)" fill-opacity="0.1" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="61.9999" x="34.0000" y="-252.0"/></g><g fill="rgb(2%, 29%, 48%)" fill-opacity="0.1" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="66.0002" x="157.9999" y="-36.0"/></g><g fill="rgb(2%, 29%, 48%)" fill-opacity="0.1" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="54.0" x="125.0" y="-108.0"/></g><g fill="rgb(2%, 29%, 48%)" fill-opacity="0.1" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="58.9997" x="316.5002" y="-108.0"/></g><g fill="rgb(2%, 29%, 48%)" fill-opacity="0.1" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="94.0032" x="62.9984" y="-324.0"/></g><g fill="rgb(2%, 29%, 48%)" fill-opacity="0.1" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="92.0016" x="241.9992" y="-36.0"/></g><g fill="rgb(2%, 29%, 48%)" fill-opacity="0.1" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="54.0" x="86.0" y="-36.0"/></g><g fill="rgb(2%, 29%, 48%)" fill-opacity="0.1" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="54.0" x="290.0" y="-180.0"/></g><g fill="rgb(2%, 29%, 48%)" fill-opacity="0.1" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="77.9976" x="265.0012" y="-252.0"/></g><g fill="rgb(2%, 29%, 48%)" fill-opacity="0.1" stroke="rgb(33%, -22%, 26%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="67.9997" x="0.0002" y="-36.0"/></g></g><g class="labels"><g fill="rgb(33%, -22%, 26%)" fill-opacity="1.0" font-size="14.0" stroke="none" stroke-width="0.0" text-anchor="middle"><text x="242.0" y="-158.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Action.html#t:Actions">Actions</a></text><text x="230.0" y="-302.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Additive.html#t:Additive">Additive</a></text><text x="167.0" y="-158.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Metric.html#t:Basis">Basis</a></text><text x="88.0" y="-158.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Metric.html#t:Direction">Direction</a></text><text x="180.0" y="-230.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Distributive.html#t:Distributive">Distributive</a></text><text x="65.0" y="-230.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Multiplicative.html#t:Divisive">Divisive</a></text><text x="191.0" y="-14.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:ExpField">ExpField</a></text><text x="152.0" y="-86.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:Field">Field</a></text><text x="346.0" y="-86.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Data-Integral.html#t:Integral">Integral</a></text><text x="110.0" y="-302.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Multiplicative.html#t:Multiplicative">Multiplicative</a></text><text x="288.0" y="-14.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:QuotientField">QuotientField</a></text><text x="113.0" y="-14.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Data-Rational.html#t:Ratio">Ratio</a></text><text x="317.0" y="-158.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Ring.html#t:Ring">Ring</a></text><text x="304.0" y="-230.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Additive.html#t:Subtractive">Subtractive</a></text><text x="34.0" y="-14.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:TrigField">TrigField</a></text></g></g></g><g class="hud"/></svg>
+}
+svg { font-family: system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
+}
+
+ticktext { font-family: SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;
+}
+
+</style><g class="chart"><g class="edges"><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.1278,-0.0563 C 0.1028,-0.0850 0.0717,-0.1207 0.0450,-0.1513 L 0.0323,-0.1658"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.0437,-0.0563 C -0.0386,-0.0834 -0.0324,-0.1168 -0.0270,-0.1462 L -0.0233,-0.1658"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.2266,-0.0563 C -0.1882,-0.0856 -0.1402,-0.1221 -0.0995,-0.1531 L -0.0837,-0.1651"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.0230,-0.2778 C 0.0423,-0.3060 0.0662,-0.3410 0.0870,-0.3711 L 0.0981,-0.3874"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.0675,-0.2778 C -0.0969,-0.3068 -0.1335,-0.3429 -0.1647,-0.3737 L -0.1786,-0.3874"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.3339,-0.2778 C -0.3162,-0.3060 -0.2943,-0.3410 -0.2753,-0.3711 L -0.2651,-0.3874"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.0124,0.3868 C -0.0280,0.3588 -0.0472,0.3243 -0.0639,0.2943 L -0.0734,0.2772"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.1864,0.2025 C -0.2644,0.1826 -0.3763,0.1405 -0.4289,0.0554 C -0.4672,-0.0066 -0.4398,-0.0896 -0.4103,-0.1479 L -0.4012,-0.1652"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.0193,0.1853 C 0.0608,0.1531 0.1848,0.1024 0.2911,0.0554 C 0.2938,0.0542 0.2965,0.0530 0.2992,0.0518 L 0.3174,0.0435"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.4667,0.1652 C 0.4556,0.1376 0.4420,0.1034 0.4301,0.0736 L 0.4229,0.0557"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.2089,0.3862 C 0.1447,0.3529 0.0628,0.3105 -0.0010,0.2774 L -0.0185,0.2683"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.3236,0.3864 C 0.3396,0.3080 0.3694,0.1619 0.3873,0.0745 L 0.3911,0.0557"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.1931,0.3868 C -0.1776,0.3588 -0.1583,0.3243 -0.1416,0.2943 L -0.1321,0.2772"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.3178,-0.0467 C 0.2573,-0.0780 0.1748,-0.1208 0.1073,-0.1558 L 0.0895,-0.1650"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.3920,-0.0563 C 0.3869,-0.0834 0.3807,-0.1168 0.3753,-0.1462 L 0.3716,-0.1658"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.3056,-0.2778 C 0.2752,-0.3066 0.2374,-0.3423 0.2050,-0.3730 L 0.1906,-0.3866"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.3752,0.3862 C -0.3230,0.3553 -0.2574,0.3163 -0.2036,0.2844 L -0.1873,0.2748"/></g></g><g class="shapes"><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1785" height="0.1108" x="0.0849" y="-0.0554"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1946" height="0.1108" x="0.0368" y="-0.4985"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1662" height="0.1108" x="-0.1366" y="-0.0554"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2062" height="0.1108" x="-0.3997" y="-0.0554"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2477" height="0.1108" x="-0.1374" y="-0.2769"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1900" height="0.1108" x="-0.4624" y="-0.2769"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2015" height="0.1108" x="-0.0835" y="0.3877"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1662" height="0.1108" x="-0.1858" y="0.1662"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1785" height="0.1108" x="0.3988" y="0.1662"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2869" height="0.1108" x="-0.3755" y="-0.4985"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2800" height="0.1108" x="0.1726" y="0.3877"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1662" height="0.1108" x="-0.3058" y="0.3877"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1662" height="0.1108" x="0.3188" y="-0.0554"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2385" height="0.1108" x="0.2426" y="-0.2769"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2062" height="0.1108" x="-0.5689" y="0.3877"/></g></g><g class="labels"><g stroke-width="0.0" stroke="none" fill="rgb(40%, 40%, 40%)" fill-opacity="0.8" font-size="0.0369" text-anchor="middle"><text x="0.1742" y="0.0123"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Action.html#t:Actions">Actions</a></text><text x="0.1342" y="-0.4308"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Additive.html#t:Additive">Additive</a></text><text x="-0.0535" y="0.0123"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Metric.html#t:Basis">Basis</a></text><text x="-0.2966" y="0.0123"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Metric.html#t:Direction">Direction</a></text><text x="-0.0135" y="-0.2092"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Distributive.html#t:Distributive">Distributive</a></text><text x="-0.3674" y="-0.2092"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Multiplicative.html#t:Divisive">Divisive</a></text><text x="0.0172" y="0.4554"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:ExpField">ExpField</a></text><text x="-0.1028" y="0.2338"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:Field">Field</a></text><text x="0.488" y="0.2338"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Data-Integral.html#t:Integral">Integral</a></text><text x="-0.2320" y="-0.4308"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Multiplicative.html#t:Multiplicative">Multiplicative</a></text><text x="0.3126" y="0.4554"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:QuotientField">QuotientField</a></text><text x="-0.2228" y="0.4554"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Data-Rational.html#t:Ratio">Ratio</a></text><text x="0.4018" y="0.0123"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Ring.html#t:Ring">Ring</a></text><text x="0.3618" y="-0.2092"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Additive.html#t:Subtractive">Subtractive</a></text><text x="-0.4658" y="0.4554"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:TrigField">TrigField</a></text></g></g></g><g class="hud"></g></svg>
diff --git a/readme.org b/readme.org
--- a/readme.org
+++ b/readme.org
@@ -1,6 +1,6 @@
 #+TITLE: dotparse
 
-[[https://hackage.haskell.org/package/dotparse][file:https://img.shields.io/hackage/v/dotparse.svg]]
+[[https://hackage.haskell.org/package/dotparse][file:https://img.shields.io/hackage/v/dotparse.svg]] [[https://github.com/tonyday567/chart-svg/actions?query=workflow%3Ahaskell-ci][file:https://github.com/tonyday567/dotparse/workflows/haskell-ci/badge.svg]]
 
 * Introduction
 
@@ -165,9 +165,9 @@
 
 ByteString of the processed Graph
 
-        #+begin_src haskell :results output
+#+begin_src haskell :results output
 BS.putStr =<< processDot Directed (dotPrint defaultDotConfig exInt)
-        #+end_src
+#+end_src
 
 ** processGraph
 
@@ -187,44 +187,41 @@
 
 #+begin_src haskell :file other/exga.svg :results output graphics file :exports both
 import Chart (writeChartOptions)
-writeChartOptions "other/exga.svg" (graphToChartWith defaultChartConfig exGraphAugmented)
+writeChartOptions "other/exga.svg" (graphToChart exGraphAugmented)
 #+end_src
 
 #+RESULTS:
 [[file:other/exga.svg]]
 
 * Development
-
 ** imports
 
-#+begin_src haskell :results output
+#+begin_src haskell-ng :results output
 :reload
-:set prompt "> "
 :set -XOverloadedLabels
 :set -XOverloadedStrings
 :set -Wno-type-defaults
+:set -Wno-x-partial
 :set -XImportQualifiedPost
 import Chart
 import Optics.Core
 import FlatParse.Basic qualified as FP
 import qualified Data.ByteString as BS
+import qualified Data.Text as Text
 import qualified Data.ByteString.Char8 as Char8
+import Algebra.Graph qualified as G
+import Data.Monoid
 import GHC.Exts
 import DotParse
 import DotParse.Examples
+import DotParse.Examples.AST
 import DotParse.Examples.NumHask
+import DotParse.Examples.Base
 import Data.Proxy
 print "ok"
 #+end_src
 
-#+RESULTS:
-: [3 of 6] Compiling DotParse.Types   ( src/DotParse/Types.hs, interpreted ) [Source file changed]
-: [5 of 6] Compiling DotParse.Examples.NumHask ( src/DotParse/Examples/NumHask.hs, interpreted ) [Source file changed]
-: Ok, six modules loaded.
-: >
-: ok
-
-** write examples
+** testAll
 
 Round-trip test
 
@@ -252,36 +249,14 @@
 ex15
 #+end_example
 
-Render examples
+* chart-svg AST
 
-#+begin_src haskell
-svgAll
+#+begin_src haskell-ng :results output
+g1 = dotAST allSC componentEdges
+BS.writeFile "other/ast.dot" $ dotPrint defaultDotConfig g1
 #+end_src
 
-#+RESULTS:
-#+begin_example
-ex0
-ex1
-ex2
-ex3
-ex4
-ex5
-ex6
-ex7
-ex8
-ex9
-ex10
-ex11
-ex12
-ex13
-ex14
-ex15
-#+end_example
-
-** numhask example
-
-  #+begin_src haskell
-writeNHChart
-  #+end_src
+#+begin_src sh :results output
+dot other/ast.dot -Tsvg >other/ast.svg
+#+end_src
 
-This is bugged downstream as chart-svg uses the link string (which is very long compared with the displayed text) to estimate the bounding box and results in a very wide chart with a lot of white space either side.
diff --git a/src/DotParse/Examples.hs b/src/DotParse/Examples.hs
--- a/src/DotParse/Examples.hs
+++ b/src/DotParse/Examples.hs
@@ -514,9 +514,9 @@
 
 -- | algebraic graph example
 --
--- >>> exGraph = defaultGraph & addStatements (toStatements Directed (Char8.pack . show <$> exAGraph))
--- >>> exGraphAugmented <- processGraph exGraph
--- >>> writeChartOptions "other/exga.svg" (graphToChartWith defaultChartConfig exGraphAugmented)
+-- > exGraph = defaultGraph & addStatements (toStatements Directed (Char8.pack . show <$> exAGraph))
+-- > exGraphAugmented <- processGraph exGraph
+-- > writeChartOptions "other/exga.svg" (graphToChart exGraphAugmented)
 --
 -- ![augmentation example](other/exga.svg)
 exAGraph :: G.Graph Int
diff --git a/src/DotParse/Examples/AST.hs b/src/DotParse/Examples/AST.hs
new file mode 100644
--- /dev/null
+++ b/src/DotParse/Examples/AST.hs
@@ -0,0 +1,592 @@
+{-# LANGUAGE OverloadedLabels #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE QuasiQuotes #-}
+
+-- | Example of Dot graph construction for the <https://hackage.haskell.org/package/chart-svg chart-svg> class heirarchy.
+module DotParse.Examples.AST where
+
+import Algebra.Graph.Labelled qualified as L
+import Data.ByteString (ByteString)
+import Data.ByteString.Char8 qualified as B
+import Data.List qualified as List
+import Data.List.NonEmpty hiding (filter, head, length, map, zip, zipWith, (!!))
+import Data.Map.Strict qualified as Map
+import Data.Maybe
+import Data.Monoid
+import Data.String.Interpolate
+import Data.These
+import DotParse.Types
+import GHC.Generics
+import Optics.Core
+import Prelude hiding (replicate)
+
+-- $setup
+-- >>> import DotParse
+-- >>> :set -XOverloadedStrings
+
+-- | A Haskell class and (informal) list of sub-components.
+data SubComponents = SubComponents
+  { classComponent :: ByteString,
+    subComponents :: [ByteString]
+  }
+  deriving (Eq, Show, Ord, Generic)
+
+-- | Relationship between a class, a sub-component and the class of the sub-component.
+data ComponentEdge = ComponentEdge
+  { edgeClassComponent :: ByteString,
+    edgeSubComponent :: ByteString,
+    subComponentClass :: ByteString,
+    edgeLabel :: Maybe ByteString
+  }
+  deriving (Eq, Show, Ord, Generic)
+
+-- | algebraic graph vertices
+graphVs :: (Monoid a) => [SubComponents] -> L.Graph a (ByteString, ByteString)
+graphVs cs =
+  L.vertices $
+    ((\x -> (x, x)) . view #classComponent <$> cs)
+      <> (mconcat $ subs <$> cs)
+
+-- | Convert sub-components to a list of class, subcomponent bytestring tuples.
+subs :: SubComponents -> [(ByteString, ByteString)]
+subs c = (view #classComponent c,) <$> view #subComponents c
+
+-- | algebraic graph edges
+graphEs :: [ComponentEdge] -> L.Graph (Maybe ByteString) (ByteString, ByteString)
+graphEs es =
+  L.edges ((\c -> (view #edgeLabel c, (view #edgeClassComponent c, view #edgeSubComponent c), (view #subComponentClass c, view #subComponentClass c))) <$> es)
+
+-- | algebraic graph
+graphAST :: [SubComponents] -> [ComponentEdge] -> L.Graph (Maybe ByteString) (ByteString, ByteString)
+graphAST cs es =
+  graphVs cs <> graphEs es
+
+-- | Create a list of 'SubComponents' from a list of 'ComponentEdge's
+fromCEs :: [ComponentEdge] -> [SubComponents]
+fromCEs es = fmap (uncurry SubComponents) $ Map.toList $ Map.fromListWith (<>) ((\e -> (view #edgeClassComponent e, [view #edgeSubComponent e])) <$> es)
+
+-- | Convert an algebraic Graph into dot record nodes
+recordNodes :: L.Graph (Maybe ByteString) (ByteString, ByteString) -> [Statement]
+recordNodes g = (\(s, cs) -> StatementNode $ NodeStatement (IDQuoted s) Nothing (Map.fromList ([(ID "label", IDQuoted (ls (s, cs)))] <> maybe [] (\url -> [(ID "URL", IDQuoted url)]) (toURL s)))) <$> supers
+  where
+    ls (s, cs) = B.intercalate "|" $ ("<x" <> s <> "> " <> s) : fmap (\y -> " <x" <> y <> "> " <> y) cs
+    supers = (\(s, cs) -> (s, filter (/= s) cs)) <$> (Map.toList $ Map.fromListWith (++) ((\(s, c) -> (s, [c])) <$> L.vertexList g))
+
+-- | Convert an algebraic Graph into dot edges
+recordEdges :: Directed -> L.Graph (Maybe ByteString) (ByteString, ByteString) -> [Statement]
+recordEdges d g =
+  ( \(l, (s0, c0), (s1, c1)) ->
+      StatementEdge $
+        EdgeStatement
+          (fromDirected d)
+          (EdgeID (IDQuoted s0) (Just (Port (This (IDQuoted ("x" <> c0))))))
+          (fromList [EdgeID (IDQuoted c1) (Just (Port (This (IDQuoted ("x" <> s1)))))])
+          (Map.fromList [(ID "label", IDQuoted (fromMaybe "x" l))])
+  )
+    <$> L.edgeList g
+
+-- | create Statements from a (edge labelled) algebraic graph
+--
+-- https://graphviz.org/Gallery/directed/datastruct.html
+toStatementsRecord :: Directed -> L.Graph (Maybe ByteString) (ByteString, ByteString) -> [Statement]
+toStatementsRecord d g =
+  recordEdges d g <> recordNodes g
+
+-- | Convert a node ID to a label for chart-svg charts
+-- Doing this directly in dot doesn't quite work because the engines get the width of the link wrong.
+toURL :: ByteString -> Maybe ByteString
+toURL name = fmap (\i' -> [i|https://hackage.haskell.org/package/#{view #itemPackage i'}/docs/#{view #itemModule i'}.html\#t:#{view #item i'}|]) item
+  where
+    item = List.find ((== name) . view #item) itemModules
+
+-- | AST 'Graph'
+--
+-- > gAST = dotAST allSC componentEdges
+-- > C.writeFile "other/ast.dot" $ dotPrint defaultDotConfig gAST
+-- > bsSvg <- processDotWith Directed ["-Tsvg"] (dotPrint defaultDotConfig gAST)
+-- > C.writeFile "other/ast.svg" bsSvg
+dotAST :: [SubComponents] -> [ComponentEdge] -> Graph
+dotAST sc ce =
+  defaultGraph
+    & set (attL GraphType (ID "size")) (Just $ IDQuoted "5")
+    & addStatements (toStatementsRecord Directed (graphAST sc ce))
+    & attL NodeType (ID "shape")
+    .~ Just (ID "record")
+    & gattL (ID "rankdir")
+    .~ Just (IDQuoted "LR")
+
+-- | Link values
+data ItemModule = ItemModule {item :: ByteString, itemModule :: ByteString, itemPackage :: ByteString} deriving (Eq, Show, Generic)
+
+-- | List of link values
+itemModules :: [ItemModule]
+itemModules =
+  [ ItemModule "ChartOptions" "Chart-Markup" "chart-svg",
+    ItemModule "MarkupOptions" "Chart-Markup" "chart-svg",
+    ItemModule "CssOptions" "Chart-Markup" "chart-svg",
+    ItemModule "ChartTree" "Chart-Primitive" "chart-svg",
+    ItemModule "Chart" "Chart-Primitive" "chart-svg",
+    ItemModule "HudOptions" "Chart-Hud" "chart-svg",
+    ItemModule "RenderStyle" "Chart-Markup" "chart-svg",
+    ItemModule "ChartAspect" "Chart-Primitive" "chart-svg",
+    ItemModule "ShapeRendering" "Chart-Markup" "chart-svg",
+    ItemModule "PreferColorScheme" "Chart-Primitive" "chart-svg",
+    ItemModule "Tree" "Data-Tree" "containers",
+    ItemModule "Priority" "Chart-Hud" "chart-svg",
+    ItemModule "TitleOptions" "Chart-Hud" "chart-svg",
+    ItemModule "AxisOptions" "Chart-Hud" "chart-svg",
+    ItemModule "LegendOptions" "Chart-Hud" "chart-svg",
+    ItemModule "FrameOptions" "Chart-Hud" "chart-svg",
+    ItemModule "Adjustments" "Chart-Hud" "chart-svg",
+    ItemModule "Ticks" "Chart-Hud" "chart-svg",
+    ItemModule "Tick" "Chart-Hud" "chart-svg",
+    ItemModule "Place" "Chart-Hud" "chart-svg",
+    ItemModule "TickStyle" "Chart-Hud" "chart-svg",
+    ItemModule "AxisBar" "Chart-Hud" "chart-svg",
+    ItemModule "HudChartSection" "Chart-Hud" "chart-svg",
+    ItemModule "TickExtend" "Chart-Hud" "chart-svg",
+    ItemModule "FormatN" "Data-FormatN" "formatn",
+    ItemModule "FStyle" "Data-FormatN" "formatn",
+    ItemModule "Colour" "Data-Colour" "chart-svg",
+    ItemModule "Style" "Chart-Style" "chart-svg",
+    ItemModule "EscapeText" "Chart-Style" "chart-svg",
+    ItemModule "GlyphShape" "Chart-Style" "chart-svg",
+    ItemModule "Anchor" "Chart-Style" "chart-svg",
+    ItemModule "LineCap" "Chart-Style" "chart-svg",
+    ItemModule "LineJoin" "Chart-Style" "chart-svg",
+    ItemModule "ScaleP" "Chart-Style" "chart-svg",
+    ItemModule "ChartData" "Chart-Primitive" "chart-svg",
+    ItemModule "PathData" "Data-Path" "chart-svg",
+    ItemModule "ArcInfo" "Data-Path" "chart-svg",
+    ItemModule "Rect" "NumHask-Space-Rect" "numhask-space",
+    ItemModule "Point" "NumHask-Space-Point" "numhask-space"
+  ]
+
+-- | list of chart-svg component edges
+componentEdges :: [ComponentEdge]
+componentEdges =
+  [ ComponentEdge "ChartOptions" "markupOptions" "MarkupOptions" (Just ""),
+    ComponentEdge "ChartOptions" "hudOptions" "HudOptions" (Just ""),
+    ComponentEdge "ChartOptions" "chartTree" "ChartTree" (Just ""),
+    ComponentEdge "MarkupOptions" "chartAspect" "ChartAspect" (Just ""),
+    ComponentEdge "MarkupOptions" "cssOptions" "CssOptions" (Just ""),
+    ComponentEdge "MarkupOptions" "renderStyle" "RenderStyle" (Just ""),
+    ComponentEdge "CssOptions" "shapeRendering" "ShapeRendering" (Just ""),
+    ComponentEdge "CssOptions" "preferColorScheme" "PreferColorScheme" (Just ""),
+    ComponentEdge "HudOptions" "axes" "AxisOptions" (Just "each % #item"),
+    ComponentEdge "HudOptions" "frames" "FrameOptions" (Just "each % #item"),
+    ComponentEdge "HudOptions" "legends" "LegendOptions" (Just "each % #item"),
+    ComponentEdge "HudOptions" "titles" "TitleOptions" (Just "each % #item"),
+    ComponentEdge "HudOptions" "axes" "Priority" (Just "each % #priority"),
+    ComponentEdge "HudOptions" "frames" "Priority" (Just "each % #priority"),
+    ComponentEdge "HudOptions" "legends" "Priority" (Just "each % #priority"),
+    ComponentEdge "HudOptions" "titles" "Priority" (Just "each % #priority"),
+    ComponentEdge "AxisOptions" "axisBar" "AxisBar" (Just "_Just"),
+    ComponentEdge "AxisOptions" "adjustments" "Adjustments" (Just "_Just"),
+    ComponentEdge "AxisOptions" "ticks" "Ticks" (Just ""),
+    ComponentEdge "AxisOptions" "place" "Place" (Just ""),
+    ComponentEdge "AxisBar" "style" "Style" (Just ""),
+    ComponentEdge "AxisBar" "anchorTo" "HudChartSection" (Just ""),
+    ComponentEdge "Tick" "formatN'" "FormatN" (Just "_Just"),
+    ComponentEdge "FormatN" "fstyle" "FStyle" (Just ""),
+    ComponentEdge "Tick" "tickExtend'" "TickExtend" (Just "_Just"),
+    ComponentEdge "Ticks" "tick" "Tick" (Just "_Just"),
+    ComponentEdge "Ticks" "glyphTick" "TickStyle" (Just "_Just"),
+    ComponentEdge "Ticks" "textTick" "TickStyle" (Just "_Just"),
+    ComponentEdge "Ticks" "lineTick" "TickStyle" (Just "_Just"),
+    ComponentEdge "TickStyle" "style" "Style" (Just ""),
+    ComponentEdge "TickStyle" "anchorTo" "HudChartSection" (Just ""),
+    ComponentEdge "FrameOptions" "frame" "Style" (Just "#frame % _Just"),
+    ComponentEdge "FrameOptions" "anchorTo" "HudChartSection" (Just ""),
+    ComponentEdge "TitleOptions" "style" "Style" (Just ""),
+    ComponentEdge "TitleOptions" "place" "Place" (Just ""),
+    ComponentEdge "TitleOptions" "anchor" "Anchor" (Just ""),
+    ComponentEdge "ChartTree" "tree" "Tree" (Just ""),
+    ComponentEdge "ChartTree" "charts'" "Chart" (Just "each"),
+    ComponentEdge "Chart" "chartStyle" "Style" (Just ""),
+    ComponentEdge "Chart" "chartData" "ChartData" (Just ""),
+    ComponentEdge "ChartData" "rectData'" "Rect" (Just "_Just % each"),
+    ComponentEdge "ChartData" "lineData'" "Point" (Just "_Just % each % each"),
+    ComponentEdge "ChartData" "glyphData'" "Point" (Just "_Just % each"),
+    ComponentEdge "ChartData" "textData'" "(Text,Point)" (Just "_Just % each"),
+    ComponentEdge "(Text,Point)" "_2" "Point" (Just ""),
+    ComponentEdge "ChartData" "pathData'" "PathData" (Just "_Just % each"),
+    ComponentEdge "ChartData" "blankData'" "Rect" (Just "_Just % each"),
+    ComponentEdge "LegendOptions" "textStyle" "Style" (Just ""),
+    ComponentEdge "LegendOptions" "frame" "Style" (Just "_Just"),
+    ComponentEdge "LegendOptions" "place" "Place" (Just ""),
+    ComponentEdge "LegendOptions" "scaleP" "ScaleP" (Just ""),
+    ComponentEdge "LegendOptions" "legendCharts" "Chart" (Just "each % _2 % each"),
+    ComponentEdge "PathData" "ArcP" "ArcInfo" (Just "(ArcP arcinfo _)"),
+    ComponentEdge "Style" "color" "Colour" (Just ""),
+    ComponentEdge "Style" "borderColor" "Colour" (Just ""),
+    ComponentEdge "Style" "scaleP" "ScaleP" (Just ""),
+    ComponentEdge "Style" "anchor" "Anchor" (Just ""),
+    ComponentEdge "Style" "translate" "Point" (Just "_Just"),
+    ComponentEdge "Style" "escapeText" "EscapeText" (Just ""),
+    ComponentEdge "Style" "frame" "Style" (Just "_Just"),
+    ComponentEdge "Style" "lineCap" "LineCap" (Just "_Just"),
+    ComponentEdge "Style" "lineJoin" "LineJoin" (Just "_Just"),
+    ComponentEdge "Style" "glyphShape" "GlyphShape" (Just "")
+  ]
+
+-- | list of chart-svg subcomponents
+allSC :: [SubComponents]
+allSC =
+  [ SubComponents
+      { classComponent = "AxisBar",
+        subComponents =
+          [ "style",
+            "size",
+            "buffer",
+            "overhang",
+            "anchorTo"
+          ]
+      },
+    SubComponents
+      { classComponent = "AxisOptions",
+        subComponents =
+          [ "axisBar",
+            "adjustments",
+            "ticks",
+            "place"
+          ]
+      },
+    SubComponents
+      { classComponent = "Chart",
+        subComponents =
+          [ "chartStyle",
+            "chartData"
+          ]
+      },
+    SubComponents
+      { classComponent = "ChartData",
+        subComponents =
+          [ "rectData'",
+            "lineData'",
+            "glyphData'",
+            "textData'",
+            "pathData'",
+            "blankData'"
+          ]
+      },
+    SubComponents
+      { classComponent = "ChartOptions",
+        subComponents =
+          [ "markupOptions",
+            "hudOptions",
+            "chartTree"
+          ]
+      },
+    SubComponents
+      { classComponent = "ChartTree",
+        subComponents =
+          [ "tree",
+            "charts'"
+          ]
+      },
+    SubComponents
+      { classComponent = "FrameOptions",
+        subComponents =
+          [ "frame",
+            "anchorTo",
+            "buffer"
+          ]
+      },
+    SubComponents
+      { classComponent = "HudOptions",
+        subComponents =
+          [ "axes",
+            "frames",
+            "legends",
+            "titles"
+          ]
+      },
+    SubComponents
+      { classComponent = "MarkupOptions",
+        subComponents =
+          [ "markupHeight",
+            "chartAspect",
+            "cssOptions",
+            "renderStyle"
+          ]
+      },
+    SubComponents
+      { classComponent = "(Text,Point)",
+        subComponents =
+          [ "_1",
+            "_2"
+          ]
+      },
+    SubComponents
+      { classComponent = "TickStyle",
+        subComponents =
+          [ "style",
+            "anchorTo",
+            "buffer"
+          ]
+      },
+    SubComponents
+      { classComponent = "Ticks",
+        subComponents =
+          [ "tick",
+            "glyphTick",
+            "textTick",
+            "lineTick"
+          ]
+      },
+    SubComponents
+      { classComponent = "TitleOptions",
+        subComponents =
+          [ "text",
+            "style",
+            "place",
+            "anchor",
+            "buffer"
+          ]
+      },
+    SubComponents
+      { classComponent = "RenderStyle",
+        subComponents =
+          [ "Compact",
+            "Indented"
+          ]
+      },
+    SubComponents
+      { classComponent = "CssOptions",
+        subComponents =
+          [ "shapeRendering",
+            "preferColorScheme",
+            "fontFamilies",
+            "cssExtra"
+          ]
+      },
+    SubComponents
+      { classComponent = "ChartAspect",
+        subComponents =
+          [ "FixedAspect",
+            "CanvasAspect",
+            "ChartAspect",
+            "UnscaledAspect"
+          ]
+      },
+    SubComponents
+      { classComponent = "HudChartSection",
+        subComponents =
+          [ "CanvasSection",
+            "CanvasStyleSection",
+            "HudSection",
+            "HudStyleSection"
+          ]
+      },
+    SubComponents
+      { classComponent = "Adjustments",
+        subComponents =
+          [ "maxXRatio",
+            "maxYRatio",
+            "angledRatio",
+            "allowDiagonal"
+          ]
+      },
+    SubComponents
+      { classComponent = "Tick",
+        subComponents =
+          [ "TickNone",
+            "TickLabels",
+            "TickRound",
+            "TickExact",
+            "TickPlaced",
+            "numTicks'",
+            "formatN'",
+            "tickExtend'"
+          ]
+      },
+    SubComponents
+      { classComponent = "TickExtend",
+        subComponents =
+          [ "TickExtend",
+            "NoTickExtend"
+          ]
+      },
+    SubComponents
+      { classComponent = "FStyle",
+        subComponents =
+          [ "FSDecimal",
+            "FSExponent",
+            "FSComma",
+            "FSFixed Int",
+            "FSPercent",
+            "FSDollar",
+            "FSPrec",
+            "FSCommaPrec",
+            "FSNone"
+          ]
+      },
+    SubComponents
+      { classComponent = "FormatN",
+        subComponents =
+          [ "fstyle",
+            "sigFigs",
+            "maxDistinguishIterations",
+            "addLPad",
+            "cutRightZeros"
+          ]
+      },
+    SubComponents
+      { classComponent = "ShapeRendering",
+        subComponents =
+          [ "UseGeometricPrecision",
+            "UseCssCrisp",
+            "NoShapeRendering"
+          ]
+      },
+    SubComponents
+      { classComponent = "PreferColorScheme",
+        subComponents =
+          [ "PreferHud",
+            "PreferDark",
+            "PreferLight",
+            "PreferNormal"
+          ]
+      },
+    SubComponents
+      { classComponent = "Place",
+        subComponents =
+          [ "PlaceLeft",
+            "PlaceRight",
+            "PlaceTop",
+            "PlaceBottom",
+            "PlaceAbsolute"
+          ]
+      },
+    SubComponents
+      { classComponent = "LegendOptions",
+        subComponents =
+          [ "legendSize",
+            "buffer",
+            "vgap",
+            "hgap",
+            "textStyle",
+            "innerPad",
+            "outerPad",
+            "frame",
+            "place",
+            "scaleChartsBy",
+            "scaleP",
+            "legendCharts"
+          ]
+      },
+    SubComponents
+      { classComponent = "Anchor",
+        subComponents =
+          [ "AnchorMiddle",
+            "AnchorStart",
+            "AnchorEnd"
+          ]
+      },
+    SubComponents
+      { classComponent = "Point",
+        subComponents =
+          [ "_x",
+            "_y"
+          ]
+      },
+    SubComponents
+      { classComponent = "PathData",
+        subComponents =
+          [ "StartP",
+            "LineP",
+            "CubicP",
+            "QuadP",
+            "ArcP"
+          ]
+      },
+    SubComponents
+      { classComponent = "ArcInfo",
+        subComponents =
+          [ "radii",
+            "phi",
+            "large",
+            "clockwise"
+          ]
+      },
+    SubComponents
+      { classComponent = "Style",
+        subComponents =
+          [ "size",
+            "borderSize",
+            "color",
+            "borderColor",
+            "scaleP",
+            "anchor",
+            "rotation",
+            "translate",
+            "escapeText",
+            "frame",
+            "lineCap",
+            "lineJoin",
+            "dasharray",
+            "dashoffset",
+            "hsize",
+            "vsize",
+            "vshift",
+            "glyphShape"
+          ]
+      },
+    SubComponents
+      { classComponent = "ScaleP",
+        subComponents =
+          [ "NoScaleP",
+            "ScalePX",
+            "ScalePY",
+            "ScalePMinDim",
+            "ScalePArea"
+          ]
+      },
+    SubComponents
+      { classComponent = "Colour",
+        subComponents =
+          [ "opac'",
+            "lightness'",
+            "chroma'",
+            "hue'"
+          ]
+      },
+    SubComponents
+      { classComponent = "EscapeText",
+        subComponents =
+          [ "EscapeText",
+            "NoEscapeText"
+          ]
+      },
+    SubComponents
+      { classComponent = "LineCap",
+        subComponents =
+          [ "LineCapButt",
+            "LineCapRound",
+            "LineCapSquare"
+          ]
+      },
+    SubComponents
+      { classComponent = "LineJoin",
+        subComponents =
+          [ "LineJoinMiter",
+            "LineJoinBevel",
+            "LineJoinRound"
+          ]
+      },
+    SubComponents
+      { classComponent = "GlyphShape",
+        subComponents =
+          [ "CircleGlyph",
+            "SquareGlyph",
+            "EllipseGlyph",
+            "RectSharpGlyph",
+            "RectRoundedGlyph",
+            "TriangleGlyph",
+            "VLineGlyph",
+            "HLineGlyph",
+            "PathGlyph"
+          ]
+      }
+  ]
diff --git a/src/DotParse/Examples/NumHask.hs b/src/DotParse/Examples/NumHask.hs
--- a/src/DotParse/Examples/NumHask.hs
+++ b/src/DotParse/Examples/NumHask.hs
@@ -6,7 +6,6 @@
 module DotParse.Examples.NumHask where
 
 import Algebra.Graph qualified as G
-import Chart
 import Data.Bifunctor
 import Data.Map.Strict qualified as Map
 import Data.Monoid
@@ -14,13 +13,15 @@
 import Data.Text (Text, pack)
 import DotParse
 import FlatParse.Basic
-import GHC.IO.Unsafe
 import Optics.Core
 import Prelude hiding (replicate)
 
 -- $setup
 -- >>> import DotParse
+-- >>> import Chart
+-- >>> import Optics.Core
 -- >>> :set -XOverloadedStrings
+-- >>> :set -XOverloadedLabels
 
 -- | Names of the various classes used in numhask
 data Class
@@ -197,32 +198,27 @@
   G.edges ((\(Dependency x y) -> (x, y)) <$> dependenciesNH dependencies)
     <> G.vertices classesNH
 
--- | NumHask statements in a dot Graph with box shapes for the nodes.
-dotGraphNH :: Directed -> Graph
-dotGraphNH d =
-  defaultGraph
-    & #directed .~ Last (Just d)
-    & addStatements (toStatements d (strToUtf8 . show <$> graphNHG))
-    & attL NodeType (ID "shape") .~ Just (ID "box")
-    & gattL (ID "rankdir") .~ Just (IDQuoted "BT")
-
--- | 'dotGraphNH' after being positionally processed via 'processGraph'
-dotGraphNH' :: Directed -> Graph
-dotGraphNH' d = unsafePerformIO $ processGraph (dotGraphNH d)
-{-# NOINLINE dotGraphNH' #-}
-
 -- | Convert a node ID to a label for chart-svg charts
 -- Doing this directly in dot doesn't quite work because the engines get the width of the link wrong.
-toLink :: ID -> Text
-toLink id_ = [i|<a href="https://hackage.haskell.org/package/numhask/docs/#{m}.html\#t:#{t}">#{t}</a>|]
+toLinkNH :: ID -> Text
+toLinkNH id_ = [i|<a href="https://hackage.haskell.org/package/numhask/docs/#{m}.html\#t:#{t}">#{t}</a>|]
   where
     t = pack (label id_)
     m = Map.fromList (first (pack . show) <$> classesModule) Map.! t
 
--- | A chart-svg chart with label links
+-- | NumHask statements in a dot Graph with box shapes for the nodes.
 --
--- > writeChartOptions "other/nh.svg" (graphToChart toLink (dotGraphNH' Directed))
+-- > g <- processGraph (dotGraphNH Directed)
+-- > writeChartOptions "other/nh.svg" (graphToChartWith (defaultChartConfig & set #chartVshift (-4) & set #textSize 12) toLinkNH g)
 --
 -- ![NumHask Example](other/nh.svg)
-writeNHChart :: IO ()
-writeNHChart = writeChartOptions "other/nh.svg" (graphToChartWith (defaultChartConfig & #labelf .~ toLink & #chartColor .~ over lightness' (* 0.5) (palette1 2) & #chartBackgroundColor .~ set opac' 0.1 (palette1 1)) (dotGraphNH' Directed))
+dotGraphNH :: Directed -> Graph
+dotGraphNH d =
+  defaultGraph
+    & #directed
+    .~ Last (Just d)
+    & addStatements (toStatements d (strToUtf8 . show <$> graphNHG))
+    & attL NodeType (ID "shape")
+    .~ Just (ID "box")
+    & gattL (ID "rankdir")
+    .~ Just (IDQuoted "BT")
diff --git a/src/DotParse/FlatParse/TH.hs b/src/DotParse/FlatParse/TH.hs
--- a/src/DotParse/FlatParse/TH.hs
+++ b/src/DotParse/FlatParse/TH.hs
@@ -4,6 +4,7 @@
 {-# LANGUAGE QuasiQuotes #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# OPTIONS_GHC -Wno-name-shadowing #-}
+{-# OPTIONS_GHC -Wno-x-partial #-}
 
 -- | TH stage restriction guff for flatparsing
 module DotParse.FlatParse.TH where
diff --git a/src/DotParse/Types.hs b/src/DotParse/Types.hs
--- a/src/DotParse/Types.hs
+++ b/src/DotParse/Types.hs
@@ -90,7 +90,6 @@
 import Data.Maybe
 import Data.Monoid
 import Data.Proxy
-import Data.String.Interpolate
 import Data.Text (Text)
 import Data.Text qualified as Text
 import Data.These
@@ -106,6 +105,7 @@
 -- >>> import DotParse
 -- >>> import qualified Data.Map as Map
 -- >>> import qualified FlatParse.Basic as FP
+-- >>> import qualified Data.ByteString as BS
 -- >>> import FlatParse.Basic (runParser, Result)
 -- >>> :set -XOverloadedStrings
 
@@ -171,6 +171,27 @@
 instance Monoid Graph where
   mempty = Graph mempty mempty mempty mempty mempty mempty mempty mempty mempty mempty
 
+-- | 'Directed' graph of size 1.
+--
+-- >>> BS.putStr $ dotPrint defaultDotConfig defaultGraph <> "\n"
+-- digraph {
+--     node [height=0.5;shape=circle]
+--     graph [overlap=false;size="1!";splines=spline]
+--     edge [arrowsize=0.5]
+--     rankdir="TB"
+--     }
+defaultGraph :: Graph
+defaultGraph =
+  mempty
+    & set (attL NodeType (ID "height")) (Just $ IDDouble 0.5)
+    & set (attL NodeType (ID "shape")) (Just $ ID "circle")
+    & set (attL GraphType (ID "overlap")) (Just $ ID "false")
+    & set (attL GraphType (ID "size")) (Just $ IDQuoted "1!")
+    & set (attL GraphType (ID "splines")) (Just $ ID "spline")
+    & set (attL EdgeType (ID "arrowsize")) (Just $ IDDouble 0.5)
+    & set #directed (Last (Just Directed))
+    & set (gattL (ID "rankdir")) (Just (IDQuoted "TB"))
+
 -- | global attributes lens
 gattL :: ID -> Lens' Graph (Maybe ID)
 gattL k = #globalAttributes % at k
@@ -211,9 +232,12 @@
     ss <- wrapCurlyP (many dotParse)
     let g =
           (mempty :: Graph)
-            & #strict .~ Last (Just me)
-            & #directed .~ Last (Just d)
-            & #graphid .~ Last i
+            & #strict
+            .~ Last (Just me)
+            & #directed
+            .~ Last (Just d)
+            & #graphid
+            .~ Last i
     pure $ addStatements ss g
 
 -- * Dot Grammar
@@ -285,6 +309,15 @@
 --
 -- >>> runDotParser "<The <font color='red'><b>foo</b></font>,<br/> the <font point-size='20'>bar</font> and<br/> the <i>baz</i>>" :: ID
 -- IDHtml "<The <font color='red'><b>foo</b></font>,<br/> the <font point-size='20'>bar</font> and<br/> the <i>baz</i>>"
+--
+-- >>> runDotParser "shape=diamond" :: (ID,ID)
+-- (ID "shape",ID "diamond")
+--
+-- >>> runDotParser "fontname=\"Arial\"" :: (ID,ID)
+-- (ID "fontname",IDQuoted "Arial")
+--
+-- >>> runDotParser "[shape=diamond; color=blue] [label=label]" :: Map.Map ID ID
+-- fromList [(ID "color",ID "blue"),(ID "label",ID "label"),(ID "shape",ID "diamond")]
 data ID = ID ByteString | IDInt Int | IDDouble Double | IDQuoted ByteString | IDHtml ByteString deriving (Eq, Show, Generic, Ord)
 
 instance DotParse ID where
@@ -316,12 +349,6 @@
 label (IDHtml h) = utf8ToStr h
 
 -- | Attribute key-value pair of identifiers
---
--- >>> runDotParser "shape=diamond" :: (ID,ID)
--- (ID "shape",ID "diamond")
---
--- >>> runDotParser "fontname=\"Arial\"" :: (ID,ID)
--- (ID "fontname",IDQuoted "Arial")
 instance DotParse (ID, ID) where
   dotPrint cfg (x0, x1) = dotPrint cfg x0 <> "=" <> dotPrint cfg x1
 
@@ -334,9 +361,6 @@
 
 -- | Attribute collections
 --
--- >>> runDotParser "[shape=diamond; color=blue] [label=label]" :: Map.Map ID ID
--- fromList [(ID "color",ID "blue"),(ID "label",ID "label"),(ID "shape",ID "diamond")]
---
 -- A given entity can have multiple attribute lists. For simplicity, these are mconcat'ed on parsing.
 instance DotParse (Map.Map ID ID) where
   dotPrint cfg as =
@@ -566,32 +590,6 @@
 addStatements :: [Statement] -> Graph -> Graph
 addStatements ss g = Prelude.foldr addStatement g ss
 
--- | default dot graph as a ByteString
-defaultBS :: ByteString
-defaultBS =
-  [i|
-digraph {
-    node [shape=circle
-         ,height=0.5];
-    graph [overlap=false
-          ,splines=spline
-          ,size="1!"];
-    edge [arrowsize=0.5];
-  }
-|]
-
--- | A default dot graph
---
--- >>> import qualified Data.ByteString.Char8 as B
--- >>> B.putStrLn $ dotPrint defaultDotConfig defaultGraph
--- digraph {
---     node [height=0.5;shape=circle]
---     graph [overlap=false;size="1!";splines=spline]
---     edge [arrowsize=0.5]
---     }
-defaultGraph :: Graph
-defaultGraph = runDotParser defaultBS
-
 -- | run a dot string through graphviz, supplying arguments and collecting stdout
 processDotWith :: Directed -> [String] -> ByteString -> IO ByteString
 processDotWith d args i = do
@@ -695,15 +693,15 @@
 setEdges_ g m =
   g
     & #edges
-      .~ ( ( \((x0, x1), as) ->
-               EdgeStatement
-                 (fromDirected (defDirected $ view #directed g))
-                 (EdgeID x0 Nothing)
-                 (EdgeID x1 Nothing :| [])
-                 as
-           )
-             <$> Map.toList m
+    .~ ( ( \((x0, x1), as) ->
+             EdgeStatement
+               (fromDirected (defDirected $ view #directed g))
+               (EdgeID x0 Nothing)
+               (EdgeID x1 Nothing :| [])
+               as
          )
+           <$> Map.toList m
+       )
 
 -- | A specific attribute for all nodes in a graph
 nodesA :: ID -> Graph -> Map.Map ID (Maybe ID)
@@ -813,37 +811,45 @@
   { chartHeight :: Double,
     chartScale :: Double,
     edgeSize :: Double,
+    nodeBorderSize :: Double,
     chartColor :: Colour,
     chartBackgroundColor :: Colour,
-    nodeHeight :: Double,
-    nodeSize :: Double,
-    vshift :: Double,
+    backupNodeHeight :: Double,
+    backupNodeWidth :: Double,
+    chartVshift :: Double,
     textSize :: Double,
-    labelf :: ID -> Text
+    escapeText :: EscapeText
   }
-  deriving (Generic)
+  deriving (Generic, Show, Eq)
 
 -- | default parameters
 defaultChartConfig :: ChartConfig
-defaultChartConfig = ChartConfig 500 72 0.5 (over lightness' (* 0.5) (palette1 0)) (set opac' 0.2 (palette1 0)) 0.5 0.5 (-3.7) 14 (Text.pack . label)
+defaultChartConfig = ChartConfig 500 72 0.5 1 (grey 0.4 0.8) (grey 0.5 0.2) 0.5 0.5 (-6) 16 NoEscapeText
 
 -- | convert a 'Graph' processed via the graphviz commands to a 'ChartOptions'
-graphToChartWith :: ChartConfig -> Graph -> ChartOptions
-graphToChartWith cfg g =
+graphToChartWith :: ChartConfig -> (ID -> Text) -> Graph -> ChartOptions
+graphToChartWith cfg labelf g =
   mempty
-    & #charts .~ named "edges" ps <> named "shapes" c0 <> named "labels" [ts]
-    & #markupOptions % #markupHeight .~ (cfg ^. #chartHeight)
-    & #hudOptions .~ (mempty & #chartAspect .~ ChartAspect)
+    & set #chartTree (named "edges" ps <> named "shapes" c0 <> named "labels" [ts])
+    & set (#chartTree % charts' % each % #chartStyle % #scaleP) ScalePArea
+    & #markupOptions
+    % #markupHeight
+    .~ (Just $ cfg ^. #chartHeight)
+    & #markupOptions
+    % #chartAspect
+    .~ ChartAspect
+    & #hudOptions
+    .~ mempty
   where
     glyphs w = case view (attL NodeType (ID "shape")) g of
-      Just (ID "circle") -> defaultGlyphStyle & #shape .~ CircleGlyph & #size .~ (cfg ^. #chartScale) * w & #borderSize .~ (cfg ^. #edgeSize) & #borderColor .~ (cfg ^. #chartColor) & #color .~ (cfg ^. #chartBackgroundColor)
-      Just (ID "box") -> defaultGlyphStyle & #shape .~ RectSharpGlyph (h / w) & #size .~ 72 * w & #borderSize .~ 1 & #borderColor .~ (cfg ^. #chartColor) & #color .~ (cfg ^. #chartBackgroundColor)
+      Just (ID "circle") -> defaultGlyphStyle & #glyphShape .~ CircleGlyph & #size .~ (cfg ^. #chartScale) * w & #borderSize .~ (cfg ^. #edgeSize) & #borderColor .~ (cfg ^. #chartColor) & #color .~ (cfg ^. #chartBackgroundColor)
+      Just (ID "box") -> defaultGlyphStyle & #glyphShape .~ RectSharpGlyph (h / w) & #size .~ (cfg ^. #chartScale) * w & #borderSize .~ view #nodeBorderSize cfg & #borderColor .~ (cfg ^. #chartColor) & #color .~ (cfg ^. #chartBackgroundColor)
       -- defaults to circle
-      _ -> defaultGlyphStyle & #shape .~ CircleGlyph & #size .~ 72 * w & #borderSize .~ 1 & #borderColor .~ (cfg ^. #chartColor) & #color .~ (cfg ^. #chartBackgroundColor)
-    h = maybe (cfg ^. #nodeHeight) (runParser_ double . strToUtf8 . label) (view (attL NodeType (ID "height")) g)
-    vshift' = cfg ^. #vshift
+      _ -> defaultGlyphStyle & #glyphShape .~ CircleGlyph & #size .~ (cfg ^. #chartScale) * w & #borderSize .~ view #nodeBorderSize cfg & #borderColor .~ (cfg ^. #chartColor) & #color .~ (cfg ^. #chartBackgroundColor)
+    h = maybe (cfg ^. #backupNodeHeight) (runParser_ double . strToUtf8 . label) (view (attL NodeType (ID "height")) g)
+    vshift' = cfg ^. #chartVshift
     -- node information
-    ns = nodeInfo g (cfg ^. #nodeSize)
+    ns = nodeInfo g (cfg ^. #backupNodeWidth)
     -- edge information
     es = edgeInfo g (cfg ^. #edgeSize)
     -- paths
@@ -852,11 +858,11 @@
     c0 = fmap (\(NodeInfo _ w p) -> GlyphChart (glyphs w) [p]) ns
     -- labels
     ts =
-      TextChart (defaultTextStyle & #size .~ (cfg ^. #textSize) & #color .~ (cfg ^. #chartColor)) ((\(NodeInfo l _ (Point x y)) -> ((cfg ^. #labelf) l, Point x (vshift' + y))) <$> ns)
+      TextChart (defaultTextStyle & #escapeText .~ (cfg ^. #escapeText) & #size .~ (cfg ^. #textSize) & #color .~ (cfg ^. #chartColor)) ((\(NodeInfo l _ (Point x y)) -> (labelf l, Point x (vshift' + y))) <$> ns)
 
 -- | convert a 'Graph' processed via the graphviz commands to a 'ChartOptions' using the default ChartConfig.
 graphToChart :: Graph -> ChartOptions
-graphToChart = graphToChartWith defaultChartConfig
+graphToChart = graphToChartWith defaultChartConfig (Text.pack . label)
 
 -- | Convert an algebraic graph to a dotparse graph.
 toDotGraphWith :: Directed -> Graph -> G.Graph ByteString -> Graph
