diff --git a/app/reanimate-example.hs b/app/reanimate-example.hs
deleted file mode 100644
--- a/app/reanimate-example.hs
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env stack
--- stack runghc --package reanimate
-
-{-# LANGUAGE MonoLocalBinds #-}
-{-# LANGUAGE OverloadedLabels #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | reanimate example
---
--- To run this example:
---
--- stack runghc --package reanimate app/reanimate-example.hs
---
--- and wait for the browser to open ...
-module Main where
-
-import Chart
-import Chart.Examples
-import Chart.Reanimate
-import Control.Lens hiding (transform)
-import Data.Foldable
-import Reanimate as Re
-
-main :: IO ()
-main =
-  reanimate $
-    foldl' seqA (pause 0) $ (applyE (overBeginning 1 fadeInE) . applyE (overEnding 1 fadeOutE)) . mapA pathify . (\cs -> animChartSvg defaultReanimateConfig (const cs)) . (#hudOptions %~ colourHudOptions light) <$> examples
-
-examples :: [ChartSvg]
-examples =
-  [ unitExample,
-    svgOptionsExample,
-    hudOptionsExample,
-    rectExample,
-    textExample,
-    glyphsExample,
-    lineExample,
-    barExample,
-    waveExample,
-    lglyphExample,
-    glinesExample,
-    compoundExample,
-    textLocalExample,
-    labelExample,
-    legendExample,
-    surfaceExample,
-    arcExample,
-    arcFlagsExample,
-    ellipseExample,
-    quadExample,
-    cubicExample,
-    pathExample,
-    vennExample,
-    arrowExample
-  ]
diff --git a/chart-svg.cabal b/chart-svg.cabal
--- a/chart-svg.cabal
+++ b/chart-svg.cabal
@@ -1,23 +1,25 @@
 cabal-version:   2.4
 name:            chart-svg
-version:         0.2.3
+version:         0.3.0
 synopsis:        Charting library targetting SVGs.
 description:
   This package provides a charting library targetting SVG as the rendered output.
   .
   == Usage
   .
-  >>> import Chart
   >>> :set -XOverloadedLabels
-  >>>let xs = fmap (fmap (uncurry Point)) [[(0.0, 1.0), (1.0, 1.0), (2.0, 5.0)], [(0.0, 0.0), (3.2, 3.0)], [(0.5, 4.0), (0.5, 0)]] :: [[Point Double]]
-  >>> let anns = zipWith (\w c -> LineA (LineStyle w c Nothing Nothing Nothing Nothing)) [0.015, 0.03, 0.01] palette1_
-  >>> let lineExample = mempty & (#chartList .~ zipWith Chart anns (fmap (fmap PointXY) xs)) & #hudOptions .~ defaultHudOptions & #svgOptions .~ defaultSvgOptions :: ChartSvg
-  .
-  > writeChartSvg "other/line.svg" lineExample
+  >>> :set -XOverloadedStrings
+  >>> import Chart
+  >>> import Optics.Core
+  >>> let lines = [[Point 0.0 1.0, Point 1.0 1.0, Point 2.0 5.0],[Point 0.0 0.0, Point 2.8 3.0],[Point 0.5 4.0, Point 0.5 0]]
+  >>> let styles = (\c -> defaultLineStyle & #color .~ palette1 c & #size .~ 0.015) <$> [0..2]
+  >>> let cs = zipWith (\s x -> LineChart s [x]) styles lines
+  >>> let lineExample = mempty & #charts .~ named "line" cs & #hudOptions .~ defaultHudOptions :: ChartSvg
+  >>> writeChartSvg "other/usage.svg" lineExample
   .
-  ![main example](docs/other/lines.svg)
+  ![usage example](docs/other/usage.svg)
   .
-  See "Chart" for a broad overview of concepts, and "Chart.Examples" for a variety of practical examples.
+  See "Chart" for a broad overview of concepts, and "Chart.Examples" for practical examples.
 
 category:        charts
 homepage:        https://github.com/tonyday567/chart-svg#readme
@@ -29,7 +31,7 @@
 license-file:    LICENSE
 build-type:      Simple
 extra-doc-files: other/*.svg
-tested-with:     GHC ==8.8.4 || ==8.10.4 || ==9.0.1 || ==9.2.0.20210821
+tested-with:     GHC ==8.8.4 || ==8.10.7 || ==9.2.1
 
 source-repository head
   type:     git
@@ -39,61 +41,44 @@
   exposed-modules:
     Chart
     Chart.Bar
+    Chart.Data
     Chart.Examples
-    Chart.Reanimate
-    Chart.Render
+    Chart.Hud
+    Chart.Primitive
+    Chart.Style
     Chart.Surface
-    Chart.Types
-    Chart.Various
+    Chart.Svg
     Data.Colour
-    Data.FormatN
     Data.Path
+    Data.Path.Parser
 
   hs-source-dirs:     src
   build-depends:
-    , attoparsec            ^>=0.14
-    , base                  >=4.7     && <5
-    , Color                 ^>=0.3
-    , containers            ^>=0.6
-    , cubicbezier           ^>=0.6
-    , foldl                 ^>=1.4
-    , generic-lens          >=1.2     && <3.0
-    , JuicyPixels           ^>=3.3
-    , lens                  ^>=5.0
-    , linear                ^>=1.21
-    , lucid                 ^>=2.9
-    , mtl                   ^>=2.2.2
-    , numhask               ^>=0.8
-    , numhask-space         ^>=0.8
-    , reanimate             ^>=1.1.1.0
-    , reanimate-svg         ^>=0.13
-    , scientific            ^>=0.3
-    , tagsoup               ^>=0.14
-    , text                  ^>=1.2
-    , time                  ^>=1.9
-    , transformers          ^>=0.5
-    , unordered-containers  ^>=0.2
+    , adjunctions         ^>=4.4
+    , attoparsec          >=0.13.2 && <0.15
+    , base                >=4.7    && <5
+    , Color               ^>=0.3
+    , containers          ^>=0.6
+    , cubicbezier         ^>=0.6
+    , foldl               ^>=1.4
+    , formatn             ^>=0.2
+    , lucid               ^>=2.9
+    , mtl                 ^>=2.2.2
+    , neat-interpolation  ^>=0.5.1
+    , numhask             ^>=0.10
+    , numhask-array       ^>=0.10
+    , numhask-space       ^>=0.10
+    , optics-core         ^>=0.4
+    , random              ^>=1.2.1
+    , scientific          ^>=0.3
+    , tagsoup             ^>=0.14
+    , text                ^>=1.2
+    , time                ^>=1.9
+    , transformers        ^>=0.5
 
   default-language:   Haskell2010
   default-extensions: StrictData
   ghc-options:
     -Wall -Wcompat -Wincomplete-record-updates
     -Wincomplete-uni-patterns -Wredundant-constraints -fwrite-ide-info
-    -hiedir=.hie -Wunused-packages
-
-executable reanimate-example
-  main-is:            reanimate-example.hs
-  hs-source-dirs:     app
-  build-depends:
-    , base       >=4.7     && <5
-    , chart-svg
-    , lens       ^>=5.0
-    , reanimate  ^>=1.1.1.0
-
-  default-language:   Haskell2010
-  default-extensions:
-  ghc-options:
-    -Wall -Wcompat -Wincomplete-record-updates
-    -Wincomplete-uni-patterns -Wredundant-constraints
-    -funbox-strict-fields -fwrite-ide-info -hiedir=.hie
-    -Wunused-packages
+    -hiedir=.hie
diff --git a/other/arc.svg b/other/arc.svg
deleted file mode 100644
--- a/other/arc.svg
+++ /dev/null
@@ -1,145 +0,0 @@
-<svg height="300.0" width="302.19127533282744" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.6 -0.5330998616968212 1.1154380916726987 1.107349731170277"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9069060898743935" y="-0.5" width="0.9455996520193282" x="-0.4455996520193281"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,0.40690608987439353
-0.5,0.40690608987439353"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,0.3244600817039941
-0.5,0.3244600817039941"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,0.24201407353359472
-0.5,0.24201407353359472"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,0.1595680653631953
-0.5,0.1595680653631953"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,7.712205719279586e-2
-0.5,7.712205719279586e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,-5.323950977603409e-3
-0.5,-5.323950977603409e-3"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,-8.77699591480029e-2
-0.5,-8.77699591480029e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,-0.17021596731840227
-0.5,-0.17021596731840227"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,-0.25266197548880165
-0.5,-0.25266197548880165"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,-0.335107983659201
-0.5,-0.335107983659201"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,-0.4175539918296004
-0.5,-0.4175539918296004"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,-0.5
-0.5,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4200562281775722" x="-0.5">-0.1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.3376102200071728" x="-0.5">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.2551642118367734" x="-0.5">0.1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.17271820366637397" x="-0.5">0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="9.027219549597465e-2" x="-0.5">0.3</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="7.826187325575218e-3" x="-0.5">0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-7.461982084482444e-2" x="-0.5">0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.1570658290152236" x="-0.5">0.6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.23951183718562297" x="-0.5">0.7</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.32195784535602223" x="-0.5">0.8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4044038535264217" x="-0.5">0.9</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4868498616968212" x="-0.5">1</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.4706580427978403, 0.40690608987439353)"><polyline points="-0.4706580427978403,0.42190608987439354
--0.4706580427978403,0.3919060898743935"/></g><g transform="rotate(-90.0, -0.4706580427978403, 0.3244600817039941)"><polyline points="-0.4706580427978403,0.3394600817039941
--0.4706580427978403,0.3094600817039941"/></g><g transform="rotate(-90.0, -0.4706580427978403, 0.24201407353359472)"><polyline points="-0.4706580427978403,0.25701407353359473
--0.4706580427978403,0.2270140735335947"/></g><g transform="rotate(-90.0, -0.4706580427978403, 0.1595680653631953)"><polyline points="-0.4706580427978403,0.1745680653631953
--0.4706580427978403,0.14456806536319528"/></g><g transform="rotate(-90.0, -0.4706580427978403, 7.712205719279586e-2)"><polyline points="-0.4706580427978403,9.212205719279586e-2
--0.4706580427978403,6.212205719279586e-2"/></g><g transform="rotate(-90.0, -0.4706580427978403, -5.323950977603409e-3)"><polyline points="-0.4706580427978403,9.67604902239659e-3
--0.4706580427978403,-2.032395097760341e-2"/></g><g transform="rotate(-90.0, -0.4706580427978403, -8.77699591480029e-2)"><polyline points="-0.4706580427978403,-7.27699591480029e-2
--0.4706580427978403,-0.1027699591480029"/></g><g transform="rotate(-90.0, -0.4706580427978403, -0.17021596731840227)"><polyline points="-0.4706580427978403,-0.15521596731840226
--0.4706580427978403,-0.18521596731840229"/></g><g transform="rotate(-90.0, -0.4706580427978403, -0.25266197548880165)"><polyline points="-0.4706580427978403,-0.23766197548880164
--0.4706580427978403,-0.26766197548880166"/></g><g transform="rotate(-90.0, -0.4706580427978403, -0.335107983659201)"><polyline points="-0.4706580427978403,-0.320107983659201
--0.4706580427978403,-0.35010798365920104"/></g><g transform="rotate(-90.0, -0.4706580427978403, -0.4175539918296004)"><polyline points="-0.4706580427978403,-0.4025539918296004
--0.4706580427978403,-0.4325539918296004"/></g><g transform="rotate(-90.0, -0.4706580427978403, -0.5)"><polyline points="-0.4706580427978403,-0.485
--0.4706580427978403,-0.515"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9069060898743935" y="-0.5" width="3.782398608077331e-3" x="-0.4588380471475987"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,0.40690608987439353
--0.4455996520193281,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.34053302401718055,0.40690608987439353
--0.34053302401718055,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.23546639601503294,0.40690608987439353
--0.23546639601503294,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.13039976801288533,0.40690608987439353
--0.13039976801288533,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-2.533314001073772e-2,0.40690608987439353
--2.533314001073772e-2,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="7.973348799140978e-2,0.40690608987439353
-7.973348799140978e-2,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.1848001159935574,0.40690608987439353
-0.1848001159935574,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.289866743995705,0.40690608987439353
-0.289866743995705,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.3949333719978525,0.40690608987439353
-0.3949333719978525,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.5,0.40690608987439353
-0.5,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="-0.4455996520193281" transform="rotate(-45.0, -0.4455996520193281, 0.5)">-0.8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="-0.34053302401718055" transform="rotate(-45.0, -0.34053302401718055, 0.5)">-0.6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="-0.23546639601503294" transform="rotate(-45.0, -0.23546639601503294, 0.5)">-0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="-0.13039976801288533" transform="rotate(-45.0, -0.13039976801288533, 0.5)">-0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="-2.533314001073772e-2" transform="rotate(-45.0, -2.533314001073772e-2, 0.5)">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="7.973348799140978e-2" transform="rotate(-45.0, 7.973348799140978e-2, 0.5)">0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="0.1848001159935574" transform="rotate(-45.0, 0.1848001159935574, 0.5)">0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="0.289866743995705" transform="rotate(-45.0, 0.289866743995705, 0.5)">0.6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="0.3949333719978525" transform="rotate(-45.0, 0.3949333719978525, 0.5)">0.8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="0.5" transform="rotate(-45.0, 0.5, 0.5)">1</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,0.4459391012560649
--0.4455996520193281,0.41593910125606487"/><polyline points="-0.34053302401718055,0.4459391012560649
--0.34053302401718055,0.41593910125606487"/><polyline points="-0.23546639601503294,0.4459391012560649
--0.23546639601503294,0.41593910125606487"/><polyline points="-0.13039976801288533,0.4459391012560649
--0.13039976801288533,0.41593910125606487"/><polyline points="-2.533314001073772e-2,0.4459391012560649
--2.533314001073772e-2,0.41593910125606487"/><polyline points="7.973348799140978e-2,0.4459391012560649
-7.973348799140978e-2,0.41593910125606487"/><polyline points="0.1848001159935574,0.4459391012560649
-0.1848001159935574,0.41593910125606487"/><polyline points="0.289866743995705,0.4459391012560649
-0.289866743995705,0.41593910125606487"/><polyline points="0.3949333719978525,0.4459391012560649
-0.3949333719978525,0.41593910125606487"/><polyline points="0.5,0.4459391012560649
-0.5,0.41593910125606487"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.6276243594975943e-3" y="0.41597515077313746" width="0.9455996520193282" x="-0.4455996520193281"/></g><g fill-opacity="0.1" stroke-opacity="0.0" fill="#1f78b5" stroke-width="1.0e-2" stroke="#000000"><path d="M 0.5,0.3245 A 0.5253331400107378 0.412230040851997 -0.0 0 1 -0.0253,-0.5"/></g><g stroke-opacity="1.0" fill="none" stroke-width="2.0e-3" stroke="#a6cfe3"><polyline points="0.5,0.3244600817039942
-0.483369277234746,0.3307309001377951
-0.4664957468010773,0.3365887087530307
-0.44939606083614747,0.34202772659989517
-0.43208709466531137,0.347042586024505
-0.414585930148219,0.35162833796612425
-0.3969098388210801,0.3557804568412907
-0.37907626485174506,0.3594948450100198
-0.3611028078244165,0.3627678368196808
-0.34300720537098606,0.36559620222255296
-0.3248073156661314,0.3679771499634932
-0.3065210998034561,0.3699083303345671
-0.2881666040700581,0.3713878374939279
-0.26976194213702254,0.37241421134665165
-0.25132527718341724,0.37298643898567446
-0.23287480397142646,0.37310395569140997
-0.21442873089031855,0.3727666454890592
-0.196005261986964,0.37197484126306346
-0.17762257900063916,0.3707293244285878
-0.15929882341984458,0.36903132416035866
-0.14105207857884716,0.366882516179617
-0.1229003518116123,0.3642850211003825
-0.10486155668073893,0.3612414023366659
-8.695349529893737e-2,0.3577546635726868
-6.91938407604924e-2,0.353828245798601
-5.16001197000544e-2,0.34946602391465836
-3.4189694995966025e-2,0.3446723029071443
-1.6979748635198022e-2,0.339451813599878
--1.2735243196226875e-5,0.33380970798546095
--1.677098710937719e-2,0.32775155414088153
--3.327846859221828e-2,0.32128333073249615
--4.951888880068217e-2,0.3144114211158069
--6.547622040096385e-2,0.3071426070358604
--8.11347154335329e-2,0.29948406193448485
--9.647892085446813e-2,0.2914433438709686
--0.1114936937857463,0.2830283880631685
--0.1261642164594346,0.2742474990564076
--0.1404760108410384,0.26510934252789203
--0.1544149529175723,0.25562293673473413
--0.16796728663625615,0.24579764361402107
--0.1811196374800791,0.23564315954371323
--0.193859025666831,0.22516950577349076
--0.20617287895858183,0.2143870185349896
--0.21804904506896183,0.20330633884118865
--0.2294758036560015,0.191938401985015
--0.24044187788869215,0.18029442674753132
--0.2509364455758589,0.16838590432635142
--0.2609491498463553,0.15622458699521702
--0.2704701093700449,0.1438224765059225
--0.2794899281094799,0.13119181224403542
--0.287999704592658,0.11834505915009985
--0.2959910406976985,0.10529489541824505
--0.3034560499407747,9.205419998434006e-2
--0.31038736525912214,7.863603981603812e-2
--0.3167781462814395,6.505365701725652e-2
--0.32262208607850884,5.132045575982125e-2
--0.3279134173873738,3.744998905516522e-2
--0.33264691830293114,2.345594537914475e-2
--0.3368179174313213,9.352135163164521e-3
--0.34042229850002936,-4.847522835048301e-3
--0.3434565044201495,-1.9129015267579152e-2
--0.34591754079680204,-3.347824802580801e-2
--0.3478029788842397,-4.7881060149592924e-2
--0.3491109579827261,-6.2323237802426434e-2
--0.3498401872748227,-7.679052829877775e-2
--0.3499899470992681,-9.12686541697727e-2
--0.34956008966119856,-0.10574332725332858
--0.34855103917800234,-0.12020026279484874
--0.34696379146066925,-0.13462519354454794
--0.34479991293104495,-0.14900388383750696
--0.3420615390759619,-0.16332214364255282
--0.3387513723397717,-0.17756584256610797
--0.3348726794573588,-0.19172092379718286
--0.3304292882302672,-0.20577341797974957
--0.32542558374912384,-0.21970945699880995
--0.3198665040660817,-0.2335152876665515
--0.31375753532156003,-0.24717728529508287
--0.307104706330086,-0.26068196714235425
--0.2999145826305821,-0.27401600571799756
--0.2921942600069721,-0.28716624193594986
--0.2839513574854994,-0.3001196981008821
--0.27519400981566844,-0.31286359071561676
--0.265930859442228,-0.3253853430968975
--0.25617104797612356,-0.33767259778705516
--0.24592420717282815,-0.34971322874932953
--0.23520044942696644,-0.36149535333479876
--0.2240103577925993,-0.3730073440091236
--0.21236497553902822,-0.3842378398275176
--0.20027579525242306,-0.39517575764662705
--0.1877547474940251,-0.4058103030622574
--0.174814189026125,-0.4161309810621461
--0.16146689061742991,-0.4261276063832713
--0.14772602443985788,-0.4357903135634775
--0.1336051510691924,-0.4451095666774971
--0.1191182061024344,-0.45407616874775303
--0.1042794864050468,-0.4626812708206709
--8.910363600167909e-2,-0.47091638069952146
--7.360563162427924e-2,-0.47877337132519915
--5.780076793187067e-2,-0.4862444887966433
--4.170464241656818e-2,-0.4933223600230059
--2.533314001073772e-2,-0.5"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="3.0e-3" stroke="#1f78b5"><rect height="3.0e-2" y="-0.10276996127589864" width="3.0000000000000027e-2" x="0.22233343541807982"/></g><g fill-opacity="0.1" stroke-opacity="1.0" fill="#6666cc" stroke-width="2.0e-3" stroke="#808080"><rect height="0.8731172355803916" y="-0.5" width="0.8500068705306324" x="-0.3500068705306324"/></g><g></g></svg>
diff --git a/other/arcflags.svg b/other/arcflags.svg
--- a/other/arcflags.svg
+++ b/other/arcflags.svg
@@ -1,1201 +1,1240 @@
-<svg height="300.0" width="312.5971457599038" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0.0 -4.94987663248166 9.0 8.637314948722489"><g></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="0.6"><text y="-0.0" x="0.5549999999999999" transform="rotate(-90.0, 0.5549999999999999, -0.0)">Sweep</text></g><g></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="0.4"><text y="1.5099999999999998" x="1.7149999999999999" transform="rotate(-90.0, 1.7149999999999999, 1.5099999999999998)">True</text></g><g></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="0.4"><text y="-1.5100000000000002" x="1.7149999999999999" transform="rotate(-90.0, 1.7149999999999999, -1.5100000000000002)">False</text></g><g stroke-opacity="0.2" fill="none" stroke-width="2.0e-2" stroke="#0d0d0d"><polyline points="5.409999999999999,1.6699999999999995
-5.408026728428272,1.607209480470686
-5.402114701314478,1.5446667664356952
-5.392287250728689,1.4826186854142747
-5.378583161128631,1.4213101128351444
-5.361056516295154,1.360983005625052
-5.339776485888249,1.3018754473153216
-5.314827052466018,1.244220708434927
-5.286306680043863,1.1882463258982843
-5.2543279255020146,1.134173205021003
-5.219016994374947,1.0822147477075261
-5.180513242775787,1.0325760102513097
-5.138968627421411,0.9854528940713108
-5.094547105928688,0.9410313725785877
-5.047423989748689,0.8994867572242105
-4.9977852522924735,0.860983005625052
-4.945826794978997,0.8256720744979842
-4.8917536741017145,0.793693319956136
-4.835779291565073,0.7651729475339799
-4.7781245526846785,0.7402235141117481
-4.719016994374945,0.7189434837048458
-4.658689887164854,0.7014168388713689
-4.597381314585725,0.6877127492713107
-4.535333233564302,0.6778852986855215
-4.472790519529314,0.6719732715717277
-4.409999999999999,0.6699999999999995
-4.347209480470687,0.6719732715717277
-4.284666766435696,0.6778852986855215
-4.222618685414275,0.6877127492713107
-4.161310112835144,0.7014168388713689
-4.100983005625053,0.7189434837048458
-4.041875447315322,0.7402235141117481
-3.9842207084349273,0.7651729475339799
-3.9282463258982845,0.793693319956136
-3.8741732050210023,0.8256720744979846
-3.822214747707527,0.860983005625052
-3.7725760102513104,0.8994867572242105
-3.725452894071311,0.9410313725785877
-3.6810313725785884,0.9854528940713108
-3.6394867572242102,1.0325760102513097
-3.6009830056250527,1.0822147477075261
-3.565672074497984,1.1341732050210025
-3.5336933199561353,1.1882463258982843
-3.5051729475339797,1.244220708434927
-3.480223514111748,1.3018754473153211
-3.4589434837048465,1.360983005625052
-3.441416838871369,1.4213101128351444
-3.4277127492713113,1.4826186854142747
-3.417885298685522,1.5446667664356952
-3.4119732715717284,1.607209480470686
-3.41,1.6699999999999995
-3.4119732715717284,1.732790519529313
-3.417885298685522,1.7953332335643037
-3.4277127492713113,1.8573813145857243
-3.4414168388713686,1.9186898871648541
-3.4589434837048465,1.9790169943749472
-3.480223514111748,2.0381245526846774
-3.5051729475339792,2.095779291565072
-3.5336933199561367,2.151753674101715
-3.565672074497984,2.205826794978996
-3.6009830056250527,2.2577852522924724
-3.6394867572242102,2.3074239897486892
-3.6810313725785884,2.3545471059286878
-3.7254528940713114,2.398968627421411
-3.7725760102513104,2.440513242775789
-3.822214747707527,2.479016994374947
-3.8741732050210036,2.514327925502015
-3.9282463258982845,2.546306680043863
-3.9842207084349277,2.574827052466019
-4.041875447315322,2.599776485888251
-4.100983005625052,2.621056516295153
-4.161310112835144,2.6385831611286306
-4.222618685414275,2.6522872507286883
-4.284666766435695,2.6621147013144775
-4.347209480470687,2.668026728428271
-4.409999999999999,2.6699999999999995
-4.472790519529313,2.668026728428271
-4.535333233564302,2.6621147013144775
-4.597381314585725,2.6522872507286883
-4.658689887164854,2.6385831611286306
-4.719016994374945,2.621056516295153
-4.778124552684677,2.599776485888251
-4.835779291565071,2.5748270524660195
-4.891753674101716,2.546306680043863
-4.945826794978997,2.5143279255020143
-4.9977852522924735,2.479016994374947
-5.0474239897486886,2.440513242775789
-5.094547105928688,2.398968627421411
-5.138968627421411,2.354547105928688
-5.18051324277579,2.3074239897486892
-5.219016994374947,2.257785252292473
-5.2543279255020146,2.2058267949789965
-5.286306680043863,2.1517536741017147
-5.314827052466018,2.0957792915650724
-5.339776485888249,2.0381245526846774
-5.361056516295154,1.9790169943749472
-5.378583161128631,1.9186898871648541
-5.392287250728689,1.8573813145857243
-5.402114701314478,1.7953332335643042
-5.408026728428272,1.7327905195293127
-5.409999999999999,1.6699999999999995"/></g><g stroke-opacity="0.2" fill="none" stroke-width="2.0e-2" stroke="#0d0d0d"><polyline points="4.409999999999999,2.6699999999999995
-4.408026728428271,2.607209480470686
-4.402114701314478,2.5446667664356952
-4.392287250728688,2.4826186854142747
-4.378583161128631,2.421310112835145
-4.361056516295152,2.360983005625052
-4.339776485888251,2.3018754473153216
-4.314827052466019,2.244220708434927
-4.286306680043864,2.1882463258982843
-4.2543279255020146,2.134173205021003
-4.219016994374948,2.0822147477075266
-4.180513242775789,2.0325760102513097
-4.138968627421411,1.9854528940713108
-4.094547105928688,1.941031372578588
-4.047423989748689,1.8994867572242105
-3.997785252292472,1.860983005625052
-3.9458267949789967,1.8256720744979844
-3.891753674101715,1.7936933199561358
-3.8357792915650717,1.76517294753398
-3.778124552684677,1.7402235141117481
-3.7190169943749467,1.7189434837048458
-3.6586898871648548,1.7014168388713686
-3.5973813145857236,1.6877127492713109
-3.5353332335643035,1.6778852986855215
-3.472790519529313,1.6719732715717277
-3.41,1.6699999999999995
-3.3472094804706867,1.6719732715717277
-3.284666766435696,1.6778852986855215
-3.2226186854142753,1.6877127492713107
-3.1613101128351446,1.7014168388713686
-3.1009830056250527,1.7189434837048458
-3.0418754473153222,1.7402235141117481
-2.9842207084349273,1.76517294753398
-2.9282463258982845,1.793693319956136
-2.8741732050210023,1.8256720744979846
-2.822214747707527,1.860983005625052
-2.7725760102513104,1.8994867572242102
-2.725452894071311,1.941031372578588
-2.6810313725785884,1.9854528940713108
-2.6394867572242102,2.0325760102513097
-2.6009830056250527,2.082214747707526
-2.565672074497984,2.1341732050210025
-2.5336933199561353,2.1882463258982843
-2.5051729475339806,2.244220708434927
-2.480223514111748,2.3018754473153216
-2.4589434837048465,2.360983005625052
-2.4414168388713686,2.421310112835145
-2.4277127492713113,2.482618685414275
-2.417885298685522,2.5446667664356952
-2.4119732715717284,2.607209480470686
-2.4099999999999997,2.6699999999999995
-2.4119732715717284,2.732790519529313
-2.417885298685522,2.7953332335643037
-2.4277127492713113,2.8573813145857243
-2.4414168388713686,2.918689887164854
-2.4589434837048465,2.9790169943749474
-2.480223514111748,3.0381245526846774
-2.50517294753398,3.095779291565072
-2.5336933199561367,3.1517536741017147
-2.565672074497984,3.205826794978996
-2.6009830056250527,3.2577852522924724
-2.6394867572242102,3.3074239897486892
-2.6810313725785884,3.3545471059286878
-2.7254528940713114,3.398968627421411
-2.7725760102513104,3.440513242775789
-2.822214747707527,3.479016994374947
-2.8741732050210036,3.514327925502015
-2.9282463258982845,3.546306680043863
-2.9842207084349277,3.574827052466019
-3.0418754473153222,3.599776485888251
-3.1009830056250522,3.621056516295153
-3.1613101128351446,3.6385831611286306
-3.2226186854142753,3.6522872507286883
-3.2846667664356954,3.6621147013144775
-3.3472094804706867,3.668026728428271
-3.409999999999999,3.6699999999999995
-3.4727905195293127,3.668026728428271
-3.5353332335643035,3.6621147013144775
-3.597381314585723,3.6522872507286883
-3.6586898871648548,3.6385831611286306
-3.7190169943749467,3.621056516295153
-3.7781245526846767,3.599776485888251
-3.835779291565071,3.5748270524660195
-3.891753674101715,3.546306680043863
-3.9458267949789967,3.5143279255020143
-3.997785252292472,3.479016994374947
-4.047423989748689,3.440513242775789
-4.094547105928688,3.398968627421411
-4.138968627421411,3.354547105928688
-4.180513242775789,3.3074239897486892
-4.219016994374947,3.257785252292473
-4.2543279255020146,3.2058267949789965
-4.286306680043864,3.1517536741017147
-4.314827052466019,3.0957792915650724
-4.339776485888251,3.0381245526846774
-4.361056516295152,2.979016994374947
-4.378583161128631,2.918689887164854
-4.392287250728688,2.8573813145857243
-4.402114701314478,2.795333233564304
-4.408026728428271,2.732790519529313
-4.409999999999999,2.67"/></g><g stroke-opacity="0.5" fill="none" stroke-width="5.0e-2" stroke="#0d0d0d"><polyline points="3.41,1.6699999999999995
-3.4257073173118204,1.6701233675183391
-3.441410759078128,1.6704934396342677
-3.4571064507096416,1.6711101250380294
-3.472790519529313,1.6719732715717277
-3.488459095727845,1.6730826662668714
-3.5041083133185134,1.6744380353969195
-3.519734311091045,1.6760390445448197
-3.5353332335643035,1.6778852986855215
-3.5509012319375817,1.679976342283442
-3.56643446504023,1.6823116594048617
-3.5819291002794094,1.6848906738452256
-3.5973813145857236,1.6877127492713109
-3.6127872953565126,1.6907771893782337
-3.6281432413965424,1.694083238061252
-3.6434453638559043,1.697630079602323
-3.6586898871648548,1.7014168388713686
-3.673873049965372,1.7054425815422014
-3.688991106039228,1.7097063143230564
-3.7040403252323033,1.7142069852016695
-3.7190169943749467,1.7189434837048458
-3.733917418198149,1.7239146411724546
-3.7487379202452904,1.729119231045774
-3.7634748437792567,1.7345559691701322
-3.778124552684677,1.7402235141117481
-3.7926834323650898,1.7461204674887127
-3.8071478906347798,1.7522453743160185
-3.8215143586051084,1.7585967233645543
-3.8357792915650717,1.76517294753398
-3.849939169855915,1.771972424239384
-3.863990499739547,1.7789934758116317
-3.877929814260573,1.786234369911306
-3.891753674101715,1.793693319956136
-3.9054586684324066,1.8013684855618084
-3.9190414157503715,1.8092579729960558
-3.932498564715948,1.8173598356459073
-3.9458267949789967,1.8256720744979844
-3.9590228179981315,1.8341926386317293
-3.9720833778521296,1.8429194257254378
-3.9850052520432784,1.851850282574976
-3.997785252292472,1.860983005625052
-4.010420225325884,1.8703153415129088
-4.022907053652976,1.8798449876243093
-4.035242656335705,1.8895695926616698
-4.047423989748689,1.8994867572242105
-4.059448048330183,1.9095940343999684
-4.0713118653236515,1.91988893036954
-4.0830125135097735,1.93036890502139
-4.094547105928688,1.9410313725785882
-4.105912796592314,1.9518737022368107
-4.117106781186547,1.962893218813452
-4.128126297763188,1.9740872034076853
-4.138968627421411,1.9854528940713108
-4.149631094978609,1.9969874864902262
-4.160111069630459,2.0086881346763477
-4.170405965600031,2.020551951669816
-4.180513242775789,2.0325760102513097
-4.190430407338329,2.044757343664294
-4.20015501237569,2.057092946347023
-4.20968465848709,2.0695797746741156
-4.219016994374948,2.0822147477075266
-4.2281497174250235,2.094994747956721
-4.237080574274562,2.1079166221478687
-4.24580736136827,2.1209771820018677
-4.2543279255020146,2.134173205021003
-4.262640164354092,2.1475014352840507
-4.270742027003943,2.160958584249628
-4.2786315144381915,2.174541331567592
-4.286306680043864,2.1882463258982843
-4.293765630088693,2.202070185739426
-4.3010065241883675,2.2160095002604527
-4.308027575760615,2.2300608301440845
-4.314827052466019,2.244220708434927
-4.321403276635445,2.258485641394891
-4.327754625683981,2.272852109365219
-4.333879532511286,2.28731656763491
-4.339776485888251,2.3018754473153216
-4.345444030829867,2.3165251562207425
-4.350880768954225,2.331262079754708
-4.356085358827545,2.3460825818018503
-4.361056516295152,2.360983005625052
-4.36579301479833,2.3759596747676954
-4.370293685676943,2.39100889396077
-4.3745574184577976,2.406126950034627
-4.378583161128631,2.421310112835145
-4.382369920397676,2.436554636144094
-4.385916761938748,2.4518567586034568
-4.3892228106217654,2.467212704643487
-4.392287250728688,2.4826186854142747
-4.395109326154774,2.49807089972059
-4.3976883405951375,2.5135655349597688
-4.400023657716557,2.5290987680624166
-4.402114701314478,2.5446667664356952
-4.4039609554551795,2.560265688908954
-4.40556196460308,2.5758916866814854
-4.406917333733127,2.5915409042721547
-4.408026728428271,2.6072094804706865
-4.40888987496197,2.6228935492903567
-4.409506560365731,2.6385892409218714
-4.4098766324816605,2.6542926826881788
-4.409999999999999,2.6699999999999995"/></g><g fill-opacity="0.3" stroke-opacity="0.5" fill="#0d0d0d" stroke-width="1.0e-2" stroke="#0d0d0d"><path d="M 4.4100,1.6700 L 3.41,1.6700 A 1.0 1.0 -0.0 0 1 4.4100,2.6700 L 4.4100,1.6700"/></g><g stroke-opacity="0.2" fill="none" stroke-width="2.0e-2" stroke="#0d0d0d"><polyline points="5.409999999999999,-1.3699999999999997
-5.408026728428272,-1.4327905195293131
-5.402114701314478,-1.4953332335643048
-5.392287250728689,-1.5573813145857245
-5.378583161128631,-1.6186898871648547
-5.361056516295154,-1.679016994374948
-5.339776485888249,-1.738124552684678
-5.314827052466018,-1.7957792915650725
-5.286306680043863,-1.8517536741017158
-5.2543279255020146,-1.9058267949789962
-5.219016994374947,-1.957785252292473
-5.180513242775787,-2.00742398974869
-5.138968627421411,-2.054547105928689
-5.094547105928688,-2.0989686274214114
-5.047423989748689,-2.1405132427757896
-4.9977852522924735,-2.179016994374948
-4.945826794978997,-2.214327925502015
-4.8917536741017145,-2.246306680043864
-4.835779291565073,-2.2748270524660197
-4.7781245526846785,-2.2997764858882515
-4.719016994374945,-2.3210565162951533
-4.658689887164854,-2.3385831611286307
-4.597381314585725,-2.3522872507286885
-4.535333233564302,-2.362114701314478
-4.472790519529314,-2.3680267284282714
-4.409999999999999,-2.3699999999999997
-4.347209480470687,-2.3680267284282714
-4.284666766435696,-2.362114701314478
-4.222618685414275,-2.3522872507286885
-4.161310112835144,-2.3385831611286307
-4.100983005625053,-2.3210565162951533
-4.041875447315322,-2.2997764858882515
-3.9842207084349273,-2.2748270524660197
-3.9282463258982845,-2.246306680043864
-3.8741732050210023,-2.214327925502015
-3.822214747707527,-2.179016994374948
-3.7725760102513104,-2.1405132427757896
-3.725452894071311,-2.0989686274214114
-3.6810313725785884,-2.054547105928689
-3.6394867572242102,-2.00742398974869
-3.6009830056250527,-1.957785252292473
-3.565672074497984,-1.905826794978997
-3.5336933199561353,-1.8517536741017158
-3.5051729475339797,-1.7957792915650725
-3.480223514111748,-1.738124552684678
-3.4589434837048465,-1.679016994374948
-3.441416838871369,-1.6186898871648547
-3.4277127492713113,-1.5573813145857245
-3.417885298685522,-1.495333233564304
-3.4119732715717284,-1.4327905195293131
-3.41,-1.3700000000000006
-3.4119732715717284,-1.307209480470687
-3.417885298685522,-1.2446667664356954
-3.4277127492713113,-1.1826186854142757
-3.4414168388713686,-1.1213101128351455
-3.4589434837048465,-1.0609830056250522
-3.480223514111748,-1.0018754473153222
-3.5051729475339792,-0.9442207084349277
-3.5336933199561367,-0.8882463258982845
-3.565672074497984,-0.834173205021004
-3.6009830056250527,-0.7822147477075272
-3.6394867572242102,-0.7325760102513104
-3.6810313725785884,-0.6854528940713123
-3.7254528940713114,-0.6410313725785888
-3.7725760102513104,-0.5994867572242106
-3.822214747707527,-0.5609830056250522
-3.8741732050210036,-0.5256720744979844
-3.9282463258982845,-0.4936933199561353
-3.9842207084349277,-0.46517294753398053
-4.041875447315322,-0.44022351411174876
-4.100983005625052,-0.41894348370484513
-4.161310112835144,-0.4014168388713695
-4.222618685414275,-0.3877127492713117
-4.284666766435695,-0.3778852986855221
-4.347209480470687,-0.37197327157172877
-4.409999999999999,-0.37000000000000055
-4.472790519529313,-0.37197327157172877
-4.535333233564302,-0.3778852986855221
-4.597381314585725,-0.3877127492713117
-4.658689887164854,-0.4014168388713695
-4.719016994374945,-0.41894348370484513
-4.778124552684677,-0.44022351411174876
-4.835779291565071,-0.46517294753398053
-4.891753674101716,-0.4936933199561353
-4.945826794978997,-0.5256720744979853
-4.9977852522924735,-0.5609830056250522
-5.0474239897486886,-0.5994867572242106
-5.094547105928688,-0.6410313725785888
-5.138968627421411,-0.6854528940713114
-5.18051324277579,-0.7325760102513104
-5.219016994374947,-0.7822147477075272
-5.2543279255020146,-0.8341732050210031
-5.286306680043863,-0.8882463258982845
-5.314827052466018,-0.9442207084349277
-5.339776485888249,-1.0018754473153222
-5.361056516295154,-1.0609830056250522
-5.378583161128631,-1.1213101128351455
-5.392287250728689,-1.1826186854142757
-5.402114701314478,-1.2446667664356954
-5.408026728428272,-1.307209480470687
-5.409999999999999,-1.3699999999999997"/></g><g stroke-opacity="0.2" fill="none" stroke-width="2.0e-2" stroke="#0d0d0d"><polyline points="4.409999999999999,-0.37000000000000055
-4.408026728428271,-0.432790519529314
-4.402114701314478,-0.4953332335643039
-4.392287250728688,-0.5573813145857254
-4.378583161128631,-0.6186898871648547
-4.361056516295152,-0.6790169943749471
-4.339776485888251,-0.738124552684678
-4.314827052466019,-0.7957792915650725
-4.286306680043864,-0.8517536741017149
-4.2543279255020146,-0.9058267949789971
-4.219016994374948,-0.957785252292473
-4.180513242775789,-1.0074239897486899
-4.138968627421411,-1.0545471059286888
-4.094547105928688,-1.0989686274214114
-4.047423989748689,-1.1405132427757887
-3.997785252292472,-1.1790169943749471
-3.9458267949789967,-1.214327925502015
-3.891753674101715,-1.246306680043864
-3.8357792915650717,-1.2748270524660197
-3.778124552684677,-1.2997764858882515
-3.7190169943749467,-1.3210565162951542
-3.6586898871648548,-1.3385831611286307
-3.5973813145857236,-1.3522872507286885
-3.5353332335643035,-1.362114701314478
-3.472790519529313,-1.3680267284282714
-3.41,-1.3699999999999997
-3.3472094804706867,-1.3680267284282714
-3.284666766435696,-1.362114701314478
-3.2226186854142753,-1.3522872507286885
-3.1613101128351446,-1.3385831611286307
-3.1009830056250527,-1.3210565162951542
-3.0418754473153222,-1.2997764858882515
-2.9842207084349273,-1.2748270524660197
-2.9282463258982845,-1.2463066800438631
-2.8741732050210023,-1.214327925502015
-2.822214747707527,-1.1790169943749471
-2.7725760102513104,-1.1405132427757896
-2.725452894071311,-1.0989686274214114
-2.6810313725785884,-1.0545471059286888
-2.6394867572242102,-1.0074239897486899
-2.6009830056250527,-0.9577852522924739
-2.565672074497984,-0.9058267949789971
-2.5336933199561353,-0.8517536741017149
-2.5051729475339806,-0.7957792915650734
-2.480223514111748,-0.738124552684678
-2.4589434837048465,-0.6790169943749471
-2.4414168388713686,-0.6186898871648547
-2.4277127492713113,-0.5573813145857245
-2.417885298685522,-0.4953332335643039
-2.4119732715717284,-0.432790519529314
-2.4099999999999997,-0.37000000000000055
-2.4119732715717284,-0.30720948047068664
-2.417885298685522,-0.24466676643569585
-2.4277127492713113,-0.18261868541427528
-2.4414168388713686,-0.12131011283514548
-2.4589434837048465,-6.098300562505221e-2
-2.480223514111748,-1.8754473153221873e-3
-2.50517294753398,5.577929156507233e-2
-2.5336933199561367,0.1117536741017151
-2.565672074497984,0.16582679497899644
-2.6009830056250527,0.2177852522924728
-2.6394867572242102,0.26742398974868964
-2.6810313725785884,0.3145471059286882
-2.7254528940713114,0.3589686274214112
-2.7725760102513104,0.40051324277578937
-2.822214747707527,0.43901699437494734
-2.8741732050210036,0.4743279255020152
-2.9282463258982845,0.5063066800438634
-2.9842207084349277,0.5348270524660195
-3.0418754473153222,0.5597764858882512
-3.1009830056250522,0.5810565162951535
-3.1613101128351446,0.598583161128631
-3.2226186854142753,0.6122872507286887
-3.2846667664356954,0.6221147013144779
-3.3472094804706867,0.6280267284282712
-3.409999999999999,0.6299999999999999
-3.4727905195293127,0.6280267284282712
-3.5353332335643035,0.6221147013144779
-3.597381314585723,0.6122872507286887
-3.6586898871648548,0.598583161128631
-3.7190169943749467,0.5810565162951535
-3.7781245526846767,0.5597764858882512
-3.835779291565071,0.5348270524660199
-3.891753674101715,0.5063066800438634
-3.9458267949789967,0.47432792550201475
-3.997785252292472,0.43901699437494734
-4.047423989748689,0.40051324277578937
-4.094547105928688,0.3589686274214112
-4.138968627421411,0.3145471059286886
-4.180513242775789,0.26742398974868964
-4.219016994374947,0.21778525229247325
-4.2543279255020146,0.16582679497899688
-4.286306680043864,0.1117536741017151
-4.314827052466019,5.5779291565072775e-2
-4.339776485888251,-1.8754473153221873e-3
-4.361056516295152,-6.0983005625052655e-2
-4.378583161128631,-0.12131011283514548
-4.392287250728688,-0.18261868541427528
-4.402114701314478,-0.2446667664356954
-4.408026728428271,-0.30720948047068664
-4.409999999999999,-0.36999999999999966"/></g><g stroke-opacity="0.5" fill="none" stroke-width="5.0e-2" stroke="#0d0d0d"><polyline points="3.41,-1.3699999999999997
-3.410123367518339,-1.3542926826881794
-3.4104934396342683,-1.338589240921872
-3.411110125038029,-1.3228935492903573
-3.4119732715717284,-1.307209480470687
-3.413082666266872,-1.2915409042721548
-3.414438035396919,-1.275891686681486
-3.4160390445448194,-1.2602656889089547
-3.417885298685522,-1.2446667664356954
-3.4199763422834417,-1.2290987680624172
-3.4223116594048624,-1.2135655349597694
-3.4248906738452263,-1.1980708997205904
-3.4277127492713113,-1.1826186854142757
-3.430777189378234,-1.1672127046434873
-3.4340832380612527,-1.1518567586034574
-3.4376300796023234,-1.1365546361440946
-3.441416838871369,-1.1213101128351455
-3.445442581542202,-1.1061269500346271
-3.449706314323057,-1.0910088939607703
-3.454206985201669,-1.0759596747676965
-3.4589434837048465,-1.0609830056250522
-3.4639146411724537,-1.0460825818018509
-3.4691192310457737,-1.031262079754709
-3.4745559691701318,-1.0165251562207422
-3.480223514111748,-1.0018754473153222
-3.4861204674887127,-0.98731656763491
-3.492245374316018,-0.97285210936522
-3.4985967233645545,-0.9584856413948919
-3.5051729475339797,-0.9442207084349277
-3.5119724242393833,-0.9300608301440847
-3.518993475811631,-0.9160095002604538
-3.5262343699113066,-0.9020701857394271
-3.5336933199561353,-0.8882463258982845
-3.541368485561808,-0.8745413315675923
-3.5492579729960565,-0.8609585842496288
-3.557359835645908,-0.8475014352840513
-3.565672074497984,-0.834173205021004
-3.5741926386317298,-0.8209771820018683
-3.5829194257254384,-0.8079166221478693
-3.5918502825749767,-0.794994747956721
-3.6009830056250527,-0.7822147477075272
-3.6103153415129094,-0.7695797746741166
-3.6198449876243095,-0.7570929463470235
-3.62956959266167,-0.7447573436642947
-3.6394867572242102,-0.7325760102513104
-3.649594034399969,-0.7205519516698167
-3.6598889303695397,-0.7086881346763483
-3.6703689050213897,-0.6969874864902263
-3.6810313725785884,-0.6854528940713114
-3.6918737022368107,-0.6740872034076859
-3.7028932188134522,-0.6628932188134526
-3.7140872034076855,-0.6518737022368115
-3.725452894071311,-0.6410313725785888
-3.736987486490226,-0.6303689050213896
-3.7486881346763474,-0.6198889303695405
-3.7605519516698163,-0.6095940343999691
-3.7725760102513104,-0.5994867572242106
-3.7847573436642947,-0.5895695926616704
-3.7970929463470227,-0.5798449876243095
-3.8095797746741153,-0.570315341512909
-3.822214747707527,-0.5609830056250522
-3.8349947479567206,-0.5518502825749763
-3.8479166221478693,-0.5429194257254379
-3.8609771820018675,-0.5341926386317293
-3.8741732050210036,-0.5256720744979844
-3.887501435284051,-0.5173598356459084
-3.9009585842496284,-0.5092579729960565
-3.9145413315675928,-0.5013684855618084
-3.9282463258982845,-0.4936933199561353
-3.942070185739426,-0.4862343699113061
-3.9560095002604525,-0.4789934758116323
-3.970060830144084,-0.47197242423938457
-3.9842207084349273,-0.46517294753398053
-3.998485641394891,-0.45859672336455537
-4.01285210936522,-0.4522453743160191
-4.02731656763491,-0.4461204674887136
-4.041875447315322,-0.44022351411174876
-4.056525156220743,-0.4345559691701326
-4.0712620797547086,-0.4291192310457741
-4.0860825818018505,-0.42391464117245503
-4.100983005625053,-0.41894348370484513
-4.115959674767696,-0.4142069852016701
-4.131008893960771,-0.4097063143230568
-4.146126950034627,-0.40544258154220136
-4.161310112835144,-0.4014168388713695
-4.176554636144094,-0.39763007960232377
-4.191856758603457,-0.39408323806125045
-4.207212704643488,-0.39077718937823436
-4.222618685414275,-0.3877127492713117
-4.23807089972059,-0.3848906738452267
-4.253565534959769,-0.38231165940486234
-4.269098768062417,-0.379976342283443
-4.284666766435696,-0.3778852986855221
-4.300265688908954,-0.3760390445448203
-4.315891686681486,-0.3744380353969201
-4.331540904272154,-0.3730826662668725
-4.347209480470687,-0.37197327157172877
-4.362893549290357,-0.37111012503803
-4.378589240921872,-0.37049343963426873
-4.394292682688178,-0.3701233675183393
-4.409999999999999,-0.37000000000000055"/></g><g fill-opacity="0.3" stroke-opacity="0.5" fill="#0d0d0d" stroke-width="1.0e-2" stroke="#0d0d0d"><path d="M 4.4100,-1.3700 L 3.41,-1.3700 A 1.0 1.0 -0.0 0 0 4.4100,-0.3700 L 4.4100,-1.3700"/></g><g></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="0.4"><text y="-3.309999999999999" x="3.899999999999999">False</text></g><g stroke-opacity="0.2" fill="none" stroke-width="2.0e-2" stroke="#0d0d0d"><polyline points="8.905,1.67743831624083
-8.903026728428271,1.6146477967115165
-8.897114701314477,1.5521050826765257
-8.887287250728688,1.4900570016551051
-8.87358316112863,1.4287484290759749
-8.856056516295153,1.3684213218658825
-8.83477648588825,1.309313763556152
-8.80982705246602,1.251659024675757
-8.781306680043864,1.1956846421391147
-8.749327925502014,1.1416115212618334
-8.714016994374946,1.0896530639483566
-8.67551324277579,1.0400143264921402
-8.633968627421412,0.9928912103121412
-8.58954710592869,0.9484696888194182
-8.54242398974869,0.9069250734650409
-8.492785252292473,0.8684213218658825
-8.440826794978996,0.8331103907388147
-8.386753674101714,0.8011316361969665
-8.330779291565072,0.7726112637748104
-8.273124552684678,0.7476618303525786
-8.214016994374946,0.7263817999456763
-8.153689887164854,0.7088551551121989
-8.092381314585724,0.6951510655121411
-8.030333233564303,0.685323614926352
-7.967790519529312,0.6794115878125582
-7.904999999999998,0.67743831624083
-7.842209480470686,0.6794115878125582
-7.779666766435696,0.685323614926352
-7.717618685414273,0.6951510655121411
-7.656310112835143,0.7088551551121989
-7.595983005625053,0.7263817999456763
-7.536875447315322,0.7476618303525786
-7.479220708434925,0.7726112637748104
-7.423246325898283,0.8011316361969665
-7.369173205021001,0.8331103907388151
-7.317214747707526,0.8684213218658825
-7.26757601025131,0.9069250734650409
-7.220452894071311,0.9484696888194182
-7.1760313725785885,0.9928912103121412
-7.13448675722421,1.0400143264921402
-7.095983005625051,1.0896530639483566
-7.060672074497983,1.141611521261833
-7.028693319956134,1.1956846421391147
-7.00017294753398,1.251659024675757
-6.9752235141117485,1.3093137635561516
-6.953943483704846,1.3684213218658825
-6.936416838871368,1.4287484290759749
-6.922712749271309,1.4900570016551051
-6.91288529868552,1.5521050826765257
-6.906973271571728,1.6146477967115165
-6.904999999999999,1.67743831624083
-6.906973271571728,1.7402288357701434
-6.91288529868552,1.8027715498051342
-6.922712749271309,1.8648196308265548
-6.936416838871368,1.9261282034056846
-6.953943483704846,1.9864553106157776
-6.9752235141117485,2.045562868925508
-7.000172947533979,2.1032176078059024
-7.028693319956134,2.1591919903425456
-7.060672074497983,2.2132651112198265
-7.09598300562505,2.265223568533303
-7.13448675722421,2.3148623059895197
-7.176031372578586,2.3619854221695182
-7.220452894071311,2.4064069436622413
-7.26757601025131,2.4479515590166194
-7.317214747707526,2.486455310615778
-7.369173205021001,2.5217662417428452
-7.423246325898283,2.5537449962846934
-7.479220708434926,2.5822653687068495
-7.536875447315322,2.6072148021290813
-7.59598300562505,2.6284948325359836
-7.656310112835143,2.646021477369461
-7.717618685414273,2.659725566969519
-7.779666766435693,2.669553017555308
-7.842209480470686,2.6754650446691013
-7.904999999999998,2.67743831624083
-7.967790519529312,2.6754650446691013
-8.030333233564303,2.669553017555308
-8.092381314585724,2.659725566969519
-8.153689887164854,2.646021477369461
-8.214016994374946,2.6284948325359836
-8.273124552684676,2.6072148021290813
-8.330779291565069,2.58226536870685
-8.386753674101715,2.5537449962846934
-8.440826794978996,2.521766241742845
-8.492785252292473,2.486455310615778
-8.54242398974869,2.4479515590166194
-8.58954710592869,2.4064069436622413
-8.633968627421412,2.3619854221695187
-8.67551324277579,2.3148623059895197
-8.714016994374946,2.2652235685333033
-8.749327925502014,2.213265111219827
-8.781306680043864,2.159191990342545
-8.80982705246602,2.103217607805903
-8.83477648588825,2.045562868925508
-8.856056516295153,1.9864553106157776
-8.87358316112863,1.9261282034056846
-8.887287250728688,1.8648196308265548
-8.897114701314477,1.8027715498051347
-8.903026728428271,1.7402288357701432
-8.905,1.6774383162408302"/></g><g stroke-opacity="0.2" fill="none" stroke-width="2.0e-2" stroke="#0d0d0d"><polyline points="7.904999999999998,2.67743831624083
-7.90302672842827,2.6146477967115165
-7.897114701314477,2.5521050826765257
-7.887287250728688,2.490057001655105
-7.8735831611286295,2.4287484290759753
-7.856056516295151,2.3684213218658825
-7.834776485888249,2.309313763556152
-7.809827052466018,2.2516590246757575
-7.781306680043864,2.1956846421391147
-7.749327925502015,2.1416115212618334
-7.714016994374947,2.089653063948357
-7.675513242775789,2.04001432649214
-7.633968627421411,1.9928912103121412
-7.589547105928687,1.9484696888194184
-7.542423989748688,1.906925073465041
-7.492785252292471,1.8684213218658825
-7.440826794978996,1.8331103907388149
-7.386753674101714,1.8011316361969663
-7.330779291565072,1.7726112637748104
-7.273124552684676,1.7476618303525786
-7.214016994374947,1.7263817999456768
-7.1536898871648535,1.7088551551121989
-7.092381314585724,1.6951510655121413
-7.030333233564304,1.685323614926352
-6.967790519529313,1.6794115878125584
-6.904999999999999,1.67743831624083
-6.842209480470686,1.6794115878125584
-6.779666766435695,1.685323614926352
-6.7176186854142745,1.6951510655121411
-6.656310112835145,1.7088551551121989
-6.595983005625052,1.7263817999456768
-6.53687544731532,1.7476618303525786
-6.4792207084349265,1.7726112637748104
-6.423246325898284,1.801131636196967
-6.369173205021003,1.833110390738815
-6.317214747707527,1.8684213218658825
-6.267576010251308,1.9069250734650407
-6.220452894071311,1.9484696888194184
-6.1760313725785885,1.9928912103121412
-6.134486757224209,2.04001432649214
-6.095983005625052,2.0896530639483566
-6.060672074497985,2.141611521261833
-6.028693319956136,2.1956846421391147
-6.0001729475339785,2.251659024675757
-5.975223514111747,2.309313763556152
-5.953943483704846,2.3684213218658825
-5.936416838871368,2.4287484290759753
-5.9227127492713105,2.4900570016551056
-5.912885298685522,2.5521050826765257
-5.906973271571728,2.6146477967115165
-5.904999999999998,2.67743831624083
-5.906973271571728,2.7402288357701434
-5.912885298685522,2.802771549805134
-5.9227127492713105,2.8648196308265548
-5.936416838871368,2.9261282034056846
-5.953943483704846,2.986455310615778
-5.975223514111747,3.045562868925508
-6.0001729475339785,3.1032176078059024
-6.028693319956136,3.159191990342545
-6.060672074497984,3.2132651112198265
-6.095983005625052,3.265223568533303
-6.134486757224209,3.3148623059895197
-6.176031372578588,3.3619854221695182
-6.220452894071311,3.4064069436622413
-6.267576010251308,3.4479515590166194
-6.317214747707526,3.4864553106157774
-6.369173205021003,3.5217662417428452
-6.423246325898284,3.5537449962846934
-6.479220708434927,3.5822653687068495
-6.53687544731532,3.6072148021290813
-6.595983005625052,3.6284948325359836
-6.656310112835145,3.646021477369461
-6.7176186854142745,3.659725566969519
-6.779666766435695,3.669553017555308
-6.842209480470686,3.6754650446691013
-6.904999999999999,3.67743831624083
-6.967790519529313,3.6754650446691013
-7.030333233564304,3.669553017555308
-7.092381314585724,3.659725566969519
-7.1536898871648535,3.646021477369461
-7.214016994374947,3.6284948325359836
-7.273124552684675,3.6072148021290813
-7.330779291565071,3.58226536870685
-7.386753674101714,3.5537449962846934
-7.440826794978996,3.521766241742845
-7.492785252292471,3.4864553106157774
-7.542423989748687,3.4479515590166194
-7.589547105928686,3.4064069436622413
-7.633968627421411,3.3619854221695187
-7.675513242775789,3.3148623059895197
-7.714016994374947,3.2652235685333033
-7.749327925502014,3.213265111219827
-7.781306680043864,3.159191990342545
-7.809827052466018,3.103217607805903
-7.834776485888249,3.045562868925508
-7.856056516295151,2.9864553106157774
-7.8735831611286295,2.9261282034056846
-7.887287250728688,2.8648196308265548
-7.897114701314477,2.8027715498051347
-7.90302672842827,2.7402288357701434
-7.904999999999998,2.6774383162408304"/></g><g stroke-opacity="0.5" fill="none" stroke-width="5.0e-2" stroke="#0d0d0d"><polyline points="6.904999999999999,1.67743831624083
-6.90611012503803,1.6303318655311871
-6.909438035396918,1.5833300029223158
-6.914976342283441,1.5365370843032475
-6.922712749271309,1.4900570016551056
-6.932630079602323,1.4439929523849249
-6.944706314323055,1.3984472102016006
-6.958914641172453,1.3535208980426807
-6.9752235141117485,1.309313763556152
-6.993596723364554,1.2659239576357213
-7.013993475811629,1.2234478165012832
-7.036368485561809,1.1819796478084226
-7.060672074497983,1.1416115212618334
-7.086850282574976,1.1024330641975513
-7.114844987624307,1.0645312625878538
-7.144594034399967,1.0279902679106465
-7.1760313725785885,0.9928912103121412
-7.209087203407686,0.9593120184776414
-7.243688134676345,0.9273272466103704
-7.279757343664293,0.8970079089025003
-7.317214747707526,0.8684213218658825
-7.355977182001866,0.8416309548725609
-7.3959585842496285,0.8166962892368863
-7.437070185739426,0.7936726861521364
-7.479220708434925,0.7726112637748108
-7.52231656763491,0.7535587837295434
-7.566262079754706,0.7365575472866044
-7.6109596747676935,0.7216453014424999
-7.656310112835143,0.7088551551121989
-7.702212704643485,0.6982155056190642
-7.748565534959766,0.6897499756456922
-7.7952656889089535,0.6834773607856506
-7.842209480470686,0.6794115878125582
-7.889292682688177,0.6775616837591705
-7.936410759078127,0.6779317558750981
-7.983459095727845,0.6805209825077019
-8.030333233564303,0.685323614926352
-8.076929100279408,0.6923289900860561
-8.12314324139654,0.7015215543020825
-8.16887304996537,0.7128808977830317
-8.214016994374946,0.7263817999456763
-8.258474843779256,0.7419942854109625
-8.30214789063478,0.7596836905568489
-8.344939169855914,0.7794107404802144
-8.386753674101715,0.8011316361969665
-8.427498564715947,0.8247981518867373
-8.46708337785213,0.8503577419662682
-8.505420225325883,0.8777536577537393
-8.54242398974869,0.9069250734650405
-8.578012513509773,0.9378072212622204
-8.612106781186547,0.970331535054282
-8.644631094978608,1.0044258027310562
-8.67551324277579,1.0400143264921402
-8.704684658487091,1.077018090914946
-8.732080574274558,1.1153549383886991
-8.757640164354092,1.1549397515248812
-8.781306680043864,1.1956846421391147
-8.803027575760614,1.2374991463849145
-8.82275462568398,1.2802904256060494
-8.840444030829866,1.323963472461573
-8.856056516295153,1.3684213218658825
-8.869557418457797,1.4135652662754574
-8.880916761938748,1.4592950748442868
-8.890109326154773,1.5055092159614203
-8.897114701314477,1.5521050826765261
-8.901917333733127,1.5989792205129842
-8.90450656036573,1.6460275571627014
-8.90487663248166,1.6931456335526511
-8.903026728428271,1.7402288357701428
-8.898960955455179,1.7871726273318753
-8.892688340595138,1.8338727812810616
-8.884222810621766,1.880225611597342
-8.87358316112863,1.9261282034056848
-8.86079301479833,1.9714786414731347
-8.845880768954226,2.016176236486121
-8.828879532511285,2.06012174860592
-8.80982705246602,2.1032176078059015
-8.788765630088692,2.145368130501403
-8.765742027003943,2.1864797319912013
-8.74080736136827,2.226461134238961
-8.714016994374946,2.265223568533303
-8.685430407338329,2.3026809725765354
-8.65511106963046,2.3387501815644813
-8.623126297763188,2.373351112833144
-8.589547105928688,2.4064069436622417
-8.554448048330183,2.437844281840861
-8.517907053652976,2.46759332861652
-8.480005252043279,2.495588033665853
-8.440826794978996,2.5217662417428452
-8.400458668432407,2.5460698306790213
-8.358990499739546,2.5684448404291977
-8.316514358605108,2.5888415928762756
-8.273124552684678,2.6072148021290813
-8.228917418198147,2.623523675068375
-8.18399110603923,2.637732001917773
-8.138445363855904,2.6498082366385067
-8.092381314585724,2.6597255669695183
-8.045901231937583,2.6674619739573875
-7.999108313318512,2.67300028084391
-7.952106450709641,2.6763281912028
-7.904999999999998,2.67743831624083"/></g><g fill-opacity="0.3" stroke-opacity="0.5" fill="#0d0d0d" stroke-width="1.0e-2" stroke="#0d0d0d"><path d="M 7.9050,1.6774 L 6.9050,1.6774 A 1.0 1.0 -0.0 1 1 7.9050,2.6774 L 7.9050,1.6774"/></g><g stroke-opacity="0.2" fill="none" stroke-width="2.0e-2" stroke="#0d0d0d"><polyline points="8.91987663248166,-1.3774383162408301
-8.917903360909932,-1.4402288357701436
-8.911991333796138,-1.5027715498051353
-8.90216388321035,-1.564819630826555
-8.888459793610291,-1.6261282034056852
-8.870933148776814,-1.6864553106157785
-8.849653118369911,-1.7455628689255085
-8.82470368494768,-1.803217607805903
-8.796183312525523,-1.8591919903425462
-8.764204557983675,-1.9132651112198267
-8.728893626856609,-1.9652235685333035
-8.69038987525745,-2.0148623059895203
-8.648845259903071,-2.0619854221695193
-8.604423738410347,-2.106406943662242
-8.557300622230349,-2.14795155901662
-8.507661884774134,-2.1864553106157785
-8.455703427460657,-2.2217662417428454
-8.401630306583375,-2.2537449962846945
-8.345655924046733,-2.28226536870685
-8.288001185166339,-2.307214802129082
-8.228893626856607,-2.3284948325359838
-8.168566519646514,-2.346021477369461
-8.107257947067385,-2.359725566969519
-8.045209866045964,-2.3695530175553086
-7.982667152010974,-2.375465044669102
-7.91987663248166,-2.37743831624083
-7.857086112952347,-2.375465044669102
-7.794543398917356,-2.3695530175553086
-7.7324953178959355,-2.359725566969519
-7.6711867453168034,-2.346021477369461
-7.610859638106713,-2.3284948325359838
-7.55175207979698,-2.307214802129082
-7.494097340916587,-2.28226536870685
-7.438122958379942,-2.2537449962846945
-7.384049837502664,-2.2217662417428454
-7.332091380189185,-2.1864553106157785
-7.282452642732968,-2.14795155901662
-7.235329526552969,-2.106406943662242
-7.1909080050602485,-2.0619854221695193
-7.14936338970587,-2.0148623059895203
-7.110859638106713,-1.9652235685333035
-7.075548706979645,-1.9132651112198276
-7.043569952437796,-1.8591919903425462
-7.0150495800156385,-1.803217607805903
-6.9901001465934085,-1.7455628689255085
-6.968820116186505,-1.6864553106157785
-6.951293471353029,-1.6261282034056852
-6.9375893817529715,-1.564819630826555
-6.927761931167183,-1.5027715498051344
-6.9218499040533885,-1.4402288357701436
-6.9198766324816585,-1.377438316240831
-6.9218499040533885,-1.3146477967115167
-6.927761931167183,-1.2521050826765268
-6.9375893817529715,-1.1900570016551053
-6.951293471353029,-1.128748429075976
-6.968820116186505,-1.0684213218658827
-6.9901001465934085,-1.0093137635561527
-7.0150495800156385,-0.9516590246757581
-7.043569952437797,-0.8956846421391149
-7.075548706979645,-0.8416115212618336
-7.110859638106713,-0.7896530639483577
-7.14936338970587,-0.7400143264921408
-7.1909080050602485,-0.6928912103121418
-7.23532952655297,-0.6484696888194192
-7.282452642732968,-0.6069250734650411
-7.332091380189185,-0.5684213218658836
-7.384049837502664,-0.5331103907388157
-7.438122958379942,-0.5011316361969658
-7.494097340916587,-0.472611263774811
-7.55175207979698,-0.4476618303525792
-7.610859638106712,-0.4263817999456756
-7.671186745316806,-0.40885515511219905
-7.7324953178959355,-0.3951510655121413
-7.794543398917355,-0.3853236149263526
-7.857086112952347,-0.37941158781255924
-7.91987663248166,-0.37743831624083013
-7.982667152010971,-0.37941158781255924
-8.045209866045964,-0.3853236149263526
-8.107257947067383,-0.3951510655121413
-8.168566519646514,-0.40885515511219905
-8.228893626856607,-0.4263817999456756
-8.288001185166337,-0.4476618303525792
-8.345655924046731,-0.4726112637748101
-8.401630306583375,-0.5011316361969658
-8.455703427460657,-0.5331103907388157
-8.507661884774132,-0.5684213218658836
-8.557300622230349,-0.6069250734650411
-8.604423738410347,-0.6484696888194192
-8.648845259903071,-0.6928912103121418
-8.69038987525745,-0.7400143264921408
-8.728893626856609,-0.7896530639483568
-8.764204557983675,-0.8416115212618336
-8.796183312525523,-0.8956846421391158
-8.82470368494768,-0.9516590246757572
-8.849653118369911,-1.0093137635561527
-8.870933148776814,-1.0684213218658827
-8.888459793610291,-1.128748429075976
-8.90216388321035,-1.1900570016551053
-8.911991333796138,-1.2521050826765259
-8.917903360909932,-1.3146477967115175
-8.91987663248166,-1.3774383162408301"/></g><g stroke-opacity="0.2" fill="none" stroke-width="2.0e-2" stroke="#0d0d0d"><polyline points="7.91987663248166,-0.37743831624083013
-7.917903360909932,-0.4402288357701436
-7.911991333796136,-0.5027715498051353
-7.902163883210347,-0.564819630826555
-7.888459793610291,-0.6261282034056852
-7.870933148776814,-0.6864553106157785
-7.849653118369911,-0.7455628689255085
-7.824703684947679,-0.803217607805903
-7.796183312525522,-0.8591919903425462
-7.764204557983673,-0.9132651112198267
-7.728893626856606,-0.9652235685333035
-7.690389875257449,-1.0148623059895203
-7.64884525990307,-1.0619854221695193
-7.604423738410349,-1.106406943662242
-7.55730062223035,-1.14795155901662
-7.507661884774134,-1.1864553106157785
-7.455703427460655,-1.2217662417428454
-7.401630306583374,-1.2537449962846945
-7.345655924046731,-1.2822653687068502
-7.288001185166339,-1.307214802129082
-7.228893626856607,-1.3284948325359838
-7.168566519646513,-1.3460214773694612
-7.107257947067383,-1.359725566969519
-7.045209866045964,-1.3695530175553086
-6.982667152010974,-1.375465044669102
-6.9198766324816585,-1.3774383162408301
-6.857086112952347,-1.375465044669102
-6.794543398917354,-1.3695530175553086
-6.732495317895934,-1.359725566969519
-6.671186745316805,-1.3460214773694612
-6.610859638106711,-1.3284948325359838
-6.551752079796982,-1.307214802129082
-6.494097340916586,-1.2822653687068502
-6.438122958379944,-1.2537449962846945
-6.384049837502662,-1.2217662417428454
-6.332091380189187,-1.1864553106157785
-6.28245264273297,-1.14795155901662
-6.235329526552971,-1.106406943662242
-6.190908005060247,-1.0619854221695193
-6.149363389705871,-1.0148623059895203
-6.110859638106711,-0.9652235685333035
-6.075548706979644,-0.9132651112198276
-6.043569952437795,-0.8591919903425462
-6.01504958001564,-0.803217607805903
-5.9901001465934085,-0.7455628689255085
-5.968820116186507,-0.6864553106157785
-5.951293471353029,-0.6261282034056852
-5.93758938175297,-0.564819630826555
-5.92776193116718,-0.5027715498051353
-5.9218499040533885,-0.4402288357701436
-5.91987663248166,-0.37743831624083013
-5.9218499040533885,-0.3146477967115171
-5.92776193116718,-0.2521050826765263
-5.93758938175297,-0.19005700165510575
-5.951293471353029,-0.12874842907597595
-5.968820116186507,-6.842132186588268e-2
-5.9901001465934085,-9.313763556152654e-3
-6.01504958001564,4.8340975324241864e-2
-6.043569952437795,0.10431535786088464
-6.075548706979644,0.15838847873816597
-6.110859638106711,0.21034693605164234
-6.14936338970587,0.25998567350785917
-6.190908005060247,0.3071087896878577
-6.235329526552971,0.35153031118058076
-6.28245264273297,0.3930749265349589
-6.332091380189187,0.4315786781341169
-6.384049837502662,0.4668896092611847
-6.438122958379945,0.4988683638030329
-6.494097340916586,0.527388736225189
-6.551752079796982,0.5523381696474208
-6.610859638106711,0.5736182000543231
-6.671186745316805,0.5911448448878005
-6.732495317895934,0.6048489344878583
-6.794543398917353,0.6146763850736474
-6.857086112952347,0.6205884121874408
-6.9198766324816585,0.6225616837591694
-6.982667152010973,0.6205884121874408
-7.045209866045964,0.6146763850736474
-7.1072579470673825,0.6048489344878583
-7.168566519646513,0.5911448448878005
-7.228893626856607,0.5736182000543231
-7.288001185166338,0.5523381696474208
-7.3456559240467305,0.5273887362251894
-7.401630306583374,0.4988683638030329
-7.455703427460655,0.4668896092611843
-7.507661884774131,0.4315786781341169
-7.55730062223035,0.3930749265349589
-7.604423738410349,0.35153031118058076
-7.64884525990307,0.30710878968785815
-7.690389875257449,0.25998567350785917
-7.728893626856605,0.21034693605164279
-7.764204557983673,0.15838847873816642
-7.796183312525522,0.10431535786088464
-7.824703684947679,4.834097532424231e-2
-7.849653118369911,-9.313763556152654e-3
-7.870933148776814,-6.842132186588312e-2
-7.888459793610291,-0.12874842907597595
-7.902163883210347,-0.19005700165510575
-7.911991333796136,-0.25210508267652587
-7.917903360909932,-0.3146477967115171
-7.91987663248166,-0.37743831624083013"/></g><g stroke-opacity="0.5" fill="none" stroke-width="5.0e-2" stroke="#0d0d0d"><polyline points="6.9198766324816585,-1.3774383162408301
-6.872770181772015,-1.3763281912028007
-6.825768319163144,-1.3730002808439106
-6.778975400544077,-1.3674619739573877
-6.732495317895934,-1.359725566969519
-6.686431268625753,-1.349808236638507
-6.640885526442429,-1.3377320019177739
-6.595959214283511,-1.3235236750683756
-6.551752079796982,-1.307214802129082
-6.508362273876552,-1.2888415928762753
-6.4658861327421135,-1.2684448404291984
-6.424417964049251,-1.2460698306790223
-6.384049837502662,-1.2217662417428463
-6.344871380438382,-1.1955880336658544
-6.306969578828682,-1.1675933286165212
-6.270428584151476,-1.1378442818408616
-6.235329526552971,-1.106406943662242
-6.201750334718471,-1.0733511128331448
-6.1697655628512,-1.0387501815644824
-6.139446225143328,-1.002680972576536
-6.110859638106711,-0.9652235685333035
-6.08406927111339,-0.9264611342389624
-6.059134605477714,-0.8864797319912019
-6.036111002392965,-0.8453681305014036
-6.01504958001564,-0.803217607805903
-5.995997099970373,-0.7601217486059206
-5.978995863527435,-0.7161762364861217
-5.964083617683329,-0.6714786414731342
-5.951293471353029,-0.6261282034056852
-5.940653821859894,-0.5802256115973434
-5.93218829188652,-0.5338727812810613
-5.925915677026481,-0.48717262733187594
-5.9218499040533885,-0.4402288357701436
-5.919999999999999,-0.3931456335526513
-5.920370072115927,-0.3460275571627025
-5.92295929874853,-0.2989792205129853
-5.92776193116718,-0.2521050826765263
-5.934767306326886,-0.20550921596142135
-5.943959870542911,-0.1592950748442883
-5.95531921402386,-0.1135652662754576
-5.968820116186507,-6.842132186588312e-2
-5.9844326016517915,-2.39634724615736e-2
-6.002122006797679,1.970957439395038e-2
-6.021849056721044,6.25008536150844e-2
-6.043569952437795,0.10431535786088464
-6.067236468127568,0.14506024847511823
-6.092796058207097,0.18464506161130112
-6.12019197399457,0.22298190908505333
-6.14936338970587,0.25998567350785917
-6.180245537503049,0.29557419726894274
-6.212769851295112,0.3296684649457169
-6.246864118971887,0.362192778737779
-6.28245264273297,0.3930749265349589
-6.319456407155776,0.4222463422462597
-6.357793254629527,0.44964225803373115
-6.397378067765709,0.47520184811326205
-6.438122958379945,0.4988683638030329
-6.4799374626257435,0.520589259519785
-6.522728741846878,0.5403163094431505
-6.566401788702401,0.5580057145890369
-6.610859638106711,0.5736182000543231
-6.656003582516288,0.5871191022169677
-6.701733391085117,0.5984784456979164
-6.747947532202249,0.6076710099139433
-6.794543398917354,0.6146763850736474
-6.841417536753815,0.6194790174922975
-6.88846587340353,0.6220682441249008
-6.93558394979348,0.6224383162408302
-6.982667152010973,0.6205884121874408
-7.029610943572705,0.6165226392143492
-7.07631109752189,0.6102500243543072
-7.12266392783817,0.6017844943809352
-7.168566519646513,0.5911448448878005
-7.213916957713963,0.5783546985574994
-7.25861455272695,0.563442452713395
-7.30256006484675,0.5464412162704559
-7.3456559240467305,0.5273887362251894
-7.387806446742234,0.506327313847863
-7.428918048232031,0.48330371076311307
-7.468899450479789,0.45836904512744026
-7.507661884774131,0.4315786781341169
-7.545119288817364,0.4029920910974991
-7.581188497805309,0.37267275338962946
-7.615789429073974,0.34068798152235846
-7.64884525990307,0.3071087896878577
-7.680282598081689,0.27200973208935286
-7.710031644857349,0.23546873741214602
-7.738026349906683,0.1975669358024481
-7.764204557983674,0.15838847873816553
-7.788508146919852,0.1180203521915768
-7.810883156670026,7.655218349871662e-2
-7.8312799091171055,3.407604236427764e-2
-7.849653118369911,-9.313763556152654e-3
-7.865961991309204,-5.35208980426809e-2
-7.880170318158601,-9.844721020160074e-2
-7.892246552879336,-0.1439929523849255
-7.902163883210347,-0.19005700165510575
-7.909900290198216,-0.2365370843032477
-7.915438597084738,-0.28333000292231647
-7.91876650744363,-0.33033186553118776
-7.91987663248166,-0.37743831624083013"/></g><g fill-opacity="0.3" stroke-opacity="0.5" fill="#0d0d0d" stroke-width="1.0e-2" stroke="#0d0d0d"><path d="M 7.9199,-1.3774 L 6.9199,-1.3774 A 1.0 1.0 -0.0 1 0 7.9199,-0.3774 L 7.9199,-1.3774"/></g><g></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="0.4"><text y="-3.3174383162408296" x="7.394999999999998">True</text></g><g></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="0.6"><text y="-4.39487663248166" x="5.499999999999998">Large</text></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="316.4440150447401" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0.0 -4.854876632481659 9.0 8.532314948722489" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}{
+  .chart g {
+    stroke: #0d0d0d;
+  }
+  .chart g text {
+    fill: #0d0d0d;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .chart g {
+    stroke: #f0f0f0;
+  }
+  .chart g text {
+    fill: #f0f0f0;
+  }
+}</style><g class="chart"><g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="0.6" fill-opacity="1.0" text-anchor="middle"><text x="0.5" y="-0.0" transform="rotate(-90.0, 0.5, -0.0)">Sweep</text></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="0.4" fill-opacity="1.0" text-anchor="middle"><text x="1.5699999999999998" y="1.5099999999999998" transform="rotate(-90.0, 1.5699999999999998, 1.5099999999999998)">True</text></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="0.4" fill-opacity="1.0" text-anchor="middle"><text x="1.5699999999999998" y="-1.5099999999999998" transform="rotate(-90.0, 1.5699999999999998, -1.5099999999999998)">False</text></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="2.0e-2" stroke-opacity="0.2"><polyline points="5.1499999999999995,1.6599999999999993
+5.148026728428272,1.5972094804706858
+5.142114701314479,1.534666766435695
+5.132287250728689,1.4726186854142749
+5.118583161128631,1.4113101128351442
+5.101056516295153,1.3509830056250518
+5.079776485888251,1.2918754473153213
+5.0548270524660195,1.2342207084349264
+5.026306680043864,1.178246325898284
+4.994327925502016,1.1241732050210027
+4.959016994374948,1.072214747707526
+4.92051324277579,1.0225760102513095
+4.878968627421412,0.9754528940713105
+4.834547105928689,0.9310313725785879
+4.78742398974869,0.8894867572242102
+4.737785252292474,0.8509830056250518
+4.685826794978997,0.815672074497984
+4.631753674101716,0.7836933199561358
+4.575779291565073,0.7551729475339797
+4.518124552684678,0.7302235141117479
+4.459016994374948,0.7089434837048456
+4.398689887164855,0.6914168388713682
+4.337381314585725,0.6777127492713104
+4.275333233564305,0.6678852986855217
+4.212790519529314,0.6619732715717275
+4.15,0.6599999999999993
+4.087209480470687,0.6619732715717275
+4.024666766435696,0.6678852986855213
+3.9626186854142755,0.6777127492713104
+3.901310112835145,0.6914168388713682
+3.8409830056250525,0.7089434837048456
+3.7818754473153224,0.7302235141117479
+3.7242207084349275,0.7551729475339797
+3.6682463258982843,0.7836933199561358
+3.6141732050210034,0.8156720744979844
+3.5622147477075266,0.8509830056250518
+3.5125760102513106,0.8894867572242102
+3.4654528940713116,0.9310313725785879
+3.421031372578589,0.9754528940713105
+3.3794867572242104,1.0225760102513095
+3.340983005625053,1.072214747707526
+3.3056720744979855,1.1241732050210023
+3.2736933199561364,1.178246325898284
+3.245172947533981,1.2342207084349264
+3.2202235141117486,1.291875447315321
+3.1989434837048467,1.3509830056250518
+3.181416838871369,1.4113101128351442
+3.1677127492713115,1.4726186854142749
+3.1578852986855224,1.534666766435695
+3.151973271571728,1.5972094804706858
+3.15,1.6599999999999993
+3.151973271571728,1.7227905195293127
+3.1578852986855224,1.7853332335643035
+3.1677127492713115,1.847381314585724
+3.1814168388713684,1.9086898871648539
+3.1989434837048463,1.9690169943749467
+3.220223514111748,2.028124552684677
+3.2451729475339803,2.0857792915650712
+3.2736933199561364,2.1417536741017145
+3.305672074497985,2.195826794978996
+3.3409830056250525,2.2477852522924717
+3.3794867572242104,2.297423989748689
+3.421031372578588,2.3445471059286875
+3.4654528940713116,2.388968627421411
+3.5125760102513106,2.4305132427757887
+3.5622147477075266,2.4690169943749467
+3.614173205021004,2.5043279255020146
+3.6682463258982843,2.5363066800438627
+3.724220708434928,2.5648270524660193
+3.7818754473153224,2.5897764858882506
+3.840983005625052,2.611056516295153
+3.9013101128351453,2.6285831611286303
+3.9626186854142755,2.642287250728688
+4.024666766435696,2.652114701314477
+4.087209480470687,2.658026728428271
+4.15,2.6599999999999993
+4.212790519529312,2.658026728428271
+4.275333233564305,2.6521147013144772
+4.337381314585725,2.642287250728688
+4.398689887164855,2.6285831611286303
+4.459016994374948,2.611056516295153
+4.518124552684678,2.589776485888251
+4.575779291565072,2.5648270524660193
+4.6317536741017165,2.5363066800438627
+4.685826794978997,2.5043279255020146
+4.737785252292474,2.4690169943749467
+4.78742398974869,2.4305132427757887
+4.834547105928689,2.3889686274214115
+4.878968627421412,2.3445471059286884
+4.92051324277579,2.297423989748689
+4.959016994374948,2.2477852522924726
+4.994327925502016,2.1958267949789962
+5.026306680043864,2.1417536741017154
+5.0548270524660195,2.085779291565072
+5.079776485888251,2.028124552684677
+5.101056516295153,1.9690169943749471
+5.118583161128631,1.9086898871648545
+5.132287250728689,1.847381314585724
+5.142114701314478,1.785333233564304
+5.148026728428272,1.7227905195293125
+5.1499999999999995,1.6599999999999993"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="2.0e-2" stroke-opacity="0.2"><polyline points="4.15,2.6599999999999993
+4.148026728428272,2.597209480470686
+4.142114701314478,2.534666766435695
+4.132287250728689,2.4726186854142744
+4.118583161128631,2.4113101128351446
+4.101056516295154,2.350983005625052
+4.079776485888252,2.2918754473153213
+4.05482705246602,2.2342207084349264
+4.026306680043864,2.178246325898284
+3.994327925502015,2.1241732050210027
+3.9590169943749474,2.072214747707526
+3.920513242775789,2.0225760102513095
+3.8789686274214112,1.9754528940713107
+3.834547105928689,1.9310313725785877
+3.78742398974869,1.8894867572242102
+3.737785252292473,1.8509830056250518
+3.685826794978997,1.8156720744979842
+3.6317536741017147,1.7836933199561356
+3.575779291565073,1.7551729475339797
+3.5181245526846783,1.7302235141117481
+3.459016994374947,1.7089434837048456
+3.3986898871648545,1.6914168388713682
+3.3373813145857247,1.6777127492713109
+3.275333233564304,1.6678852986855215
+3.212790519529313,1.6619732715717275
+3.15,1.6599999999999993
+3.0872094804706864,1.6619732715717275
+3.0246667664356957,1.6678852986855213
+2.9626186854142755,1.6777127492713106
+2.901310112835145,1.6914168388713682
+2.8409830056250525,1.7089434837048456
+2.7818754473153224,1.7302235141117481
+2.7242207084349275,1.7551729475339797
+2.6682463258982843,1.7836933199561358
+2.6141732050210034,1.8156720744979844
+2.5622147477075266,1.8509830056250518
+2.5125760102513106,1.88948675722421
+2.4654528940713116,1.9310313725785877
+2.421031372578589,1.9754528940713107
+2.3794867572242104,2.0225760102513095
+2.340983005625053,2.072214747707526
+2.3056720744979855,2.1241732050210023
+2.2736933199561364,2.178246325898284
+2.245172947533981,2.2342207084349264
+2.220223514111749,2.291875447315321
+2.1989434837048467,2.350983005625052
+2.1814168388713693,2.411310112835144
+2.1677127492713115,2.472618685414275
+2.1578852986855224,2.5346667664356946
+2.1519732715717286,2.597209480470686
+2.1500000000000004,2.6599999999999993
+2.1519732715717286,2.7227905195293127
+2.1578852986855224,2.7853332335643035
+2.1677127492713115,2.847381314585724
+2.181416838871369,2.908689887164854
+2.1989434837048467,2.9690169943749467
+2.2202235141117486,3.028124552684677
+2.2451729475339803,3.0857792915650717
+2.273693319956137,3.1417536741017145
+2.305672074497985,3.195826794978996
+2.3409830056250525,3.2477852522924717
+2.3794867572242104,3.297423989748689
+2.421031372578588,3.3445471059286875
+2.4654528940713116,3.388968627421411
+2.5125760102513106,3.4305132427757887
+2.5622147477075266,3.4690169943749467
+2.614173205021004,3.5043279255020146
+2.6682463258982843,3.5363066800438627
+2.724220708434928,3.5648270524660193
+2.7818754473153224,3.5897764858882506
+2.840983005625052,3.611056516295153
+2.9013101128351453,3.6285831611286303
+2.9626186854142755,3.642287250728688
+3.024666766435695,3.652114701314477
+3.0872094804706864,3.658026728428271
+3.15,3.6599999999999993
+3.2127905195293125,3.658026728428271
+3.2753332335643037,3.6521147013144772
+3.3373813145857243,3.642287250728688
+3.3986898871648545,3.6285831611286303
+3.459016994374947,3.611056516295153
+3.518124552684677,3.589776485888251
+3.5757792915650715,3.5648270524660193
+3.6317536741017156,3.5363066800438627
+3.685826794978997,3.5043279255020146
+3.737785252292473,3.4690169943749467
+3.7874239897486888,3.4305132427757887
+3.8345471059286877,3.3889686274214115
+3.8789686274214112,3.3445471059286884
+3.920513242775789,3.297423989748689
+3.9590169943749474,3.2477852522924726
+3.9943279255020148,3.1958267949789962
+4.026306680043864,3.1417536741017154
+4.0548270524660195,3.085779291565072
+4.079776485888252,3.028124552684677
+4.101056516295154,2.9690169943749467
+4.118583161128631,2.9086898871648548
+4.132287250728689,2.847381314585724
+4.142114701314478,2.785333233564304
+4.148026728428272,2.7227905195293127
+4.15,2.6599999999999997"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" stroke-opacity="0.5"><polyline points="3.15,1.6599999999999993
+3.1657073173118206,1.6601233675183389
+3.181410759078128,1.6604934396342674
+3.1971064507096427,1.6611101250380291
+3.212790519529313,1.6619732715717275
+3.228459095727845,1.6630826662668712
+3.2441083133185145,1.6644380353969193
+3.2597343110910453,1.6660390445448194
+3.2753332335643037,1.6678852986855213
+3.290901231937583,1.6699763422834417
+3.306434465040231,1.6723116594048615
+3.3219291002794096,1.6748906738452254
+3.3373813145857247,1.6777127492713109
+3.3527872953565123,1.6807771893782335
+3.3681432413965426,1.684083238061252
+3.383445363855906,1.6876300796023227
+3.3986898871648545,1.6914168388713682
+3.413873049965373,1.6954425815422012
+3.4289911060392293,1.6997063143230562
+3.4440403252323035,1.7042069852016692
+3.459016994374947,1.7089434837048456
+3.473917418198149,1.713914641172454
+3.488737920245291,1.7191192310457737
+3.503474843779257,1.724555969170132
+3.5181245526846783,1.7302235141117481
+3.53268343236509,1.7361204674887125
+3.54714789063478,1.7422453743160182
+3.5615143586051086,1.748596723364554
+3.575779291565073,1.7551729475339797
+3.5899391698559153,1.7619724242393837
+3.6039904997395467,1.7689934758116315
+3.617929814260573,1.7762343699113057
+3.631753674101715,1.7836933199561358
+3.645458668432408,1.7913684855618082
+3.6590414157503712,1.7992579729960558
+3.6724985647159487,1.807359835645907
+3.685826794978997,1.8156720744979842
+3.6990228179981317,1.824192638631729
+3.7120833778521307,1.8329194257254375
+3.7250052520432786,1.8418502825749759
+3.737785252292473,1.8509830056250518
+3.750420225325884,1.8603153415129086
+3.762907053652977,1.869844987624309
+3.775242656335705,1.8795695926616696
+3.78742398974869,1.8894867572242102
+3.799448048330184,1.8995940343999682
+3.811311865323652,1.9098889303695397
+3.8230125135097737,1.9203689050213897
+3.834547105928689,1.9310313725785877
+3.845912796592314,1.9418737022368104
+3.857106781186548,1.9528932188134518
+3.8681262977631885,1.964087203407685
+3.8789686274214112,1.9754528940713107
+3.88963109497861,1.986987486490226
+3.9001110696304595,1.9986881346763474
+3.9104059656000314,2.0105519516698154
+3.920513242775789,2.0225760102513095
+3.9304304073383296,2.0347573436642943
+3.9401550123756905,2.047092946347023
+3.9496846584870906,2.0595797746741153
+3.9590169943749474,2.072214747707526
+3.968149717425023,2.0849947479567206
+3.977080574274562,2.097916622147869
+3.9858073613682703,2.1109771820018675
+3.994327925502015,2.1241732050210027
+4.0026401643540925,2.1375014352840505
+4.010742027003944,2.150958584249628
+4.018631514438192,2.164541331567592
+4.026306680043864,2.178246325898284
+4.033765630088694,2.192070185739426
+4.041006524188369,2.2060095002604525
+4.048027575760616,2.2200608301440843
+4.05482705246602,2.234220708434927
+4.0614032766354455,2.2484856413948906
+4.067754625683982,2.2628521093652187
+4.073879532511287,2.2773165676349096
+4.079776485888252,2.2918754473153213
+4.085444030829867,2.3065251562207427
+4.090880768954226,2.3212620797547077
+4.096085358827546,2.33608258180185
+4.101056516295154,2.350983005625052
+4.10579301479833,2.365959674767695
+4.110293685676943,2.38100889396077
+4.114557418457799,2.3961269500346267
+4.118583161128631,2.4113101128351446
+4.122369920397677,2.4265546361440937
+4.125916761938748,2.4418567586034565
+4.1292228106217665,2.4572127046434864
+4.132287250728689,2.4726186854142744
+4.135109326154774,2.48807089972059
+4.137688340595139,2.5035655349597685
+4.140023657716558,2.5190987680624164
+4.142114701314478,2.534666766435695
+4.14396095545518,2.550265688908954
+4.145561964603081,2.565891686681485
+4.146917333733128,2.5815409042721544
+4.148026728428272,2.597209480470686
+4.14888987496197,2.6128935492903564
+4.149506560365732,2.6285892409218707
+4.149876632481661,2.6442926826881785
+4.15,2.6599999999999993"/></g><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-2" fill-opacity="0.3" stroke-opacity="0.5"><path d="M 4.15,1.6600 L 3.15,1.6600 A 1.0 1.0 -0.0 0 1 4.15,2.6600 L 4.15,1.6600"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="2.0e-2" stroke-opacity="0.2"><polyline points="5.1499999999999995,-1.38
+5.148026728428272,-1.4427905195293134
+5.142114701314479,-1.505333233564305
+5.132287250728689,-1.5673813145857247
+5.118583161128631,-1.628689887164855
+5.101056516295153,-1.6890169943749482
+5.079776485888251,-1.7481245526846783
+5.0548270524660195,-1.8057792915650728
+5.026306680043864,-1.861753674101716
+4.994327925502016,-1.9158267949789964
+4.959016994374948,-1.9677852522924733
+4.92051324277579,-2.01742398974869
+4.878968627421412,-2.064547105928689
+4.834547105928689,-2.1089686274214117
+4.78742398974869,-2.15051324277579
+4.737785252292474,-2.1890169943749482
+4.685826794978997,-2.224327925502015
+4.631753674101716,-2.2563066800438643
+4.575779291565073,-2.28482705246602
+4.518124552684678,-2.3097764858882517
+4.459016994374948,-2.3310565162951535
+4.398689887164855,-2.348583161128631
+4.337381314585725,-2.3622872507286887
+4.275333233564305,-2.3721147013144783
+4.212790519529314,-2.3780267284282717
+4.15,-2.38
+4.087209480470687,-2.3780267284282717
+4.024666766435696,-2.3721147013144783
+3.9626186854142755,-2.3622872507286887
+3.901310112835145,-2.348583161128631
+3.8409830056250525,-2.3310565162951535
+3.7818754473153224,-2.3097764858882517
+3.7242207084349275,-2.28482705246602
+3.6682463258982843,-2.2563066800438643
+3.6141732050210034,-2.224327925502015
+3.5622147477075266,-2.1890169943749482
+3.5125760102513106,-2.15051324277579
+3.4654528940713116,-2.1089686274214117
+3.421031372578589,-2.064547105928689
+3.3794867572242104,-2.01742398974869
+3.340983005625053,-1.9677852522924733
+3.3056720744979855,-1.9158267949789973
+3.2736933199561364,-1.861753674101716
+3.245172947533981,-1.8057792915650728
+3.2202235141117486,-1.7481245526846783
+3.1989434837048467,-1.6890169943749482
+3.181416838871369,-1.6286898871648559
+3.1677127492713115,-1.5673813145857247
+3.1578852986855224,-1.505333233564305
+3.151973271571728,-1.4427905195293134
+3.15,-1.3800000000000008
+3.151973271571728,-1.3172094804706873
+3.1578852986855224,-1.2546667664356956
+3.1677127492713115,-1.192618685414276
+3.1814168388713684,-1.1313101128351457
+3.1989434837048463,-1.0709830056250533
+3.220223514111748,-1.0118754473153224
+3.2451729475339803,-0.9542207084349279
+3.2736933199561364,-0.8982463258982847
+3.305672074497985,-0.8441732050210033
+3.3409830056250525,-0.7922147477075274
+3.3794867572242104,-0.7425760102513106
+3.421031372578588,-0.6954528940713125
+3.4654528940713116,-0.651031372578589
+3.5125760102513106,-0.6094867572242109
+3.5622147477075266,-0.5709830056250524
+3.614173205021004,-0.5356720744979846
+3.6682463258982843,-0.5036933199561364
+3.724220708434928,-0.47517294753398076
+3.7818754473153224,-0.450223514111749
+3.840983005625052,-0.42894348370484714
+3.9013101128351453,-0.4114168388713697
+3.9626186854142755,-0.39771274927131195
+4.024666766435696,-0.38788529868552235
+4.087209480470687,-0.381973271571729
+4.15,-0.3800000000000008
+4.212790519529312,-0.381973271571729
+4.275333233564305,-0.38788529868552235
+4.337381314585725,-0.39771274927131195
+4.398689887164855,-0.4114168388713697
+4.459016994374948,-0.42894348370484714
+4.518124552684678,-0.450223514111749
+4.575779291565072,-0.47517294753398076
+4.6317536741017165,-0.5036933199561364
+4.685826794978997,-0.5356720744979855
+4.737785252292474,-0.5709830056250524
+4.78742398974869,-0.6094867572242109
+4.834547105928689,-0.6510313725785881
+4.878968627421412,-0.6954528940713116
+4.92051324277579,-0.7425760102513106
+4.959016994374948,-0.7922147477075274
+4.994327925502016,-0.8441732050210025
+5.026306680043864,-0.8982463258982847
+5.0548270524660195,-0.9542207084349279
+5.079776485888251,-1.0118754473153224
+5.101056516295153,-1.0709830056250524
+5.118583161128631,-1.1313101128351448
+5.132287250728689,-1.192618685414276
+5.142114701314478,-1.2546667664356956
+5.148026728428272,-1.3172094804706873
+5.1499999999999995,-1.38"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="2.0e-2" stroke-opacity="0.2"><polyline points="4.15,-0.3800000000000008
+4.148026728428272,-0.44279051952931425
+4.142114701314478,-0.5053332335643042
+4.132287250728689,-0.5673813145857238
+4.118583161128631,-0.628689887164855
+4.101056516295154,-0.6890169943749473
+4.079776485888252,-0.7481245526846783
+4.05482705246602,-0.8057792915650728
+4.026306680043864,-0.8617536741017151
+3.994327925502015,-0.9158267949789973
+3.9590169943749474,-0.9677852522924733
+3.920513242775789,-1.01742398974869
+3.8789686274214112,-1.064547105928689
+3.834547105928689,-1.1089686274214117
+3.78742398974869,-1.150513242775789
+3.737785252292473,-1.1890169943749473
+3.685826794978997,-1.2243279255020152
+3.6317536741017147,-1.2563066800438643
+3.575779291565073,-1.284827052466019
+3.5181245526846783,-1.3097764858882517
+3.459016994374947,-1.3310565162951544
+3.3986898871648545,-1.348583161128631
+3.3373813145857247,-1.3622872507286887
+3.275333233564304,-1.3721147013144783
+3.212790519529313,-1.3780267284282717
+3.15,-1.38
+3.0872094804706864,-1.3780267284282717
+3.0246667664356957,-1.3721147013144783
+2.9626186854142755,-1.3622872507286887
+2.901310112835145,-1.348583161128631
+2.8409830056250525,-1.3310565162951544
+2.7818754473153224,-1.3097764858882517
+2.7242207084349275,-1.284827052466019
+2.6682463258982843,-1.2563066800438634
+2.6141732050210034,-1.2243279255020152
+2.5622147477075266,-1.1890169943749473
+2.5125760102513106,-1.1505132427757898
+2.4654528940713116,-1.1089686274214117
+2.421031372578589,-1.064547105928689
+2.3794867572242104,-1.01742398974869
+2.340983005625053,-0.9677852522924741
+2.3056720744979855,-0.9158267949789973
+2.2736933199561364,-0.8617536741017151
+2.245172947533981,-0.8057792915650737
+2.220223514111749,-0.7481245526846783
+2.1989434837048467,-0.6890169943749473
+2.1814168388713693,-0.628689887164855
+2.1677127492713115,-0.5673813145857238
+2.1578852986855224,-0.505333233564305
+2.1519732715717286,-0.44279051952931425
+2.1500000000000004,-0.3800000000000008
+2.1519732715717286,-0.31720948047068687
+2.1578852986855224,-0.2546667664356961
+2.1677127492713115,-0.19261868541427551
+2.181416838871369,-0.1313101128351457
+2.1989434837048467,-7.098300562505289e-2
+2.2202235141117486,-1.1875447315322418e-2
+2.2451729475339803,4.57792915650721e-2
+2.273693319956137,0.10175367410171487
+2.305672074497985,0.15582679497899665
+2.3409830056250525,0.20778525229247258
+2.3794867572242104,0.2574239897486894
+2.421031372578588,0.30454710592868794
+2.4654528940713116,0.348968627421411
+2.5125760102513106,0.39051324277578914
+2.5622147477075266,0.4290169943749471
+2.614173205021004,0.46432792550201496
+2.6682463258982843,0.49630668004386314
+2.724220708434928,0.5248270524660192
+2.7818754473153224,0.549776485888251
+2.840983005625052,0.5710565162951533
+2.9013101128351453,0.5885831611286307
+2.9626186854142755,0.6022872507286885
+3.024666766435695,0.6121147013144776
+3.0872094804706864,0.618026728428271
+3.15,0.6199999999999997
+3.2127905195293125,0.618026728428271
+3.2753332335643037,0.6121147013144776
+3.3373813145857243,0.6022872507286885
+3.3986898871648545,0.5885831611286307
+3.459016994374947,0.5710565162951533
+3.518124552684677,0.549776485888251
+3.5757792915650715,0.5248270524660197
+3.6317536741017156,0.49630668004386314
+3.685826794978997,0.4643279255020145
+3.737785252292473,0.4290169943749471
+3.7874239897486888,0.39051324277578914
+3.8345471059286877,0.3489686274214119
+3.8789686274214112,0.3045471059286884
+3.920513242775789,0.2574239897486894
+3.9590169943749474,0.20778525229247302
+3.9943279255020148,0.1558267949789971
+4.026306680043864,0.10175367410171576
+4.0548270524660195,4.5779291565072544e-2
+4.079776485888252,-1.1875447315322418e-2
+4.101056516295154,-7.098300562505289e-2
+4.118583161128631,-0.13131011283514482
+4.132287250728689,-0.19261868541427551
+4.142114701314478,-0.25466676643569564
+4.148026728428272,-0.31720948047068687
+4.15,-0.3799999999999999"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" stroke-opacity="0.5"><polyline points="3.15,-1.38
+3.150123367518339,-1.3642926826881796
+3.1504934396342685,-1.3485892409218723
+3.15111012503803,-1.3328935492903575
+3.151973271571728,-1.3172094804706873
+3.1530826662668723,-1.301540904272155
+3.1544380353969204,-1.2858916866814862
+3.1560390445448205,-1.270265688908955
+3.1578852986855224,-1.2546667664356956
+3.159976342283442,-1.2390987680624175
+3.1623116594048626,-1.2235655349597696
+3.164890673845226,-1.2080708997205907
+3.1677127492713115,-1.192618685414276
+3.170777189378234,-1.1772127046434875
+3.174083238061253,-1.1618567586034576
+3.177630079602323,-1.1465546361440948
+3.1814168388713684,-1.1313101128351457
+3.1854425815422016,-1.1161269500346274
+3.189706314323057,-1.1010088939607705
+3.19420698520167,-1.0859596747676967
+3.1989434837048467,-1.0709830056250524
+3.203914641172455,-1.056082581801851
+3.209119231045775,-1.0412620797547092
+3.214555969170133,-1.0265251562207434
+3.2202235141117486,-1.0118754473153224
+3.226120467488713,-0.9973165676349103
+3.232245374316019,-0.9828521093652203
+3.2385967233645547,-0.9684856413948921
+3.245172947533981,-0.9542207084349279
+3.2519724242393844,-0.9400608301440849
+3.2589934758116326,-0.926009500260454
+3.266234369911307,-0.9120701857394273
+3.2736933199561364,-0.8982463258982847
+3.2813684855618086,-0.8845413315675925
+3.2892579729960567,-0.870958584249629
+3.2973598356459077,-0.8575014352840515
+3.305672074497985,-0.8441732050210033
+3.31419263863173,-0.8309771820018685
+3.322919425725438,-0.8179166221478695
+3.331850282574977,-0.8049947479567212
+3.340983005625053,-0.7922147477075274
+3.3503153415129097,-0.779579774674116
+3.3598449876243097,-0.7670929463470237
+3.3695695926616698,-0.754757343664294
+3.3794867572242104,-0.7425760102513106
+3.3895940343999693,-0.7305519516698169
+3.3998889303695403,-0.7186881346763485
+3.410368905021391,-0.7069874864902266
+3.421031372578589,-0.6954528940713116
+3.431873702236811,-0.6840872034076861
+3.442893218813453,-0.6728932188134529
+3.4540872034076853,-0.6618737022368117
+3.4654528940713116,-0.651031372578589
+3.476987486490227,-0.6403689050213899
+3.4886881346763485,-0.6298889303695399
+3.5005519516698165,-0.6195940343999693
+3.5125760102513106,-0.6094867572242109
+3.5247573436642945,-0.5995695926616706
+3.5370929463470238,-0.5898449876243097
+3.5495797746741156,-0.5803153415129092
+3.5622147477075266,-0.5709830056250524
+3.5749947479567217,-0.5618502825749765
+3.5879166221478695,-0.5529194257254382
+3.600977182001868,-0.5441926386317295
+3.614173205021004,-0.5356720744979846
+3.627501435284051,-0.5273598356459086
+3.6409585842496286,-0.5192579729960567
+3.654541331567593,-0.5113684855618086
+3.6682463258982847,-0.5036933199561364
+3.6820701857394265,-0.4962343699113063
+3.6960095002604527,-0.48899347581163255
+3.710060830144085,-0.4819724242393848
+3.7242207084349275,-0.47517294753398076
+3.738485641394891,-0.4685967233645556
+3.7528521093652194,-0.4622453743160193
+3.76731656763491,-0.4561204674887138
+3.7818754473153224,-0.450223514111749
+3.796525156220743,-0.44455596917013285
+3.8112620797547088,-0.4391192310457743
+3.8260825818018507,-0.43391464117245526
+3.8409830056250525,-0.42894348370484714
+3.855959674767696,-0.42420698520167033
+3.8710088939607705,-0.41970631432305705
+3.886126950034627,-0.4154425815422007
+3.9013101128351453,-0.4114168388713697
+3.916554636144095,-0.407630079602324
+3.931856758603457,-0.40408323806125246
+3.9472127046434875,-0.4007771893782346
+3.9626186854142755,-0.39771274927131195
+3.9780708997205907,-0.3948906738452269
+3.993565534959769,-0.39231165940486257
+4.009098768062417,-0.38997634228344324
+4.024666766435696,-0.38788529868552235
+4.040265688908955,-0.3860390445448205
+4.055891686681486,-0.38443803539692034
+4.0715409042721555,-0.3830826662668727
+4.087209480470687,-0.381973271571729
+4.102893549290358,-0.3811101250380302
+4.118589240921872,-0.38049343963426896
+4.13429268268818,-0.3801233675183395
+4.15,-0.3800000000000008"/></g><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-2" fill-opacity="0.3" stroke-opacity="0.5"><path d="M 4.15,-1.38 L 3.15,-1.38 A 1.0 1.0 -0.0 0 0 4.15,-0.3800 L 4.15,-1.38"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="0.4" fill-opacity="1.0" text-anchor="middle"><text x="3.64" y="-3.3199999999999994">False</text></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="2.0e-2" stroke-opacity="0.2"><polyline points="8.59,1.6674383162408297
+8.588026728428272,1.6046477967115162
+8.58211470131448,1.5421050826765255
+8.572287250728689,1.480057001655105
+8.558583161128631,1.4187484290759746
+8.541056516295154,1.3584213218658823
+8.519776485888253,1.2993137635561518
+8.494827052466018,1.2416590246757568
+8.466306680043862,1.185684642139115
+8.434327925502016,1.1316115212618332
+8.399016994374946,1.0796530639483564
+8.36051324277579,1.03001432649214
+8.31896862742141,0.982891210312141
+8.274547105928688,0.938469688819418
+8.22742398974869,0.8969250734650407
+8.177785252292473,0.8584213218658823
+8.125826794978996,0.8231103907388144
+8.071753674101714,0.7911316361969662
+8.015779291565073,0.7626112637748101
+7.958124552684678,0.7376618303525784
+7.899016994374946,0.7163817999456761
+7.838689887164855,0.6988551551121991
+7.777381314585725,0.6851510655121409
+7.715333233564304,0.6753236149263522
+7.652790519529312,0.6694115878125579
+7.59,0.6674383162408302
+7.527209480470686,0.6694115878125579
+7.4646667664356965,0.6753236149263517
+7.402618685414275,0.6851510655121409
+7.341310112835145,0.6988551551121991
+7.280983005625053,0.7163817999456761
+7.2218754473153215,0.7376618303525784
+7.164220708434927,0.7626112637748101
+7.108246325898284,0.7911316361969662
+7.054173205021003,0.8231103907388149
+7.002214747707526,0.8584213218658823
+6.95257601025131,0.8969250734650407
+6.905452894071311,0.938469688819418
+6.861031372578589,0.982891210312141
+6.819486757224211,1.03001432649214
+6.780983005625053,1.0796530639483564
+6.7456720744979854,1.1316115212618327
+6.7136933199561355,1.185684642139115
+6.685172947533981,1.2416590246757568
+6.660223514111749,1.2993137635561514
+6.638943483704845,1.3584213218658823
+6.621416838871368,1.4187484290759746
+6.607712749271311,1.480057001655105
+6.597885298685522,1.5421050826765255
+6.591973271571727,1.6046477967115162
+6.59,1.6674383162408297
+6.591973271571727,1.7302288357701432
+6.597885298685522,1.792771549805134
+6.607712749271311,1.8548196308265548
+6.621416838871368,1.9161282034056843
+6.638943483704845,1.976455310615777
+6.660223514111749,2.0355628689255076
+6.68517294753398,2.0932176078059017
+6.7136933199561355,2.149191990342545
+6.7456720744979854,2.2032651112198263
+6.7809830056250515,2.255223568533302
+6.819486757224211,2.3048623059895195
+6.861031372578588,2.351985422169518
+6.905452894071311,2.3964069436622415
+6.95257601025131,2.437951559016619
+7.002214747707526,2.476455310615777
+7.054173205021003,2.511766241742845
+7.108246325898284,2.543744996284693
+7.164220708434928,2.5722653687068497
+7.2218754473153215,2.597214802129081
+7.280983005625052,2.6184948325359834
+7.341310112835145,2.636021477369461
+7.402618685414275,2.6497255669695186
+7.464666766435696,2.6595530175553073
+7.527209480470686,2.6654650446691015
+7.59,2.6674383162408297
+7.652790519529312,2.6654650446691015
+7.715333233564303,2.6595530175553077
+7.777381314585725,2.6497255669695186
+7.838689887164855,2.636021477369461
+7.899016994374946,2.6184948325359834
+7.958124552684677,2.5972148021290815
+8.015779291565071,2.5722653687068497
+8.071753674101716,2.543744996284693
+8.125826794978996,2.511766241742845
+8.177785252292473,2.476455310615777
+8.227423989748688,2.437951559016619
+8.274547105928688,2.396406943662242
+8.31896862742141,2.351985422169519
+8.36051324277579,2.3048623059895195
+8.399016994374946,2.255223568533303
+8.434327925502016,2.2032651112198267
+8.466306680043862,2.149191990342546
+8.494827052466018,2.0932176078059026
+8.519776485888253,2.0355628689255076
+8.541056516295154,1.9764553106157774
+8.558583161128631,1.916128203405685
+8.572287250728689,1.8548196308265548
+8.582114701314477,1.7927715498051344
+8.588026728428272,1.730228835770143
+8.59,1.66743831624083"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="2.0e-2" stroke-opacity="0.2"><polyline points="7.59,2.6674383162408297
+7.588026728428271,2.6046477967115162
+7.582114701314477,2.5421050826765255
+7.572287250728689,2.480057001655105
+7.55858316112863,2.418748429075975
+7.541056516295153,2.3584213218658823
+7.519776485888252,2.2993137635561522
+7.49482705246602,2.241659024675757
+7.466306680043863,2.1856846421391145
+7.434327925502014,2.131611521261833
+7.399016994374946,2.0796530639483564
+7.36051324277579,2.03001432649214
+7.318968627421412,1.982891210312141
+7.274547105928688,1.9384696888194182
+7.22742398974869,1.8969250734650407
+7.177785252292472,1.8584213218658825
+7.1258267949789955,1.8231103907388146
+7.071753674101714,1.791131636196966
+7.015779291565072,1.7626112637748101
+6.958124552684678,1.7376618303525784
+6.899016994374947,1.716381799945676
+6.838689887164854,1.6988551551121986
+6.777381314585725,1.685151065512141
+6.715333233564305,1.675323614926352
+6.652790519529313,1.6694115878125582
+6.59,1.6674383162408297
+6.5272094804706855,1.6694115878125582
+6.464666766435695,1.6753236149263517
+6.402618685414275,1.6851510655121409
+6.341310112835146,1.6988551551121986
+6.280983005625052,1.716381799945676
+6.221875447315322,1.7376618303525784
+6.164220708434927,1.7626112637748101
+6.108246325898285,1.7911316361969662
+6.054173205021003,1.8231103907388149
+6.002214747707527,1.8584213218658825
+5.952576010251311,1.8969250734650405
+5.905452894071312,1.9384696888194182
+5.861031372578588,1.982891210312141
+5.81948675722421,2.03001432649214
+5.780983005625052,2.0796530639483564
+5.7456720744979854,2.131611521261833
+5.713693319956136,2.1856846421391145
+5.685172947533981,2.241659024675757
+5.660223514111749,2.2993137635561514
+5.638943483704846,2.3584213218658823
+5.621416838871369,2.4187484290759746
+5.60771274927131,2.4800570016551053
+5.597885298685521,2.542105082676525
+5.591973271571728,2.6046477967115162
+5.59,2.6674383162408297
+5.591973271571728,2.730228835770143
+5.597885298685521,2.792771549805134
+5.60771274927131,2.8548196308265545
+5.621416838871369,2.9161282034056843
+5.638943483704846,2.976455310615777
+5.660223514111749,3.0355628689255076
+5.685172947533981,3.093217607805902
+5.713693319956136,3.149191990342545
+5.745672074497985,3.2032651112198263
+5.780983005625052,3.255223568533302
+5.81948675722421,3.3048623059895195
+5.861031372578587,3.351985422169518
+5.905452894071312,3.3964069436622415
+5.952576010251311,3.437951559016619
+6.0022147477075265,3.476455310615777
+6.054173205021003,3.511766241742845
+6.108246325898285,3.543744996284693
+6.164220708434927,3.5722653687068497
+6.221875447315322,3.597214802129081
+6.2809830056250515,3.6184948325359834
+6.341310112835146,3.636021477369461
+6.402618685414275,3.6497255669695186
+6.464666766435695,3.6595530175553073
+6.5272094804706855,3.6654650446691015
+6.59,3.6674383162408297
+6.652790519529313,3.6654650446691015
+6.715333233564304,3.6595530175553077
+6.777381314585725,3.6497255669695186
+6.838689887164854,3.636021477369461
+6.899016994374947,3.6184948325359834
+6.9581245526846764,3.5972148021290815
+7.015779291565072,3.5722653687068497
+7.071753674101715,3.543744996284693
+7.1258267949789955,3.511766241742845
+7.177785252292472,3.476455310615777
+7.227423989748688,3.437951559016619
+7.274547105928687,3.396406943662242
+7.318968627421412,3.351985422169519
+7.36051324277579,3.3048623059895195
+7.399016994374946,3.255223568533303
+7.434327925502013,3.2032651112198267
+7.466306680043862,3.149191990342546
+7.49482705246602,3.0932176078059026
+7.519776485888252,3.0355628689255076
+7.541056516295153,2.976455310615777
+7.55858316112863,2.9161282034056852
+7.572287250728689,2.8548196308265545
+7.582114701314477,2.7927715498051344
+7.588026728428271,2.730228835770143
+7.59,2.66743831624083"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" stroke-opacity="0.5"><polyline points="6.59,1.6674383162408297
+6.59111012503803,1.620331865531187
+6.594438035396919,1.5733300029223156
+6.599976342283441,1.5265370843032473
+6.607712749271311,1.4800570016551053
+6.617630079602323,1.4339929523849246
+6.629706314323057,1.3884472102016003
+6.6439146411724535,1.3435208980426805
+6.660223514111749,1.2993137635561518
+6.678596723364554,1.255923957635721
+6.698993475811631,1.213447816501283
+6.721368485561809,1.1719796478084223
+6.7456720744979854,1.1316115212618332
+6.771850282574976,1.092433064197551
+6.79984498762431,1.0545312625878536
+6.829594034399969,1.0179902679106463
+6.861031372578589,0.982891210312141
+6.894087203407686,0.9493120184776411
+6.928688134676347,0.9173272466103701
+6.964757343664295,0.8870079089025
+7.002214747707526,0.8584213218658823
+7.040977182001867,0.8316309548725598
+7.080958584249629,0.8066962892368861
+7.122070185739426,0.7836726861521361
+7.164220708434927,0.7626112637748106
+7.20731656763491,0.7435587837295432
+7.251262079754708,0.7265575472866046
+7.295959674767696,0.7116453014424997
+7.341310112835144,0.6988551551121991
+7.387212704643487,0.688215505619064
+7.433565534959769,0.6797499756456924
+7.480265688908954,0.6734773607856503
+7.527209480470686,0.6694115878125579
+7.574292682688179,0.6675616837591694
+7.621410759078127,0.6679317558750979
+7.668459095727845,0.6705209825077021
+7.715333233564303,0.6753236149263517
+7.761929100279408,0.6823289900860559
+7.808143241396542,0.6915215543020823
+7.853873049965372,0.7028808977830314
+7.899016994374946,0.7163817999456761
+7.9434748437792555,0.7319942854109622
+7.9871478906347795,0.7496836905568487
+8.029939169855915,0.7694107404802146
+8.071753674101716,0.7911316361969662
+8.112498564715947,0.8147981518867371
+8.152083377852131,0.840357741966268
+8.190420225325884,0.867753657753739
+8.227423989748688,0.8969250734650402
+8.263012513509771,0.9278072212622201
+8.297106781186548,0.9603315350542818
+8.329631094978609,0.994425802731056
+8.36051324277579,1.03001432649214
+8.38968465848709,1.0670180909149458
+8.417080574274562,1.105354938388699
+8.442640164354092,1.1449397515248805
+8.466306680043862,1.185684642139115
+8.488027575760617,1.2274991463849143
+8.50775462568398,1.2702904256060483
+8.525444030829869,1.3139634724615727
+8.541056516295154,1.3584213218658823
+8.554557418457799,1.4035652662754563
+8.565916761938746,1.4492950748442865
+8.575109326154774,1.49550921596142
+8.582114701314477,1.542105082676525
+8.586917333733128,1.5889792205129845
+8.589506560365733,1.6360275571627012
+8.58987663248166,1.68314563355265
+8.588026728428272,1.7302288357701425
+8.583960955455181,1.777172627331875
+8.577688340595138,1.8238727812810605
+8.569222810621765,1.8702256115973417
+8.558583161128631,1.9161282034056846
+8.54579301479833,1.9614786414731336
+8.530880768954225,2.0061762364861204
+8.513879532511288,2.05012174860592
+8.494827052466018,2.0932176078059017
+8.473765630088694,2.1353681305014027
+8.450742027003944,2.1764797319912015
+8.425807361368271,2.2164611342389606
+8.399016994374946,2.2552235685333026
+8.370430407338329,2.292680972576535
+8.34011106963046,2.328750181564481
+8.308126297763188,2.3633511128331444
+8.274547105928688,2.3964069436622415
+8.239448048330184,2.4278442818408608
+8.202907053652977,2.45759332861652
+8.16500525204328,2.485588033665853
+8.125826794978996,2.511766241742845
+8.085458668432407,2.536069830679021
+8.043990499739547,2.5584448404291975
+8.001514358605109,2.578841592876275
+7.958124552684678,2.597214802129081
+7.913917418198149,2.6135236750683752
+7.86899110603923,2.6277320019177726
+7.823445363855904,2.6398082366385065
+7.777381314585725,2.6497255669695186
+7.730901231937583,2.6574619739573873
+7.684108313318514,2.6630002808439097
+7.637106450709643,2.6663281912028
+7.59,2.6674383162408297"/></g><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-2" fill-opacity="0.3" stroke-opacity="0.5"><path d="M 7.59,1.6674 L 6.59,1.6674 A 1.0 1.0 -0.0 1 1 7.59,2.6674 L 7.59,1.6674"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="2.0e-2" stroke-opacity="0.2"><polyline points="8.60487663248166,-1.3874383162408304
+8.602903360909933,-1.450228835770143
+8.596991333796138,-1.5127715498051355
+8.58716388321035,-1.5748196308265552
+8.573459793610292,-1.6361282034056854
+8.555933148776814,-1.6964553106157787
+8.534653118369912,-1.7555628689255087
+8.509703684947679,-1.8132176078059032
+8.481183312525523,-1.8691919903425465
+8.449204557983675,-1.923265111219827
+8.413893626856607,-1.9752235685333037
+8.375389875257449,-2.0248623059895197
+8.333845259903072,-2.0719854221695195
+8.289423738410349,-2.116406943662242
+8.24230062223035,-2.1579515590166203
+8.192661884774134,-2.196455310615778
+8.140703427460657,-2.2317662417428457
+8.086630306583373,-2.263744996284694
+8.030655924046734,-2.2922653687068504
+7.973001185166338,-2.317214802129082
+7.913893626856608,-2.338494832535984
+7.853566519646514,-2.3560214773694614
+7.792257947067386,-2.369725566969519
+7.730209866045965,-2.379553017555309
+7.667667152010974,-2.385465044669102
+7.604876632481661,-2.3874383162408304
+7.542086112952346,-2.385465044669102
+7.479543398917356,-2.379553017555309
+7.417495317895936,-2.369725566969519
+7.356186745316806,-2.3560214773694614
+7.2958596381067125,-2.338494832535984
+7.236752079796982,-2.317214802129082
+7.179097340916588,-2.2922653687068504
+7.123122958379945,-2.263744996284694
+7.069049837502664,-2.2317662417428457
+7.017091380189187,-2.196455310615778
+6.967452642732971,-2.1579515590166203
+6.920329526552971,-2.116406943662242
+6.875908005060249,-2.0719854221695195
+6.83436338970587,-2.0248623059895197
+6.795859638106713,-1.9752235685333037
+6.7605487069796455,-1.9232651112198278
+6.728569952437796,-1.8691919903425465
+6.70004958001564,-1.8132176078059032
+6.675100146593408,-1.7555628689255087
+6.653820116186507,-1.6964553106157787
+6.63629347135303,-1.6361282034056863
+6.622589381752972,-1.5748196308265552
+6.612761931167183,-1.5127715498051355
+6.606849904053389,-1.450228835770143
+6.604876632481661,-1.3874383162408312
+6.606849904053389,-1.324647796711517
+6.612761931167183,-1.262105082676527
+6.622589381752972,-1.2000570016551046
+6.63629347135303,-1.1387484290759762
+6.653820116186507,-1.0784213218658838
+6.675100146593408,-1.0193137635561529
+6.70004958001564,-0.9616590246757584
+6.728569952437797,-0.9056846421391151
+6.7605487069796455,-0.8516115212618338
+6.7958596381067125,-0.7996530639483579
+6.83436338970587,-0.7500143264921411
+6.875908005060249,-0.7028912103121421
+6.9203295265529725,-0.6584696888194195
+6.967452642732971,-0.6169250734650413
+7.017091380189187,-0.5784213218658838
+7.069049837502664,-0.543110390738816
+7.123122958379945,-0.5111316361969678
+7.179097340916588,-0.48261126377481034
+7.236752079796982,-0.45766183035257946
+7.295859638106712,-0.4363817999456767
+7.356186745316807,-0.4188551551121984
+7.417495317895936,-0.40515106551214153
+7.479543398917355,-0.3953236149263528
+7.542086112952346,-0.38941158781255947
+7.604876632481661,-0.38743831624083036
+7.667667152010973,-0.38941158781255947
+7.730209866045965,-0.3953236149263528
+7.792257947067385,-0.40515106551214153
+7.853566519646515,-0.4188551551121984
+7.913893626856607,-0.4363817999456767
+7.973001185166337,-0.45766183035257946
+8.030655924046732,-0.48261126377480945
+8.086630306583373,-0.5111316361969678
+8.140703427460657,-0.543110390738816
+8.192661884774132,-0.5784213218658838
+8.24230062223035,-0.6169250734650413
+8.289423738410346,-0.6584696888194186
+8.333845259903072,-0.7028912103121421
+8.375389875257449,-0.7500143264921411
+8.413893626856607,-0.799653063948357
+8.449204557983675,-0.8516115212618338
+8.481183312525523,-0.9056846421391143
+8.509703684947679,-0.9616590246757575
+8.534653118369912,-1.0193137635561529
+8.555933148776814,-1.078421321865883
+8.573459793610292,-1.1387484290759753
+8.58716388321035,-1.2000570016551046
+8.596991333796138,-1.262105082676526
+8.602903360909933,-1.3246477967115178
+8.60487663248166,-1.3874383162408304"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="2.0e-2" stroke-opacity="0.2"><polyline points="7.604876632481661,-0.38743831624083036
+7.602903360909933,-0.45022883577014383
+7.5969913337961374,-0.5127715498051355
+7.587163883210349,-0.5748196308265552
+7.573459793610292,-0.6361282034056854
+7.555933148776814,-0.6964553106157787
+7.534653118369911,-0.7555628689255087
+7.50970368494768,-0.8132176078059032
+7.481183312525523,-0.8691919903425465
+7.449204557983675,-0.923265111219826
+7.413893626856607,-0.9752235685333037
+7.375389875257449,-1.0248623059895206
+7.333845259903071,-1.0719854221695195
+7.289423738410349,-1.1164069436622421
+7.24230062223035,-1.1579515590166203
+7.192661884774134,-1.1964553106157787
+7.140703427460657,-1.2317662417428457
+7.086630306583376,-1.2637449962846947
+7.030655924046734,-1.2922653687068504
+6.973001185166339,-1.3172148021290822
+6.913893626856607,-1.338494832535984
+6.853566519646515,-1.3560214773694614
+6.792257947067386,-1.3697255669695192
+6.730209866045964,-1.3795530175553088
+6.667667152010973,-1.3854650446691021
+6.604876632481661,-1.3874383162408304
+6.542086112952347,-1.3854650446691021
+6.4795433989173565,-1.3795530175553088
+6.417495317895936,-1.3697255669695192
+6.356186745316805,-1.3560214773694614
+6.295859638106713,-1.338494832535984
+6.236752079796982,-1.3172148021290822
+6.179097340916588,-1.2922653687068504
+6.123122958379944,-1.2637449962846947
+6.069049837502664,-1.2317662417428457
+6.0170913801891865,-1.1964553106157787
+5.967452642732971,-1.1579515590166203
+5.920329526552972,-1.1164069436622421
+5.875908005060249,-1.0719854221695195
+5.834363389705872,-1.0248623059895206
+5.7958596381067125,-0.9752235685333037
+5.760548706979645,-0.9232651112198269
+5.7285699524377955,-0.8691919903425465
+5.700049580015641,-0.8132176078059032
+5.675100146593409,-0.7555628689255087
+5.653820116186506,-0.6964553106157787
+5.636293471353029,-0.6361282034056863
+5.622589381752972,-0.5748196308265552
+5.612761931167183,-0.5127715498051355
+5.606849904053388,-0.45022883577014383
+5.604876632481661,-0.38743831624083036
+5.606849904053388,-0.32464779671151733
+5.6127619311671815,-0.26210508267652655
+5.622589381752972,-0.20005700165510554
+5.636293471353029,-0.13874842907597618
+5.653820116186506,-7.842132186588335e-2
+5.675100146593409,-1.9313763556152885e-2
+5.700049580015641,3.834097532424163e-2
+5.728569952437796,9.431535786088441e-2
+5.760548706979645,0.14838847873816574
+5.795859638106712,0.2003469360516421
+5.834363389705871,0.24998567350785894
+5.875908005060249,0.2971087896878575
+5.920329526552972,0.34153031118058097
+5.967452642732971,0.38307492653495867
+6.0170913801891865,0.42157867813411665
+6.069049837502664,0.4568896092611845
+6.123122958379945,0.48886836380303267
+6.179097340916588,0.5173887362251892
+6.236752079796982,0.5423381696474205
+6.295859638106713,0.5636182000543228
+6.356186745316806,0.5811448448878003
+6.417495317895936,0.594848934487858
+6.479543398917356,0.6046763850736472
+6.542086112952347,0.6105884121874405
+6.604876632481661,0.6125616837591692
+6.6676671520109725,0.6105884121874405
+6.730209866045964,0.6046763850736472
+6.792257947067384,0.594848934487858
+6.853566519646515,0.5811448448878003
+6.9138936268566065,0.5636182000543228
+6.973001185166338,0.5423381696474205
+7.030655924046731,0.5173887362251897
+7.086630306583376,0.48886836380303267
+7.140703427460657,0.45688960926118405
+7.192661884774133,0.42157867813411665
+7.24230062223035,0.38307492653495867
+7.289423738410349,0.34153031118058186
+7.333845259903071,0.2971087896878579
+7.375389875257449,0.24998567350785894
+7.4138936268566065,0.20034693605164255
+7.449204557983675,0.14838847873816619
+7.4811833125255225,9.43153578608853e-2
+7.50970368494768,3.834097532424208e-2
+7.534653118369911,-1.9313763556152885e-2
+7.555933148776814,-7.842132186588335e-2
+7.573459793610292,-0.1387484290759753
+7.587163883210349,-0.20005700165510554
+7.5969913337961374,-0.2621050826765261
+7.602903360909933,-0.32464779671151733
+7.604876632481661,-0.38743831624083036"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" stroke-opacity="0.5"><polyline points="6.604876632481661,-1.3874383162408304
+6.5577701817720175,-1.386328191202801
+6.510768319163146,-1.3830002808439108
+6.4639754005440775,-1.377461973957388
+6.417495317895936,-1.3697255669695192
+6.371431268625756,-1.3598082366385071
+6.3258855264424305,-1.347732001917774
+6.280959214283511,-1.3335236750683759
+6.236752079796982,-1.3172148021290822
+6.193362273876551,-1.2988415928762755
+6.150886132742114,-1.2784448404291986
+6.109417964049253,-1.2560698306790226
+6.069049837502664,-1.2317662417428465
+6.029871380438382,-1.2055880336658547
+5.991969578828684,-1.1775933286165214
+5.955428584151477,-1.1478442818408618
+5.920329526552972,-1.1164069436622421
+5.886750334718471,-1.083351112833145
+5.8547655628512,-1.0487501815644826
+5.824446225143331,-1.0126809725765353
+5.7958596381067125,-0.9752235685333037
+5.76906927111339,-0.9364611342389626
+5.744134605477717,-0.8964797319912021
+5.721111002392966,-0.8553681305014038
+5.700049580015641,-0.8132176078059032
+5.680997099970374,-0.7701217486059209
+5.663995863527435,-0.726176236486122
+5.6490836176833295,-0.6814786414731344
+5.636293471353029,-0.6361282034056854
+5.625653821859894,-0.5902256115973437
+5.617188291886523,-0.5438727812810615
+5.610915677026481,-0.49717262733187617
+5.606849904053388,-0.45022883577014383
+5.6049999999999995,-0.40314563355265154
+5.605370072115928,-0.35602755716270273
+5.607959298748533,-0.308979220512986
+5.6127619311671815,-0.26210508267652655
+5.619767306326886,-0.21550921596142159
+5.6289598705429125,-0.16929507484428852
+5.6403192140238625,-0.12356526627545783
+5.653820116186506,-7.842132186588335e-2
+5.669432601651792,-3.396347246157383e-2
+5.687122006797679,9.709574393950149e-3
+5.706849056721045,5.2500853615084164e-2
+5.728569952437796,9.431535786088441e-2
+5.752236468127569,0.135060248475118
+5.777796058207099,0.1746450616113
+5.80519197399457,0.2129819090850531
+5.834363389705871,0.24998567350785894
+5.86524553750305,0.2855741972689425
+5.897769851295113,0.31966846494571666
+5.9318641189718875,0.35219277873777877
+5.967452642732971,0.38307492653495867
+6.004456407155777,0.41224634224625945
+6.0427932546295295,0.4396422580337309
+6.0823780677657115,0.46520184811326093
+6.123122958379945,0.48886836380303267
+6.164937462625744,0.5105892595197847
+6.2077287418468785,0.5303163094431502
+6.251401788702403,0.5480057145890371
+6.295859638106713,0.5636182000543228
+6.341003582516287,0.577119102216967
+6.386733391085117,0.5884784456979162
+6.43294753220225,0.5976710099139431
+6.479543398917356,0.6046763850736472
+6.526417536753815,0.6094790174922973
+6.573465873403532,0.6120682441249006
+6.620583949793481,0.61243831624083
+6.6676671520109725,0.6105884121874405
+6.714610943572705,0.606522639214349
+6.76131109752189,0.600250024354307
+6.807663927838171,0.591784494380935
+6.853566519646515,0.5811448448878003
+6.898916957713964,0.5683546985574992
+6.943614552726951,0.5534424527133948
+6.98756006484675,0.5364412162704557
+7.030655924046731,0.5173887362251897
+7.072806446742233,0.49632731384786277
+7.113918048232031,0.47330371076311284
+7.153899450479791,0.44836904512744
+7.192661884774133,0.42157867813411665
+7.230119288817365,0.3929920910974989
+7.26618849780531,0.36267275338962923
+7.300789429073974,0.33068798152235823
+7.333845259903072,0.2971087896878575
+7.3652825980816905,0.2620097320893531
+7.39503164485735,0.22546873741214624
+7.423026349906683,0.18756693580244788
+7.449204557983676,0.1483884787381653
+7.473508146919851,0.10802035219157702
+7.495883156670027,6.655218349871639e-2
+7.516279909117106,2.4076042364277406e-2
+7.534653118369911,-1.9313763556152885e-2
+7.550961991309206,-6.352089804268113e-2
+7.565170318158603,-0.10844721020160053
+7.577246552879337,-0.15399295238492527
+7.587163883210349,-0.20005700165510554
+7.594900290198218,-0.24653708430324794
+7.6004385970847395,-0.2933300029223167
+7.60376650744363,-0.340331865531188
+7.604876632481661,-0.38743831624083036"/></g><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-2" fill-opacity="0.3" stroke-opacity="0.5"><path d="M 7.6049,-1.3874 L 6.6049,-1.3874 A 1.0 1.0 -0.0 1 0 7.6049,-0.3874 L 7.6049,-1.3874"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="0.4" fill-opacity="1.0" text-anchor="middle"><text x="7.08" y="-3.32743831624083">True</text></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="0.6" fill-opacity="1.0" text-anchor="middle"><text x="5.499999999999999" y="-4.374876632481659">Large</text></g></g></g><g class="hud"></g></svg>
diff --git a/other/arrow.svg b/other/arrow.svg
--- a/other/arrow.svg
+++ b/other/arrow.svg
@@ -1,23 +1,58 @@
-<svg height="300.0" width="457.74043453182077" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.87 -0.5531722096956032 1.6775 1.0994222096956032"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9019165727170236" y="-0.5" width="1.4445949676731749" x="-0.6945949676731749"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.41499436302142045" x="-0.75">-0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.3248027057497182" x="-0.75">-0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.23461104847801584" x="-0.75">-0.3</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.14441939120631336" x="-0.75">-0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="5.4227733934611055e-2" x="-0.75">-0.1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-3.596392333709142e-2" x="-0.75">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.12615558060879384" x="-0.75">0.1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.21634723788049615" x="-0.75">0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.30653889515219834" x="-0.75">0.3</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.3967305524239009" x="-0.75">0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4869222096956032" x="-0.75">0.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.7201161454354009, 0.40191657271702363)"><polyline points="-0.7201161454354009,0.41691657271702365
--0.7201161454354009,0.3869165727170236"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.3117249154453213)"><polyline points="-0.7201161454354009,0.32672491544532134
--0.7201161454354009,0.2967249154453213"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.2215332581736189)"><polyline points="-0.7201161454354009,0.23653325817361892
--0.7201161454354009,0.2065332581736189"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.13134160090191654)"><polyline points="-0.7201161454354009,0.14634160090191656
--0.7201161454354009,0.11634160090191654"/></g><g transform="rotate(-90.0, -0.7201161454354009, 4.114994363021418e-2)"><polyline points="-0.7201161454354009,5.614994363021418e-2
--0.7201161454354009,2.614994363021418e-2"/></g><g transform="rotate(-90.0, -0.7201161454354009, -4.904171364148813e-2)"><polyline points="-0.7201161454354009,-3.404171364148813e-2
--0.7201161454354009,-6.404171364148813e-2"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.13923337091319066)"><polyline points="-0.7201161454354009,-0.12423337091319066
--0.7201161454354009,-0.15423337091319067"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.22942502818489297)"><polyline points="-0.7201161454354009,-0.21442502818489295
--0.7201161454354009,-0.24442502818489298"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.3196166854565953)"><polyline points="-0.7201161454354009,-0.30461668545659526
--0.7201161454354009,-0.3346166854565953"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.4098083427282976)"><polyline points="-0.7201161454354009,-0.39480834272829757
--0.7201161454354009,-0.4248083427282976"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.5)"><polyline points="-0.7201161454354009,-0.485
--0.7201161454354009,-0.515"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9019165727170236" y="-0.5" width="3.8522532471284565e-3" x="-0.7080778540381245"/></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.6945949676731749">-0.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.5501354709058575">-0.4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.40567597413853984">-0.3</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.2612164773712222">-0.2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.11675698060390471">-0.1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="2.770251616341257e-2">0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.1721620129307302">0.1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.3166215096980478">0.2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.4610810064653652">0.3</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.6055405032326826">0.4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.75">0.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.44081736189402476
--0.6945949676731749,0.41081736189402474"/><polyline points="-0.5501354709058575,0.44081736189402476
--0.5501354709058575,0.41081736189402474"/><polyline points="-0.40567597413853984,0.44081736189402476
--0.40567597413853984,0.41081736189402474"/><polyline points="-0.2612164773712222,0.44081736189402476
--0.2612164773712222,0.41081736189402474"/><polyline points="-0.11675698060390471,0.44081736189402476
--0.11675698060390471,0.41081736189402474"/><polyline points="2.770251616341257e-2,0.44081736189402476
-2.770251616341257e-2,0.41081736189402474"/><polyline points="0.1721620129307302,0.44081736189402476
-0.1721620129307302,0.41081736189402474"/><polyline points="0.3166215096980478,0.44081736189402476
-0.3166215096980478,0.41081736189402474"/><polyline points="0.4610810064653652,0.44081736189402476
-0.4610810064653652,0.41081736189402474"/><polyline points="0.6055405032326826,0.44081736189402476
-0.6055405032326826,0.41081736189402474"/><polyline points="0.75,0.44081736189402476
-0.75,0.41081736189402474"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.6076662908680612e-3" y="0.41093573844419395" width="1.4445949676731749" x="-0.6945949676731749"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-41.70388402745369, -0.6223652192895162, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-40.703991576050946, -0.6223652192895162, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-39.33034350353968, -0.6223652192895162, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-37.32821468040517, -0.6223652192895162, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-34.14934249468909, -0.6223652192895162, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-28.382403784146327, -0.6223652192895162, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-15.274030281041822, -0.6223652192895162, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(24.91711526233156, -0.6223652192895162, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(85.25243231067932, -0.6223652192895162, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(107.439663564573, -0.6223652192895162, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-46.89925433618114, -0.47790572252219865, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-45.41219274140233, -0.47790572252219865, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-43.26655332833368, -0.47790572252219865, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-39.913529548149384, -0.47790572252219865, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-33.99914492987854, -0.47790572252219865, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-21.321176713227626, -0.47790572252219865, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(13.364611169993305, -0.47790572252219865, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(70.26081916410517, -0.47790572252219865, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(96.08437785000453, -0.47790572252219865, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(106.05509143504601, -0.47790572252219865, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-53.3543508353797, -0.33344622575488114, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-51.23448009554123, -0.33344622575488114, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-48.01278750418334, -0.33344622575488114, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-42.58049078334366, -0.33344622575488114, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-31.827446576673108, -0.33344622575488114, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-5.440332031005506, -0.33344622575488114, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(47.1210963966615, -0.33344622575488114, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(80.53767779197439, -0.33344622575488114, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(93.73139699916045, -0.33344622575488114, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(100.06068979532297, -0.33344622575488114, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-61.480951599569366, -0.18898672898756352, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-58.67008724249424, -0.18898672898756352, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-54.17002461487118, -0.18898672898756352, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-45.97102193107917, -0.18898672898756352, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-27.930948956080037, -0.18898672898756352, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(14.445942279113961, -0.18898672898756352, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(58.95370855020484, -0.18898672898756352, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(78.38768602098031, -0.18898672898756352, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(87.0721562906961, -0.18898672898756352, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(91.775265785145, -0.18898672898756352, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-71.63155263230772, -4.452723222024613e-2, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-68.30375886013567, -4.452723222024613e-2, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-62.713434447769245, -4.452723222024613e-2, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-51.74335201662478, -4.452723222024613e-2, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-25.46334506187161, -4.452723222024613e-2, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(25.352317626939044, -4.452723222024613e-2, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(58.53902007564373, -4.452723222024613e-2, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(72.03510627877053, -4.452723222024613e-2, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(78.57121322367863, -4.452723222024613e-2, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(82.33198654554482, -4.452723222024613e-2, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-83.72582919707884, 9.993226454707138e-2, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-80.37960270065743, 9.993226454707138e-2, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-74.55784459620769, 9.993226454707138e-2, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-62.392645475723924, 9.993226454707138e-2, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-30.325850500388558, 9.993226454707138e-2, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(25.463345061871618, 9.993226454707138e-2, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(53.34825221466397, 9.993226454707138e-2, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(64.18052078566551, 9.993226454707138e-2, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(69.52530867630297, 9.993226454707138e-2, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(72.65691141186669, 9.993226454707138e-2, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-96.84875031477206, 0.244391761314389, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-94.10747809603637, 0.244391761314389, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-89.31668823842175, 0.244391761314389, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-79.0898362236076, 0.244391761314389, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-48.89810671661513, 0.244391761314389, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(16.431113233075703, 0.244391761314389, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(45.97102193107918, 0.244391761314389, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(56.03475263569897, 0.244391761314389, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(60.77115498628979, 0.244391761314389, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(63.488583985830445, 0.244391761314389, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-109.476575498932, 0.3888512580817063, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-107.65012421993012, 0.3888512580817063, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-104.57421619803874, 0.3888512580817063, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-98.3658861240326, 0.3888512580817063, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-80.5376777919744, 0.3888512580817063, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-10.304846468766057, 0.3888512580817063, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(36.3843518158359, 0.3888512580817063, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(48.01278750418334, 0.3888512580817063, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(52.73359809902285, 0.3888512580817063, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(55.2568198416964, 0.3888512580817063, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-120.39004059367852, 0.5333107548490243, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-119.3548748641938, 0.5333107548490243, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-117.72207677286723, 0.5333107548490243, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-114.77180709318333, 0.5333107548490243, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-107.91023110297346, 0.5333107548490243, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-78.88016563239884, 0.5333107548490243, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(18.07717429682483, 0.5333107548490243, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(39.57646251047537, 0.5333107548490243, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(45.412192741402315, 0.5333107548490243, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(48.061152646549644, 0.5333107548490243, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-129.20442853819998, 0.6777702516163411, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-128.6756131139764, 0.6777702516163411, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-127.8990823601365, 0.6777702516163411, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-126.64820118726841, 0.6777702516163411, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-124.30095672615316, 0.6777702516163411, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-118.3399495893263, 0.6777702516163411, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-81.6026974133102, 0.6777702516163411, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(25.916669828467207, 0.6777702516163411, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(38.15385704023621, 0.6777702516163411, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(41.70388402745369, 0.6777702516163411, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, -0.4549041713641486) scale(5.0e-2)"/></g></g><g></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="437.95328496377425" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7326385238427425 -0.5130334454148697 1.4754917437632011 1.0107185819272355" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}{
+  .arrow g {
+    fill: #0d0d0d;
+    stroke: #0d0d0d;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .arrow g {
+    fill: #f0f0f0;
+    stroke: #f0f0f0;
+  }
+}</style><g class="chart"><g class="arrow"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-41.70388402745369, -0.5098040106756523, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-40.703991576050946, -0.5098040106756523, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-39.33034350353967, -0.5098040106756523, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-37.32821468040517, -0.5098040106756523, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-34.14934249468909, -0.5098040106756523, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-28.38240378414633, -0.5098040106756523, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-15.274030281041826, -0.5098040106756523, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(24.917115262331563, -0.5098040106756523, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(85.25243231067934, -0.5098040106756523, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(107.43966356457298, -0.5098040106756523, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-46.89925433618114, -0.38295264555199554, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-45.41219274140232, -0.38295264555199554, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-43.26655332833368, -0.38295264555199554, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-39.913529548149384, -0.38295264555199554, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-33.99914492987854, -0.38295264555199554, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-21.321176713227626, -0.38295264555199554, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(13.364611169993305, -0.38295264555199554, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(70.26081916410517, -0.38295264555199554, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(96.08437785000453, -0.38295264555199554, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(106.05509143504601, -0.38295264555199554, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-53.3543508353797, -0.2561012804283387, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-51.23448009554123, -0.2561012804283387, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-48.012787504183336, -0.2561012804283387, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-42.58049078334366, -0.2561012804283387, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-31.827446576673104, -0.2561012804283387, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-5.440332031005506, -0.2561012804283387, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(47.1210963966615, -0.2561012804283387, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(80.53767779197439, -0.2561012804283387, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(93.73139699916044, -0.2561012804283387, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(100.06068979532297, -0.2561012804283387, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-61.48095159956936, -0.12924991530468188, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-58.67008724249424, -0.12924991530468188, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-54.17002461487118, -0.12924991530468188, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-45.97102193107917, -0.12924991530468188, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-27.930948956080037, -0.12924991530468188, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(14.445942279113961, -0.12924991530468188, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(58.95370855020484, -0.12924991530468188, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(78.38768602098031, -0.12924991530468188, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(87.0721562906961, -0.12924991530468188, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(91.775265785145, -0.12924991530468188, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-71.63155263230772, -2.398550181025083e-3, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-68.30375886013567, -2.398550181025083e-3, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-62.713434447769245, -2.398550181025083e-3, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-51.74335201662478, -2.398550181025083e-3, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-25.463345061871607, -2.398550181025083e-3, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(25.352317626939044, -2.398550181025083e-3, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(58.539020075643705, -2.398550181025083e-3, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(72.03510627877053, -2.398550181025083e-3, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(78.57121322367863, -2.398550181025083e-3, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(82.33198654554482, -2.398550181025083e-3, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-83.72582919707884, 0.12445281494263172, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-80.37960270065743, 0.12445281494263172, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-74.55784459620769, 0.12445281494263172, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-62.392645475723924, 0.12445281494263172, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-30.325850500388558, 0.12445281494263172, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(25.463345061871614, 0.12445281494263172, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(53.34825221466397, 0.12445281494263172, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(64.18052078566551, 0.12445281494263172, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(69.52530867630297, 0.12445281494263172, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(72.65691141186667, 0.12445281494263172, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-96.84875031477206, 0.25130418006628874, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-94.10747809603637, 0.25130418006628874, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-89.31668823842175, 0.25130418006628874, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-79.0898362236076, 0.25130418006628874, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-48.89810671661513, 0.25130418006628874, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(16.431113233075703, 0.25130418006628874, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(45.97102193107918, 0.25130418006628874, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(56.03475263569897, 0.25130418006628874, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(60.77115498628979, 0.25130418006628874, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(63.48858398583044, 0.25130418006628874, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-109.476575498932, 0.3781555451899452, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-107.65012421993012, 0.3781555451899452, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-104.57421619803874, 0.3781555451899452, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-98.3658861240326, 0.3781555451899452, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-80.5376777919744, 0.3781555451899452, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-10.304846468766057, 0.3781555451899452, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(36.3843518158359, 0.3781555451899452, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(48.012787504183336, 0.3781555451899452, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(52.73359809902285, 0.3781555451899452, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(55.2568198416964, 0.3781555451899452, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-120.39004059367852, 0.5050069103136021, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-119.3548748641938, 0.5050069103136021, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-117.72207677286721, 0.5050069103136021, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-114.77180709318333, 0.5050069103136021, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-107.91023110297346, 0.5050069103136021, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-78.88016563239884, 0.5050069103136021, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(18.07717429682483, 0.5050069103136021, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(39.57646251047537, 0.5050069103136021, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(45.412192741402315, 0.5050069103136021, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(48.061152646549644, 0.5050069103136021, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-129.20442853819998, 0.6318582754372586, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-128.6756131139764, 0.6318582754372586, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-127.8990823601365, 0.6318582754372586, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-126.64820118726841, 0.6318582754372586, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-124.30095672615316, 0.6318582754372586, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-118.3399495893263, 0.6318582754372586, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-81.6026974133102, 0.6318582754372586, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(25.916669828467207, 0.6318582754372586, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(38.15385704023621, 0.6318582754372586, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(41.70388402745369, 0.6318582754372586, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, -0.4280649927055412) scale(5.0e-2)"/></g></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5816853993455909" width="1.285375238178084" y="-0.5" height="0.9058421129540768"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6070556723703223, 0.3762130040177428)"><polyline points="-0.6070556723703223,0.39121300401774284
+-0.6070556723703223,0.3612130040177428"/></g><g transform="rotate(-90.0, -0.6070556723703223, 0.29155216225739716)"><polyline points="-0.6070556723703223,0.3065521622573972
+-0.6070556723703223,0.27655216225739715"/></g><g transform="rotate(-90.0, -0.6070556723703223, 0.20689132049705145)"><polyline points="-0.6070556723703223,0.22189132049705146
+-0.6070556723703223,0.19189132049705143"/></g><g transform="rotate(-90.0, -0.6070556723703223, 0.12223047873670573)"><polyline points="-0.6070556723703223,0.13723047873670574
+-0.6070556723703223,0.10723047873670573"/></g><g transform="rotate(-90.0, -0.6070556723703223, 3.7569636976360066e-2)"><polyline points="-0.6070556723703223,5.2569636976360065e-2
+-0.6070556723703223,2.2569636976360066e-2"/></g><g transform="rotate(-90.0, -0.6070556723703223, -4.709120478398565e-2)"><polyline points="-0.6070556723703223,-3.209120478398565e-2
+-0.6070556723703223,-6.209120478398565e-2"/></g><g transform="rotate(-90.0, -0.6070556723703223, -0.13175204654433137)"><polyline points="-0.6070556723703223,-0.11675204654433137
+-0.6070556723703223,-0.14675204654433138"/></g><g transform="rotate(-90.0, -0.6070556723703223, -0.21641288830467698)"><polyline points="-0.6070556723703223,-0.20141288830467696
+-0.6070556723703223,-0.231412888304677"/></g><g transform="rotate(-90.0, -0.6070556723703223, -0.3010737300650228)"><polyline points="-0.6070556723703223,-0.2860737300650228
+-0.6070556723703223,-0.3160737300650228"/></g><g transform="rotate(-90.0, -0.6070556723703223, -0.3857345718253685)"><polyline points="-0.6070556723703223,-0.3707345718253685
+-0.6070556723703223,-0.40073457182536854"/></g><g transform="rotate(-90.0, -0.6070556723703223, -0.47039541358571413)"><polyline points="-0.6070556723703223,-0.4553954135857141
+-0.6070556723703223,-0.48539541358571414"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.228378837455226e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.6375" y="0.3878538697597904">-0.50</text><text x="-0.6375" y="0.3031930279994447">-0.40</text><text x="-0.6375" y="0.21853218623909898">-0.30</text><text x="-0.6375" y="0.13387134447875332">-0.20</text><text x="-0.6375" y="4.92105027184076e-2">-0.10</text><text x="-0.6375" y="-3.545033904193806e-2"> 0.00</text><text x="-0.6375" y="-0.12011118080228378"> 0.10</text><text x="-0.6375" y="-0.2047720225626295"> 0.20</text><text x="-0.6375" y="-0.2894328643229752"> 0.30</text><text x="-0.6375" y="-0.37409370608332093"> 0.40</text><text x="-0.6375" y="-0.45875454784366665"> 0.50</text></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5935248600904656" width="3.3827030699641325e-3" y="-0.472088630420921" height="0.8499948512738706"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5732296932374806,0.4462403654821805
+-0.5732296932374806,0.41624036548218046"/><polyline points="-0.44637832811382394,0.4462403654821805
+-0.44637832811382394,0.41624036548218046"/><polyline points="-0.31952696299016703,0.4462403654821805
+-0.31952696299016703,0.41624036548218046"/><polyline points="-0.19267559786651023,0.4462403654821805
+-0.19267559786651023,0.41624036548218046"/><polyline points="-6.582423274285343e-2,0.4462403654821805
+-6.582423274285343e-2,0.41624036548218046"/><polyline points="6.102713238080337e-2,0.4462403654821805
+6.102713238080337e-2,0.41624036548218046"/><polyline points="0.18787849750446006,0.4462403654821805
+0.18787849750446006,0.41624036548218046"/><polyline points="0.31472986262811686,0.4462403654821805
+0.31472986262811686,0.41624036548218046"/><polyline points="0.4415812277517739,0.4462403654821805
+0.4415812277517739,0.41624036548218046"/><polyline points="0.5684325928754306,0.4462403654821805
+0.5684325928754306,0.41624036548218046"/><polyline points="0.6952839579990873,0.4462403654821805
+0.6952839579990873,0.41624036548218046"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.228378837455226e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5732296932374806" y="0.485">-0.50</text><text x="-0.44637832811382394" y="0.485">-0.40</text><text x="-0.31952696299016703" y="0.485">-0.30</text><text x="-0.19267559786651023" y="0.485">-0.20</text><text x="-6.582423274285343e-2" y="0.485">-0.10</text><text x="6.102713238080337e-2" y="0.485"> 0.00</text><text x="0.18787849750446006" y="0.485"> 0.10</text><text x="0.31472986262811686" y="0.485"> 0.20</text><text x="0.4415812277517739" y="0.485"> 0.30</text><text x="0.5684325928754306" y="0.485"> 0.40</text><text x="0.6952839579990873" y="0.485"> 0.50</text></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5749210447724628" width="1.271896354306532" y="0.41430819713011136" height="3.386433670413802e-3"/></g></g></g></g></svg>
diff --git a/other/bar.svg b/other/bar.svg
--- a/other/bar.svg
+++ b/other/bar.svg
@@ -1,29 +1,53 @@
-<svg height="300.0" width="398.2301616785188" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.8200000000000001 -0.5531722096956032 1.59 1.1977997798797322"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9019165727170236" y="-0.5" width="0.9952977709753474" x="-0.7118270128238589"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,0.40191657271702363
-0.2834707581514886,0.40191657271702363"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,0.28917700112739575
-0.2834707581514886,0.28917700112739575"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,0.17643742953776775
-0.2834707581514886,0.17643742953776775"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,6.369785794813976e-2
-0.2834707581514886,6.369785794813976e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,-4.904171364148824e-2
-0.2834707581514886,-4.904171364148824e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,-0.16178128523111612
-0.2834707581514886,-0.16178128523111612"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,-0.2745208568207441
-0.2834707581514886,-0.2745208568207441"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,-0.387260428410372
-0.2834707581514886,-0.387260428410372"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,-0.5
-0.2834707581514886,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4149943630214205" x="-0.75">-4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.30225479143179257" x="-0.75">-2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.18951521984216457" x="-0.75">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="7.677564825253663e-2" x="-0.75">2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-3.596392333709142e-2" x="-0.75">4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.1487034949267193" x="-0.75">6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.2614430665163472" x="-0.75">8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.3741826381059751" x="-0.75">10</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4869222096956032" x="-0.75">12</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.7294106067777567, 0.40191657271702363)"><polyline points="-0.7294106067777567,0.41691657271702365
--0.7294106067777567,0.3869165727170236"/></g><g transform="rotate(-90.0, -0.7294106067777567, 0.28917700112739575)"><polyline points="-0.7294106067777567,0.30417700112739576
--0.7294106067777567,0.27417700112739574"/></g><g transform="rotate(-90.0, -0.7294106067777567, 0.17643742953776775)"><polyline points="-0.7294106067777567,0.19143742953776777
--0.7294106067777567,0.16143742953776774"/></g><g transform="rotate(-90.0, -0.7294106067777567, 6.369785794813976e-2)"><polyline points="-0.7294106067777567,7.869785794813976e-2
--0.7294106067777567,4.869785794813976e-2"/></g><g transform="rotate(-90.0, -0.7294106067777567, -4.904171364148824e-2)"><polyline points="-0.7294106067777567,-3.404171364148824e-2
--0.7294106067777567,-6.404171364148824e-2"/></g><g transform="rotate(-90.0, -0.7294106067777567, -0.16178128523111612)"><polyline points="-0.7294106067777567,-0.1467812852311161
--0.7294106067777567,-0.17678128523111614"/></g><g transform="rotate(-90.0, -0.7294106067777567, -0.2745208568207441)"><polyline points="-0.7294106067777567,-0.2595208568207441
--0.7294106067777567,-0.28952085682074413"/></g><g transform="rotate(-90.0, -0.7294106067777567, -0.387260428410372)"><polyline points="-0.7294106067777567,-0.372260428410372
--0.7294106067777567,-0.402260428410372"/></g><g transform="rotate(-90.0, -0.7294106067777567, -0.5)"><polyline points="-0.7294106067777567,-0.485
--0.7294106067777567,-0.515"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9019165727170236" y="-0.5" width="2.6541273892675132e-3" x="-0.7211164586862954"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.6620621242750915" transform="rotate(-45.0, -0.6620621242750915, 0.5)">row 1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.5625323471775566" transform="rotate(-45.0, -0.5625323471775566, 0.5)">row 2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.46300257008002194" transform="rotate(-45.0, -0.46300257008002194, 0.5)">row 3</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.3634727929824872" transform="rotate(-45.0, -0.3634727929824872, 0.5)">row 4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.2639430158849524" transform="rotate(-45.0, -0.2639430158849524, 0.5)">row 5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.16441323878741765" transform="rotate(-45.0, -0.16441323878741765, 0.5)">row 6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-6.48834616898828e-2" transform="rotate(-45.0, -6.48834616898828e-2, 0.5)">row 7</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="3.464631540765173e-2" transform="rotate(-45.0, 3.464631540765173e-2, 0.5)">row 8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.13417609250518647" transform="rotate(-45.0, 0.13417609250518647, 0.5)">row 9</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.23370586960272122" transform="rotate(-45.0, 0.23370586960272122, 0.5)">row 10</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.6620621242750915,0.4408173618940248
--0.6620621242750915,0.4108173618940248"/><polyline points="-0.5625323471775566,0.4408173618940248
--0.5625323471775566,0.4108173618940248"/><polyline points="-0.46300257008002194,0.4408173618940248
--0.46300257008002194,0.4108173618940248"/><polyline points="-0.3634727929824872,0.4408173618940248
--0.3634727929824872,0.4108173618940248"/><polyline points="-0.2639430158849524,0.4408173618940248
--0.2639430158849524,0.4108173618940248"/><polyline points="-0.16441323878741765,0.4408173618940248
--0.16441323878741765,0.4108173618940248"/><polyline points="-6.48834616898828e-2,0.4408173618940248
--6.48834616898828e-2,0.4108173618940248"/><polyline points="3.464631540765173e-2,0.4408173618940248
-3.464631540765173e-2,0.4108173618940248"/><polyline points="0.13417609250518647,0.4408173618940248
-0.13417609250518647,0.4108173618940248"/><polyline points="0.23370586960272122,0.4408173618940248
-0.23370586960272122,0.4108173618940248"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.6076662908681167e-3" y="0.4109357384441939" width="0.9952977709753474" x="-0.7118270128238589"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#b05929" stroke-width="2.0e-3" stroke="#b05929"><rect height="5.6369785794814e-2" y="0.12006764374295376" width="3.981191083901392e-2" x="-0.7018740351141054"/><rect height="0.112739571589628" y="6.369785794813976e-2" width="3.981191083901381e-2" x="-0.6023442580165705"/><rect height="0.16910935738444194" y="7.328072153325815e-3" width="3.981191083901392e-2" x="-0.502814480919036"/><rect height="0.2818489289740699" y="-0.10541149943630213" width="3.9811910839013975e-2" x="-0.4032847038215012"/><rect height="0.4509582863585119" y="-0.2745208568207441" width="3.9811910839013975e-2" x="-0.3037549267239665"/><rect height="0.0" y="0.17643742953776775" width="3.981191083901392e-2" x="-0.20422514962643168"/><rect height="0.112739571589628" y="0.17643742953776775" width="3.981191083901425e-2" x="-0.10469537252889705"/><rect height="0.6200676437429539" y="-0.4436302142051861" width="3.98119108390137e-2" x="-5.165595431362191e-3"/><rect height="0.112739571589628" y="6.369785794813976e-2" width="3.981191083901414e-2" x="9.436418166617233e-2"/><rect height="5.6369785794814e-2" y="0.12006764374295376" width="3.981191083901403e-2" x="0.19389395876370719"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="2.0e-3" stroke="#a6cfe3"><rect height="5.6369785794814e-2" y="0.12006764374295376" width="3.981191083901392e-2" x="-0.6620621242750915"/><rect height="0.112739571589628" y="6.369785794813976e-2" width="3.981191083901392e-2" x="-0.5625323471775567"/><rect height="0.16910935738444194" y="7.328072153325815e-3" width="3.981191083901392e-2" x="-0.4630025700800221"/><rect height="0.225479143179256" y="-4.904171364148824e-2" width="3.981191083901375e-2" x="-0.36347279298248725"/><rect height="0.2818489289740699" y="-0.10541149943630213" width="3.981191083901381e-2" x="-0.2639430158849525"/><rect height="0.3382187147688839" y="-0.16178128523111612" width="3.981191083901381e-2" x="-0.16441323878741776"/><rect height="0.3945885005636979" y="-0.21815107102593012" width="3.981191083901359e-2" x="-6.48834616898828e-2"/><rect height="0.4509582863585119" y="-0.2745208568207441" width="3.981191083901403e-2" x="3.464631540765151e-2"/><rect height="0.5073280721533258" y="-0.330890642615558" width="3.981191083901392e-2" x="0.13417609250518647"/><rect height="0.5636978579481398" y="-0.387260428410372" width="3.981191083901381e-2" x="0.23370586960272122"/></g><g></g><g text-anchor="middle" fill-opacity="1.0" fill="#b05929" stroke-width="0.0" stroke="none" font-size="4.0e-2"><text y="9.075535512965055e-2" x="-0.6819680796945985">1</text><text y="3.43855693348365e-2" x="-0.5824383025970638">2</text><text y="-2.19842164599775e-2" x="-0.482908525499529">3</text><text y="-0.1347237880496054" x="-0.3833787484019942">5</text><text y="-0.30383314543404727" x="-0.28384897130445946">8</text><text y="0.1471251409244645" x="-0.18431919420692466">0</text><text y="0.3624577226606539" x="-8.478941710938992e-2">-2</text><text y="-0.47294250281848926" x="1.4740359988144824e-2">11</text><text y="3.43855693348365e-2" x="0.11427013708567912">2</text><text y="9.075535512965055e-2" x="0.21379991418321442">1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#a6cfe3" stroke-width="0.0" stroke="none" font-size="4.0e-2"><text y="9.075535512965055e-2" x="-0.6421561688555846">1</text><text y="3.43855693348365e-2" x="-0.5426263917580497">2</text><text y="-2.19842164599775e-2" x="-0.4430966146605151">3</text><text y="-7.835400225479139e-2" x="-0.34356683756298034">4</text><text y="-0.1347237880496054" x="-0.2440370604654456">5</text><text y="-0.19109357384441938" x="-0.14450728336791085">6</text><text y="-0.24746335963923338" x="-4.497750627037611e-2">7</text><text y="-0.30383314543404727" x="5.455227082715863e-2">8</text><text y="-0.3602029312288614" x="0.15408204792469338">9</text><text y="-0.41657271702367527" x="0.2536118250222281">10</text></g><g></g><g fill-opacity="0.0" stroke-opacity="1.0" fill="#0d0d0d" stroke-width="4.0e-3" stroke="#0d0d0d"><rect height="0.24820744081172497" y="-0.1388601712811144" width="0.3187606994510377" x="0.424603982075793"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.8e-2"><text y="5.0542308989460605e-2" x="0.45114525596846855">column 2</text></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="8.0e-4" stroke="#a6cfe3"><rect height="4.3291995490417234e-2" y="2.0237912146168657e-2" width="3.1849528671210825e-2" x="0.6847084662240173"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.8e-2"><text y="-6.273841254379753e-2" x="0.45114525596846855">column 1</text></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#b05929" stroke-width="8.0e-4" stroke="#b05929"><rect height="4.329199549041718e-2" y="-9.304280938708964e-2" width="3.1849528671210825e-2" x="0.6847084662240173"/></g><g></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="460.1715110159581" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7238932594876959 -0.4916435603742647 1.4738932594876957 0.9608764716227184" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"><g class="barchart"><g fill="rgb(2%, 29%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="5.0e-3" fill-opacity="0.7" stroke-opacity="1.0"><rect x="-0.6024960664610737" width="4.259550632513054e-2" y="7.162298599341055e-2" height="4.961684064479793e-2"/><rect x="-0.49600730064824716" width="4.259550632513054e-2" y="2.200614534861267e-2" height="9.923368128959581e-2"/><rect x="-0.38951853483542087" width="4.2595506325130594e-2" y="-2.761069529618526e-2" height="0.14885052193439374"/><rect x="-0.28302976902259436" width="4.259550632513054e-2" y="-0.12684437658578107" height="0.24808420322398955"/><rect x="-0.17654100320976795" width="4.259550632513065e-2" y="-0.2756948985201749" height="0.3969347251583834"/><rect x="-7.005223739694144e-2" width="4.259550632513054e-2" y="0.12123982663820848" height="0.0"/><rect x="3.643652841588507e-2" width="4.259550632513054e-2" y="0.12123982663820848" height="9.923368128959584e-2"/><rect x="0.14292529422871136" width="4.259550632513043e-2" y="-0.42454542045456867" height="0.5457852470927771"/><rect x="0.2494140600415381" width="4.259550632513065e-2" y="2.200614534861267e-2" height="9.923368128959581e-2"/><rect x="0.3559028258543645" width="4.259550632513065e-2" y="7.162298599341055e-2" height="4.961684064479793e-2"/></g><g fill="rgb(66%, 7%, 55%)" stroke="rgb(66%, 7%, 55%)" stroke-width="5.0e-3" fill-opacity="0.7" stroke-opacity="1.0"><rect x="-0.5599005601359431" width="4.259550632513065e-2" y="7.162298599341055e-2" height="4.961684064479793e-2"/><rect x="-0.4534117943231166" width="4.2595506325130594e-2" y="2.200614534861267e-2" height="9.923368128959581e-2"/><rect x="-0.3469230285102903" width="4.259550632513065e-2" y="-2.761069529618526e-2" height="0.14885052193439374"/><rect x="-0.24043426269746382" width="4.259550632513054e-2" y="-7.722753594098325e-2" height="0.19846736257919173"/><rect x="-0.1339454968846373" width="4.259550632513054e-2" y="-0.12684437658578107" height="0.24808420322398955"/><rect x="-2.7456731071810903e-2" width="4.259550632513054e-2" y="-0.17646121723057906" height="0.29770104386878754"/><rect x="7.903203474101561e-2" width="4.259550632513043e-2" y="-0.22607805787537694" height="0.3473178845135854"/><rect x="0.1855208005538418" width="4.259550632513087e-2" y="-0.2756948985201749" height="0.3969347251583834"/><rect x="0.29200956636666875" width="4.259550632513054e-2" y="-0.3253117391649728" height="0.4465515658031813"/><rect x="0.39849833217949515" width="4.259550632513065e-2" y="-0.3749285798097708" height="0.49616840644797927"/></g><g fill="rgb(2%, 29%, 48%)" stroke="none" stroke-width="0.0" font-size="2.555730379507835e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5811983132985085" y="4.5822228858115654e-2">1.0</text><text x="-0.47470954748568195" y="-3.7946117866822227e-3">2.0</text><text x="-0.36822078167285555" y="-5.3411452431480155e-2">3.0</text><text x="-0.26173201586002903" y="-0.15264513372107602">5.0</text><text x="-0.15524325004720263" y="-0.30149565565546976">8.0</text><text x="-4.8754484234376116e-2" y="9.543906950291359e-2">0.0</text><text x="5.7734281578450286e-2" y="0.2849754007660416">-2.0</text><text x="0.1642230473912767" y="-0.4503461775898634">11</text><text x="0.2707118132041032" y="-3.7946117866822227e-3">2.0</text><text x="0.3772005790169298" y="4.5822228858115654e-2">1.0</text></g><g fill="rgb(66%, 7%, 55%)" stroke="none" stroke-width="0.0" font-size="2.555730379507835e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5386028069733778" y="4.5822228858115654e-2">1.0</text><text x="-0.43211404116055135" y="-3.7946117866822227e-3">2.0</text><text x="-0.32562527534772495" y="-5.3411452431480155e-2">3.0</text><text x="-0.2191365095348985" y="-0.10302829307627814">4.0</text><text x="-0.11264774372207198" y="-0.15264513372107602">5.0</text><text x="-6.158977909245578e-3" y="-0.202261974365874">6.0</text><text x="0.10032978790358071" y="-0.2518788150106719">7.0</text><text x="0.20681855371640745" y="-0.30149565565546976">8.0</text><text x="0.31330731952923385" y="-0.35111249630026764">9.0</text><text x="0.4197960853420605" y="-0.4007293369450655">10</text></g></g></g><g class="hud"><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6344426962049217, 0.31970718921740016)"><polyline points="-0.6344426962049217,0.33470718921740017
+-0.6344426962049217,0.30470718921740014"/></g><g transform="rotate(-90.0, -0.6344426962049217, 0.22047350792780432)"><polyline points="-0.6344426962049217,0.2354735079278043
+-0.6344426962049217,0.20547350792780433"/></g><g transform="rotate(-90.0, -0.6344426962049217, 0.12123982663820848)"><polyline points="-0.6344426962049217,0.1362398266382085
+-0.6344426962049217,0.10623982663820848"/></g><g transform="rotate(-90.0, -0.6344426962049217, 2.200614534861267e-2)"><polyline points="-0.6344426962049217,3.700614534861267e-2
+-0.6344426962049217,7.006145348612672e-3"/></g><g transform="rotate(-90.0, -0.6344426962049217, -7.722753594098325e-2)"><polyline points="-0.6344426962049217,-6.222753594098325e-2
+-0.6344426962049217,-9.222753594098325e-2"/></g><g transform="rotate(-90.0, -0.6344426962049217, -0.17646121723057906)"><polyline points="-0.6344426962049217,-0.16146121723057905
+-0.6344426962049217,-0.19146121723057907"/></g><g transform="rotate(-90.0, -0.6344426962049217, -0.2756948985201749)"><polyline points="-0.6344426962049217,-0.2606948985201749
+-0.6344426962049217,-0.29069489852017494"/></g><g transform="rotate(-90.0, -0.6344426962049217, -0.3749285798097708)"><polyline points="-0.6344426962049217,-0.3599285798097708
+-0.6344426962049217,-0.3899285798097708"/></g><g transform="rotate(-90.0, -0.6344426962049217, -0.47416226109936654)"><polyline points="-0.6344426962049217,-0.45916226109936653
+-0.6344426962049217,-0.48916226109936656"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.549625527094216e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.66" y="0.3306228941592557">-4.0</text><text x="-0.66" y="0.23138921286965985">-2.0</text><text x="-0.66" y="0.132155531580064"> 0.0</text><text x="-0.66" y="3.2921850290468235e-2"> 2.0</text><text x="-0.66" y="-6.631183099912769e-2"> 4.0</text><text x="-0.66" y="-0.1655455122887235"> 6.0</text><text x="-0.66" y="-0.26477919357831936"> 8.0</text><text x="-0.66" y="-0.3640128748679152">10.0</text><text x="-0.66" y="-0.463246556157511">12.0</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.6131449430423563,0.31970718921740016
+0.45174271508590846,0.31970718921740016"/><polyline points="-0.6131449430423563,0.22047350792780432
+0.45174271508590846,0.22047350792780432"/><polyline points="-0.6131449430423563,0.12123982663820848
+0.45174271508590846,0.12123982663820848"/><polyline points="-0.6131449430423563,2.200614534861267e-2
+0.45174271508590846,2.200614534861267e-2"/><polyline points="-0.6131449430423563,-7.722753594098325e-2
+0.45174271508590846,-7.722753594098325e-2"/><polyline points="-0.6131449430423563,-0.17646121723057906
+0.45174271508590846,-0.17646121723057906"/><polyline points="-0.6131449430423563,-0.2756948985201749
+0.45174271508590846,-0.2756948985201749"/><polyline points="-0.6131449430423563,-0.3749285798097708
+0.45174271508590846,-0.3749285798097708"/><polyline points="-0.6131449430423563,-0.47416226109936654
+0.45174271508590846,-0.47416226109936654"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.6230838945182201" width="2.839700421675362e-3" y="-0.47575" height="0.7970449281180336"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5599005601359431,0.3585232727269032
+-0.5599005601359431,0.3285232727269032"/><polyline points="-0.45341179432311657,0.3585232727269032
+-0.45341179432311657,0.3285232727269032"/><polyline points="-0.34692302851029017,0.3585232727269032
+-0.34692302851029017,0.3285232727269032"/><polyline points="-0.24043426269746365,0.3585232727269032
+-0.24043426269746365,0.3285232727269032"/><polyline points="-0.1339454968846372,0.3585232727269032
+-0.1339454968846372,0.3285232727269032"/><polyline points="-2.745673107181068e-2,0.3585232727269032
+-2.745673107181068e-2,0.3285232727269032"/><polyline points="7.903203474101572e-2,0.3585232727269032
+7.903203474101572e-2,0.3285232727269032"/><polyline points="0.18552080055384212,0.3585232727269032
+0.18552080055384212,0.3285232727269032"/><polyline points="0.29200956636666875,0.3585232727269032
+0.29200956636666875,0.3285232727269032"/><polyline points="0.39849833217949515,0.3585232727269032
+0.39849833217949515,0.3285232727269032"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.549625527094216e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.5599005601359431" y="0.39393398282201786" transform="rotate(-45.0, -0.5599005601359431, 0.39393398282201786)">row 1</text><text x="-0.45341179432311657" y="0.39393398282201786" transform="rotate(-45.0, -0.45341179432311657, 0.39393398282201786)">row 2</text><text x="-0.34692302851029017" y="0.39393398282201786" transform="rotate(-45.0, -0.34692302851029017, 0.39393398282201786)">row 3</text><text x="-0.24043426269746365" y="0.39393398282201786" transform="rotate(-45.0, -0.24043426269746365, 0.39393398282201786)">row 4</text><text x="-0.1339454968846372" y="0.39393398282201786" transform="rotate(-45.0, -0.1339454968846372, 0.39393398282201786)">row 5</text><text x="-2.745673107181068e-2" y="0.39393398282201786" transform="rotate(-45.0, -2.745673107181068e-2, 0.39393398282201786)">row 6</text><text x="7.903203474101572e-2" y="0.39393398282201786" transform="rotate(-45.0, 7.903203474101572e-2, 0.39393398282201786)">row 7</text><text x="0.18552080055384212" y="0.39393398282201786" transform="rotate(-45.0, 0.18552080055384212, 0.39393398282201786)">row 8</text><text x="0.29200956636666875" y="0.39393398282201786" transform="rotate(-45.0, 0.29200956636666875, 0.39393398282201786)">row 9</text><text x="0.39849833217949515" y="0.39393398282201786" transform="rotate(-45.0, 0.39849833217949515, 0.39393398282201786)">row 10</text></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.614564793253194" width="1.06772735854994" y="0.3276458837205678" height="3.1754778012670903e-3"/></g></g></g><g class="legend"><g class="legendBorder"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="2.5e-3" fill-opacity="0.0" stroke-opacity="1.0"><rect x="0.5067619107558688" width="0.2396884637170369" y="-0.13892468119271362" height="0.1806052999470643"/></g></g><g class="legendContent"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.1946629743847946e-2" fill-opacity="1.0" text-anchor="start"><text x="0.5245100383913396" y="4.98641019168411e-4">column 2</text></g><g fill="rgb(66%, 7%, 55%)" stroke="rgb(66%, 7%, 55%)" stroke-width="1.25e-3" fill-opacity="0.7" stroke-opacity="1.0"><rect x="0.6750141607401346" width="5.324438290641331e-2" y="-3.820249468377396e-2" height="5.954020877375754e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.1946629743847946e-2" fill-opacity="1.0" text-anchor="start"><text x="0.5245100383913396" y="-7.988064082540414e-2">column 1</text></g><g fill="rgb(2%, 29%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.25e-3" fill-opacity="0.7" stroke-opacity="1.0"><rect x="0.6750141607401346" width="5.324438290641331e-2" y="-0.11858177652834667" height="5.95402087737576e-2"/></g></g></g></g></svg>
diff --git a/other/compound.svg b/other/compound.svg
deleted file mode 100644
--- a/other/compound.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg height="300.0" width="430.60959792477314" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.8300000000000001 -0.594 1.6600000000000001 1.1564999999999999"><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="-0.75">0,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="-0.75">0,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="-0.75">0,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="-0.75">0,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="-0.75">0,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="-0.75">0,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="-0.44999999999999996">1,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="-0.44999999999999996">1,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="-0.44999999999999996">1,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="-0.44999999999999996">1,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="-0.44999999999999996">1,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="-0.44999999999999996">1,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="-0.1499999999999999">2,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="-0.1499999999999999">2,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="-0.1499999999999999">2,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="-0.1499999999999999">2,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="-0.1499999999999999">2,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="-0.1499999999999999">2,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="0.15000000000000013">3,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="0.15000000000000013">3,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="0.15000000000000013">3,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="0.15000000000000013">3,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="0.15000000000000013">3,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="0.15000000000000013">3,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="0.4500000000000002">4,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="0.4500000000000002">4,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="0.4500000000000002">4,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="0.4500000000000002">4,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="0.4500000000000002">4,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="0.4500000000000002">4,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="0.75">5,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="0.75">5,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="0.75">5,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="0.75">5,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="0.75">5,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="0.75">5,5</text></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846135" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846135" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846135" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846135" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846135" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846135" width="1.0000000000000009e-2" x="0.745"/></g><g stroke-opacity="1.0" fill="none" stroke-width="1.5e-2" stroke="#b05929"><polyline points="-0.75,0.3076923076923077
--0.44999999999999996,0.3076923076923077
--0.1499999999999999,-0.46153846153846134"/></g><g stroke-opacity="1.0" fill="none" stroke-width="3.0e-2" stroke="#a6cfe3"><polyline points="-0.75,0.5
-8.999999999999975e-2,-7.692307692307687e-2"/></g><g stroke-opacity="1.0" fill="none" stroke-width="1.0e-2" stroke="#1f78b5"><polyline points="-0.6,-0.26923076923076916
--0.6,0.5"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#b05929" stroke-width="5.0e-3" stroke="#b05929"><ellipse ry="6.0e-2" rx="4.0e-2" cx="-0.75" cy="0.3076923076923077"/><ellipse ry="6.0e-2" rx="4.0e-2" cx="-0.44999999999999996" cy="0.3076923076923077"/><ellipse ry="6.0e-2" rx="4.0e-2" cx="-0.1499999999999999" cy="-0.46153846153846134"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-3" stroke="#a6cfe3"><rect height="8.000000000000002e-2" y="0.46" width="8.000000000000007e-2" x="-0.79"/><rect height="8.000000000000002e-2" y="-0.11692307692307688" width="8.000000000000002e-2" x="4.9999999999999746e-2"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="5.0e-3" stroke="#1f78b5"><circle r="4.0e-2" cx="-0.6" cy="-0.26923076923076916"/><circle r="4.0e-2" cx="-0.6" cy="0.5"/></g></svg>
diff --git a/other/cubic.svg b/other/cubic.svg
--- a/other/cubic.svg
+++ b/other/cubic.svg
@@ -1,101 +1,126 @@
-<svg height="300.0" width="300.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.5365 -0.5365 1.073 1.073"><g fill-opacity="0.1" stroke-opacity="0.0" fill="#1f78b5" stroke-width="1.0e-2" stroke="#000000"><path d="M -0.5,0.5 C 0.5,0.5 -0.5,-0.5 0.5,-0.5"/></g><g stroke-opacity="1.0" fill="none" stroke-width="2.0e-3" stroke="#a6cfe3"><polyline points="-0.5,0.5
--0.470596,0.499702
--0.442368,0.498816
--0.415292,0.497354
--0.389344,0.495328
--0.36450000000000005,0.49275
--0.34073600000000004,0.48963199999999996
--0.318028,0.4859859999999999
--0.29635199999999995,0.481824
--0.275684,0.477158
--0.256,0.472
--0.237276,0.46636199999999994
--0.21948800000000002,0.460256
--0.20261199999999996,0.453694
--0.1866239999999999,0.446688
--0.17150000000000004,0.43925000000000003
--0.15721600000000008,0.431392
--0.14374799999999993,0.423126
--0.13107199999999997,0.41446399999999994
--0.11916399999999994,0.405418
--0.10799999999999987,0.39599999999999996
--9.755599999999992e-2,0.38622199999999995
--8.780799999999994e-2,0.376096
--7.873200000000002e-2,0.365634
--7.030399999999992e-2,0.35484799999999994
--6.2499999999999944e-2,0.34375
--5.529600000000001e-2,0.332352
--4.866799999999999e-2,0.32066599999999995
--4.259199999999991e-2,0.3087039999999999
--3.7043999999999966e-2,0.296478
--3.2000000000000084e-2,0.28400000000000003
--2.743600000000007e-2,0.271282
--2.3328000000000015e-2,0.258336
--1.9652000000000003e-2,0.245174
--1.638400000000012e-2,0.23180799999999996
--1.3500000000000012e-2,0.21824999999999994
--1.097599999999993e-2,0.20451200000000003
--8.787999999999907e-3,0.19060599999999994
--6.911999999999974e-3,0.17654399999999998
--5.323999999999995e-3,0.16233799999999998
--3.9999999999998925e-3,0.14799999999999996
--2.915999999999974e-3,0.13354199999999994
--2.0479999999998832e-3,0.11897600000000003
--1.3719999999999288e-3,0.10431399999999996
--8.639999999999204e-4,8.956799999999998e-2
--4.999999999998894e-4,7.474999999999993e-2
--2.5599999999992296e-4,5.9871999999999925e-2
--1.0799999999988596e-4,4.494599999999993e-2
--3.199999999992098e-5,2.998400000000001e-2
--4.000000000004e-6,1.4997999999999956e-2
-0.0,-0.0
-4.000000000115023e-6,-1.4997999999999956e-2
-3.2000000000032e-5,-2.998400000000001e-2
-1.0799999999999699e-4,-4.494600000000004e-2
-2.5599999999992296e-4,-5.9872000000000036e-2
-5.00000000000056e-4,-7.47500000000001e-2
-8.639999999999759e-4,-8.956800000000009e-2
-1.3720000000000399e-3,-0.10431400000000013
-2.0480000000000498e-3,-0.11897600000000008
-2.9160000000000297e-3,-0.13354199999999994
-4.0000000000000036e-3,-0.14800000000000002
-5.323999999999995e-3,-0.16233799999999998
-6.912000000000029e-3,-0.17654400000000015
-8.788000000000018e-3,-0.19060600000000005
-1.0976000000000097e-2,-0.20451200000000003
-1.3500000000000068e-2,-0.21825000000000006
-1.6383999999999954e-2,-0.23180800000000001
-1.9652000000000114e-2,-0.245174
-2.3328000000000015e-2,-0.2583360000000001
-2.7436000000000016e-2,-0.271282
-3.200000000000003e-2,-0.28400000000000003
-3.704400000000019e-2,-0.296478
-4.2592000000000074e-2,-0.308704
-4.8667999999999934e-2,-0.3206659999999999
-5.529600000000001e-2,-0.332352
-6.25e-2,-0.34375
-7.030400000000003e-2,-0.35484800000000016
-7.873200000000002e-2,-0.3656340000000001
-8.7808e-2,-0.376096
-9.755600000000009e-2,-0.3862220000000002
-0.1080000000000001,-0.39600000000000013
-0.11916400000000016,-0.40541800000000006
-0.13107200000000008,-0.41446400000000005
-0.1437480000000002,-0.4231260000000001
-0.15721600000000002,-0.4313919999999999
-0.1715000000000001,-0.4392499999999999
-0.186624,-0.446688
-0.20261200000000001,-0.45369400000000015
-0.21948800000000002,-0.460256
-0.23727600000000004,-0.46636200000000017
-0.2560000000000002,-0.4720000000000001
-0.27568400000000004,-0.4771580000000001
-0.29635200000000006,-0.48182400000000003
-0.3180280000000001,-0.48598600000000003
-0.34073600000000015,-0.48963200000000007
-0.36450000000000016,-0.4927499999999999
-0.38934400000000013,-0.4953280000000001
-0.415292,-0.4973540000000001
-0.4423679999999999,-0.4988159999999999
-0.470596,-0.4997020000000001
-0.5,-0.5"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="3.0e-3" stroke="#1f78b5"><rect height="3.0000000000000027e-2" y="0.485" width="3.0000000000000027e-2" x="-0.515"/><rect height="3.0000000000000027e-2" y="-0.515" width="3.0000000000000027e-2" x="0.485"/><rect height="3.0000000000000027e-2" y="0.485" width="3.0000000000000027e-2" x="0.485"/><rect height="3.0000000000000027e-2" y="-0.515" width="3.0000000000000027e-2" x="-0.515"/><rect height="3.0000000000000027e-2" y="-0.41100000000000014" width="3.0e-2" x="9.30000000000001e-2"/></g><g fill-opacity="0.1" stroke-opacity="1.0" fill="#6666cc" stroke-width="2.0e-3" stroke="#808080"><rect height="1.0" y="-0.5" width="1.0" x="-0.5"/></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="459.6022970724569" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.75 -0.4791073779795686 1.5 0.9791073779795686" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"><g class="cubic"><g fill="rgb(96%, 60%, 92%)" stroke="rgb(0%, 0%, 0%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="0.0"><path d="M -0.7335,0.4835 C 0.2768,0.4835 -0.7335,-0.3675 0.2768,-0.3675"/></g><g fill="none" stroke="rgb(53%, 51%, 28%)" stroke-width="2.0e-3" stroke-opacity="1.0"><polyline points="-0.7335,0.48350000000000004
+-0.7037922810442679,0.48324640351689035
+-0.6752727091940977,0.48249242202683945
+-0.6479170365493757,0.48124826746876453
+-0.6217010152099887,0.47952415178158264
+-0.596600397275823,0.4773302869042111
+-0.572590934846765,0.4746768847755669
+-0.5496483800227016,0.47157415733456737
+-0.5277484849035188,0.4680323165201296
+-0.5068670015891032,0.46406157427117084
+-0.4869796821793416,0.4596721425266081
+-0.4680622787741203,0.4548742332253587
+-0.45009054347332583,0.44967805830633967
+-0.43304022837684447,0.44409382970846834
+-0.416887085584563,0.43813175937066173
+-0.4016068671963679,0.4318020592318372
+-0.38717532531214544,0.42511494123091165
+-0.3735682120317821,0.41808061730680246
+-0.3607612794551645,0.4107092993984267
+-0.3487302796821793,0.40301119944470154
+-0.3374509648127127,0.3949965293845442
+-0.32689908694665154,0.3866755011568719
+-0.31705039818388203,0.3780583267006016
+-0.30788065062429065,0.36915521795465067
+-0.29936559636776394,0.3599763868579362
+-0.29148098751418844,0.3505320453493753
+-0.2842025761634508,0.3408324053678853
+-0.27750611441543704,0.3308876788523832
+-0.27136735437003406,0.3207080777417862
+-0.2657620481271283,0.3103038139750116
+-0.26066594778660623,0.29968509949097644
+-0.2560548054483543,0.28886214622859796
+-0.25190437321225895,0.27784516612679316
+-0.24819040317820668,0.2666443711244795
+-0.24488864744608413,0.2552699731605738
+-0.2419748581157775,0.24373218417399353
+-0.23942478728717376,0.2320412161036558
+-0.2372141870601589,0.22020728088847757
+-0.23531880953461987,0.2082405904673763
+-0.23371440681044275,0.19615135677926887
+-0.2323767309875142,0.18394979176307263
+-0.23128153416572073,0.17164610735770486
+-0.23040456844494883,0.1592505155020824
+-0.22972158592508507,0.14677322813512272
+-0.22920833870601587,0.13422445719574272
+-0.22884057888762754,0.12161441462285977
+-0.22859405856980708,0.10895331235539096
+-0.22844452985244046,9.625136233225362e-2
+-0.22836774483541422,8.351877649236472e-2
+-0.22833945561861524,7.076576677464141e-2
+-0.22833541430192972,5.800254511800096e-2
+-0.22833137298524409,4.523932346136056e-2
+-0.228303083768445,3.248631374363725e-2
+-0.22822629875141887,1.975372790374824e-2
+-0.22807677003405225,7.051777880610843e-3
+-0.22783024971623156,-5.609324386857961e-3
+-0.22746248989784346,-1.82193669597408e-2
+-0.22694924267877403,-3.0768137899120584e-2
+-0.22626626015891027,-4.324542526608055e-2
+-0.2253892944381385,-5.5641017121702885e-2
+-0.2242940976163451,-6.794470152707077e-2
+-0.22295642179341657,-8.014626654326684e-2
+-0.22135201906923951,-9.223550023137439e-2
+-0.21945664154370037,-0.10420219065247571
+-0.21724604131668557,-0.11603612586765388
+-0.21469597048808176,-0.12772709393799175
+-0.21178218115777536,-0.13926488292457195
+-0.2084804254256527,-0.15063928088847756
+-0.20476645539160043,-0.1618400758907914
+-0.20061602315550509,-0.17285705599259582
+-0.1960048808172533,-0.18368000925497452
+-0.190908780476731,-0.1942987237390097
+-0.18530347423382532,-0.2047029875057843
+-0.1791647141884224,-0.2148825886163812
+-0.17246825244040864,-0.22482731513188337
+-0.16518984108967094,-0.2345269551133734
+-0.15730523223609538,-0.24397129662193429
+-0.14879017797956873,-0.25315012771864875
+-0.1396204304199773,-0.26205323646459966
+-0.12977174165720762,-0.27067041092086996
+-0.11921986379114635,-0.2789914391485424
+-0.1079405489216797,-0.28700610920869973
+-9.590954914869476e-2,-0.2947042091624248
+-8.310261657207729e-2,-0.30207552707080054
+-6.949550329171417e-2,-0.3091098509949096
+-5.506396140749159e-2,-0.3157969689958351
+-3.9783743019296436e-2,-0.3221266691346598
+-2.363060022701491e-2,-0.3280887394724664
+-6.5802851305335475e-3,-0.33367296807033775
+1.1391450170261108e-2,-0.3388691429893568
+3.030885357548241e-2,-0.34366705229060623
+5.019617298524415e-2,-0.34805648403516876
+7.107765629965945e-2,-0.35202722628412764
+9.297755141884234e-2,-0.3555690670985654
+0.11592010624290572,-0.358671794539565
+0.1399295686719635,-0.36132519666820917
+0.16503018660612934,-0.3635190615455808
+0.1912462079455164,-0.3652431772327627
+0.2186018805902381,-0.3664873317908375
+0.2471214524404084,-0.3672413132808884
+0.2768291713961406,-0.3674949097639981"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="-0.7485" width="3.0000000000000027e-2" y="0.4685" height="3.0000000000000027e-2"/><rect x="0.2618291713961406" width="3.0000000000000027e-2" y="-0.38249490976399814" height="3.0000000000000027e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.48350000000000004" cx="0.2768291713961406" r="1.5e-2"/><circle cy="-0.3674949097639981" cx="-0.7335" r="1.5e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(40%, 40%, 40%)" stroke-width="2.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7335" width="1.0103291713961406" y="-0.3674949097639981" height="0.8509949097639982"/></g></g></g><g class="hud"><g class="legend"><g class="legendBorder"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="2.5e-3" fill-opacity="0.0" stroke-opacity="1.0"><rect x="0.33845925085130535" width="0.40817298524404055" y="-0.2852320684868117" height="0.3879118463674226"/></g></g><g class="legendContent"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.3677639046538026e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3552980703745743" y="6.863998149005096e-2">Bounding Box</text></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(40%, 40%, 40%)" stroke-width="2.5e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.6617645856980703" width="3.367763904653831e-2" y="3.672767237390101e-2" height="4.254974548819995e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.3677639046538026e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3552980703745743" y="5.603887089311033e-4">Path Control Point</text></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-1.0077047663118899e-2" cx="0.6786034052213392" r="2.5e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.3677639046538026e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3552980703745743" y="-6.751920407218881e-2">Path Endpoints</text></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="0.6536034052213392" width="5.0000000000000044e-2" y="-0.10315664044423875" height="4.9999999999999996e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.3677639046538026e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3552980703745743" y="-0.13559879685330856">Path Chord</text></g><g fill="none" stroke="rgb(53%, 51%, 28%)" stroke-width="2.0e-3" stroke-opacity="1.0"><polyline points="0.6617645856980703,-0.14623623322535861
+0.7291198637911465,-0.14623623322535861"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.3677639046538026e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3552980703745743" y="-0.20367838963442852">Path Fill</text></g><g fill="rgb(96%, 60%, 92%)" stroke="rgb(0%, 0%, 0%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="0.0"><path d="M 0.6618,-0.2001 Q 0.7291,-0.1576 0.6954,-0.2427"/></g></g></g><g class="title"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="5.3884222474460834e-2" fill-opacity="1.0" text-anchor="middle"><text x="2.6931895573211184e-3" y="-0.43599999999999994">CubicPosition (Point 0 0) (Point 1 1) (Point 1 0) (Point 0 1)</text></g></g></g></svg>
diff --git a/other/date.svg b/other/date.svg
new file mode 100644
--- /dev/null
+++ b/other/date.svg
@@ -0,0 +1,53 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="452.11491477002767" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7364320837415482 -0.49842240815450595 1.4853940957293088 0.9856304540306093" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"></g><g class="hud"><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5794598442049582,0.3585232727269032
+-0.5794598442049582,0.3285232727269032"/><polyline points="-0.23948704784224933,0.3585232727269032
+-0.23948704784224933,0.3285232727269032"/><polyline points="0.18207921964750973,0.3585232727269032
+0.18207921964750973,0.3285232727269032"/><polyline points="0.5628487515737435,0.3585232727269032
+0.5628487515737435,0.3285232727269032"/><polyline points="0.7396346056823522,0.3585232727269032
+0.7396346056823522,0.3285232727269032"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.396981499624369e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.5794598442049582" y="0.39393398282201786" transform="rotate(-45.0, -0.5794598442049582, 0.39393398282201786)">06 Dec</text><text x="-0.23948704784224933" y="0.39393398282201786" transform="rotate(-45.0, -0.23948704784224933, 0.39393398282201786)">31 Dec</text><text x="0.18207921964750973" y="0.39393398282201786" transform="rotate(-45.0, 0.18207921964750973, 0.39393398282201786)">31 Jan</text><text x="0.5628487515737435" y="0.39393398282201786" transform="rotate(-45.0, 0.5628487515737435, 0.39393398282201786)">28 Feb</text><text x="0.7396346056823522" y="0.39393398282201786" transform="rotate(-45.0, 0.7396346056823522, 0.39393398282201786)">13 Mar</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5794598442049582,0.31970718921740016
+-0.5794598442049582,-0.47416226109936654"/><polyline points="-0.23948704784224933,0.31970718921740016
+-0.23948704784224933,-0.47416226109936654"/><polyline points="0.18207921964750973,0.31970718921740016
+0.18207921964750973,-0.47416226109936654"/><polyline points="0.5628487515737435,0.31970718921740016
+0.5628487515737435,-0.47416226109936654"/><polyline points="0.7396346056823522,0.31970718921740016
+0.7396346056823522,-0.47416226109936654"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.581218636804808" width="1.32261203508701" y="0.3276458837205678" height="3.1754778012670903e-3"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6058417332027045, 0.31970718921740016)"><polyline points="-0.6058417332027045,0.33470718921740017
+-0.6058417332027045,0.30470718921740014"/></g><g transform="rotate(-90.0, -0.6058417332027045, 0.22047350792780432)"><polyline points="-0.6058417332027045,0.2354735079278043
+-0.6058417332027045,0.20547350792780433"/></g><g transform="rotate(-90.0, -0.6058417332027045, 0.12123982663820848)"><polyline points="-0.6058417332027045,0.1362398266382085
+-0.6058417332027045,0.10623982663820848"/></g><g transform="rotate(-90.0, -0.6058417332027045, 2.200614534861267e-2)"><polyline points="-0.6058417332027045,3.700614534861267e-2
+-0.6058417332027045,7.006145348612672e-3"/></g><g transform="rotate(-90.0, -0.6058417332027045, -7.722753594098325e-2)"><polyline points="-0.6058417332027045,-6.222753594098325e-2
+-0.6058417332027045,-9.222753594098325e-2"/></g><g transform="rotate(-90.0, -0.6058417332027045, -0.17646121723057906)"><polyline points="-0.6058417332027045,-0.16146121723057905
+-0.6058417332027045,-0.19146121723057907"/></g><g transform="rotate(-90.0, -0.6058417332027045, -0.2756948985201749)"><polyline points="-0.6058417332027045,-0.2606948985201749
+-0.6058417332027045,-0.29069489852017494"/></g><g transform="rotate(-90.0, -0.6058417332027045, -0.3749285798097708)"><polyline points="-0.6058417332027045,-0.3599285798097708
+-0.6058417332027045,-0.3899285798097708"/></g><g transform="rotate(-90.0, -0.6058417332027045, -0.47416226109936654)"><polyline points="-0.6058417332027045,-0.45916226109936653
+-0.6058417332027045,-0.48916226109936656"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.396981499624369e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.6375" y="0.3306228941592557">00:00</text><text x="-0.6375" y="0.23138921286965985">03:00</text><text x="-0.6375" y="0.132155531580064">06:00</text><text x="-0.6375" y="3.2921850290468235e-2">09:00</text><text x="-0.6375" y="-6.631183099912769e-2">12:00</text><text x="-0.6375" y="-0.1655455122887235">15:00</text><text x="-0.6375" y="-0.26477919357831936">18:00</text><text x="-0.6375" y="-0.3640128748679152">21:00</text><text x="-0.6375" y="-0.463246556157511">00:00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5794598442049582,0.31970718921740016
+0.7396346056823524,0.31970718921740016"/><polyline points="-0.5794598442049582,0.22047350792780432
+0.7396346056823524,0.22047350792780432"/><polyline points="-0.5794598442049582,0.12123982663820848
+0.7396346056823524,0.12123982663820848"/><polyline points="-0.5794598442049582,2.200614534861267e-2
+0.7396346056823524,2.200614534861267e-2"/><polyline points="-0.5794598442049582,-7.722753594098325e-2
+0.7396346056823524,-7.722753594098325e-2"/><polyline points="-0.5794598442049582,-0.17646121723057906
+0.7396346056823524,-0.17646121723057906"/><polyline points="-0.5794598442049582,-0.2756948985201749
+0.7396346056823524,-0.2756948985201749"/><polyline points="-0.5794598442049582,-0.3749285798097708
+0.7396346056823524,-0.3749285798097708"/><polyline points="-0.5794598442049582,-0.47416226109936654
+0.7396346056823524,-0.47416226109936654"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5917713924039065" width="3.51758519969958e-3" y="-0.47575" height="0.7970449281180336"/></g></g></g></g></svg>
diff --git a/other/debug.svg b/other/debug.svg
new file mode 100644
--- /dev/null
+++ b/other/debug.svg
@@ -0,0 +1,68 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="450.0" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.75 -0.5 1.5 1.0" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"><g class="chart"><g class="line"><g fill="none" stroke="rgb(2%, 73%, 80%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.5894546169989507,0.18728082191780815
+-0.19622271773347333,0.18728082191780815
+0.1970091815320042,-0.35335844748858447"/></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.5894546169989507,0.32244063926940636
+0.511594700944386,-8.303881278538816e-2"/></g><g fill="none" stroke="rgb(66%, 7%, 55%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.39283866736621204,-0.21819863013698648
+-0.39283866736621204,0.32244063926940636"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5953530954879329" width="1.1855941762854143" y="-0.3584269406392694" height="0.6859360730593607"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6189470094438615, 0.32244063926940636)"><polyline points="-0.6189470094438615,0.3374406392694064
+-0.6189470094438615,0.30744063926940635"/></g><g transform="rotate(-90.0, -0.6189470094438615, 0.25486073059360725)"><polyline points="-0.6189470094438615,0.26986073059360727
+-0.6189470094438615,0.23986073059360724"/></g><g transform="rotate(-90.0, -0.6189470094438615, 0.18728082191780815)"><polyline points="-0.6189470094438615,0.20228082191780816
+-0.6189470094438615,0.17228082191780814"/></g><g transform="rotate(-90.0, -0.6189470094438615, 0.11970091324200904)"><polyline points="-0.6189470094438615,0.13470091324200906
+-0.6189470094438615,0.10470091324200904"/></g><g transform="rotate(-90.0, -0.6189470094438615, 5.212100456620994e-2)"><polyline points="-0.6189470094438615,6.712100456620994e-2
+-0.6189470094438615,3.712100456620994e-2"/></g><g transform="rotate(-90.0, -0.6189470094438615, -1.5458904109589167e-2)"><polyline points="-0.6189470094438615,-4.5890410958916716e-4
+-0.6189470094438615,-3.0458904109589166e-2"/></g><g transform="rotate(-90.0, -0.6189470094438615, -8.303881278538816e-2)"><polyline points="-0.6189470094438615,-6.803881278538816e-2
+-0.6189470094438615,-9.803881278538816e-2"/></g><g transform="rotate(-90.0, -0.6189470094438615, -0.15061872146118727)"><polyline points="-0.6189470094438615,-0.13561872146118725
+-0.6189470094438615,-0.16561872146118728"/></g><g transform="rotate(-90.0, -0.6189470094438615, -0.21819863013698648)"><polyline points="-0.6189470094438615,-0.20319863013698647
+-0.6189470094438615,-0.2331986301369865"/></g><g transform="rotate(-90.0, -0.6189470094438615, -0.2857785388127855)"><polyline points="-0.6189470094438615,-0.27077853881278546
+-0.6189470094438615,-0.3007785388127855"/></g><g transform="rotate(-90.0, -0.6189470094438615, -0.35335844748858447)"><polyline points="-0.6189470094438615,-0.33835844748858446
+-0.6189470094438615,-0.3683584474885845"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.647259706190976" y="0.33173287671232876">0.00</text><text x="-0.647259706190976" y="0.26415296803652966">0.50</text><text x="-0.647259706190976" y="0.1965730593607305">1.00</text><text x="-0.647259706190976" y="0.12899315068493145">1.50</text><text x="-0.647259706190976" y="6.1413242009132396e-2">2.00</text><text x="-0.647259706190976" y="-6.166666666666654e-3">2.50</text><text x="-0.647259706190976" y="-7.374657534246587e-2">3.00</text><text x="-0.647259706190976" y="-0.14132648401826486">3.50</text><text x="-0.647259706190976" y="-0.20890639269406397">4.00</text><text x="-0.647259706190976" y="-0.2764863013698632">4.50</text><text x="-0.647259706190976" y="-0.3440662100456622">5.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5894546169989507,0.32244063926940636
+0.5902410807974814,0.32244063926940636"/><polyline points="-0.5894546169989507,0.25486073059360725
+0.5902410807974814,0.25486073059360725"/><polyline points="-0.5894546169989507,0.18728082191780815
+0.5902410807974814,0.18728082191780815"/><polyline points="-0.5894546169989507,0.11970091324200904
+0.5902410807974814,0.11970091324200904"/><polyline points="-0.5894546169989507,5.212100456620994e-2
+0.5902410807974814,5.212100456620994e-2"/><polyline points="-0.5894546169989507,-1.5458904109589167e-2
+0.5902410807974814,-1.5458904109589167e-2"/><polyline points="-0.5894546169989507,-8.303881278538816e-2
+0.5902410807974814,-8.303881278538816e-2"/><polyline points="-0.5894546169989507,-0.15061872146118727
+0.5902410807974814,-0.15061872146118727"/><polyline points="-0.5894546169989507,-0.21819863013698648
+0.5902410807974814,-0.21819863013698648"/><polyline points="-0.5894546169989507,-0.2857785388127855
+0.5902410807974814,-0.2857785388127855"/><polyline points="-0.5894546169989507,-0.35335844748858447
+0.5902410807974814,-0.35335844748858447"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.6063635886673662" width="3.1458551941236923e-3" y="-0.3547100456621005" height="0.6785022831050228"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5894546169989507,0.362783105022831
+-0.5894546169989507,0.332783105022831"/><polyline points="-0.39283866736621204,0.362783105022831
+-0.39283866736621204,0.332783105022831"/><polyline points="-0.19622271773347333,0.362783105022831
+-0.19622271773347333,0.332783105022831"/><polyline points="3.932318992654338e-4,0.362783105022831
+3.932318992654338e-4,0.332783105022831"/><polyline points="0.1970091815320042,0.362783105022831
+0.1970091815320042,0.332783105022831"/><polyline points="0.39362513116474274,0.362783105022831
+0.39362513116474274,0.332783105022831"/><polyline points="0.5902410807974814,0.362783105022831
+0.5902410807974814,0.332783105022831"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5894546169989507" y="0.39069634703196343">0.00</text><text x="-0.39283866736621204" y="0.39069634703196343">0.50</text><text x="-0.19622271773347333" y="0.39069634703196343">1.00</text><text x="3.932318992654338e-4" y="0.39069634703196343">1.50</text><text x="0.1970091815320042" y="0.39069634703196343">2.00</text><text x="0.39362513116474274" y="0.39069634703196343">2.50</text><text x="0.5902410807974814" y="0.39069634703196343">3.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5894546169989507,0.32244063926940636
+-0.5894546169989507,-0.35335844748858447"/><polyline points="-0.39283866736621204,0.32244063926940636
+-0.39283866736621204,-0.35335844748858447"/><polyline points="-0.19622271773347333,0.32244063926940636
+-0.19622271773347333,-0.35335844748858447"/><polyline points="3.932318992654338e-4,0.32244063926940636
+3.932318992654338e-4,-0.35335844748858447"/><polyline points="0.1970091815320042,0.32244063926940636
+0.1970091815320042,-0.35335844748858447"/><polyline points="0.39362513116474274,0.32244063926940636
+0.39362513116474274,-0.35335844748858447"/><polyline points="0.5902410807974814,0.32244063926940636
+0.5902410807974814,-0.35335844748858447"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5910275445960127" width="1.1828415529905558" y="0.33426712328767116" height="2.7031963470319775e-3"/></g></g></g><g class="title"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="7.864637985309549e-2" fill-opacity="1.0" text-anchor="middle"><text x="-4.620474816369369e-2" y="-0.4184041095890413">Line Chart</text></g></g><g class="title"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.718782791185729e-2" fill-opacity="1.0" text-anchor="end"><text x="0.6256319517313744" y="0.46030365296803655">Made with love and chart-svg</text></g></g><g class="legend"><g class="legendBorder"><g fill="rgb(99%, 99%, 99%)" stroke="rgb(5%, 5%, 5%)" stroke-width="2.5e-3" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.33464034627492123" width="0.3794687827911858" y="7.746347031963463e-2" height="0.1790867579908676"/></g></g><g class="legendContent"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3543019412381947" y="0.22951826484018256">palette1 2</text></g><g fill="none" stroke="rgb(66%, 7%, 55%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="0.5705794858342077,0.2210707762557077
+0.6885490556138509,0.2210707762557077"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3543019412381947" y="0.1754543378995433">palette1 1</text></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="0.5705794858342077,0.16700684931506843
+0.6885490556138509,0.16700684931506843"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3543019412381947" y="0.12139041095890407">palette1 0</text></g><g fill="none" stroke="rgb(2%, 73%, 80%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="0.5705794858342077,0.11294292237442916
+0.6885490556138509,0.11294292237442916"/></g></g></g><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.7495" width="1.499" y="-0.49950000000000006" height="0.9990000000000001"/></g></g></g><g class="glyphize"><g class="chart"><g class="line"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.18728082191780815" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="0.18728082191780815" cx="-0.19622271773347333" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="0.1970091815320042" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.32244063926940636" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="-8.303881278538816e-2" cx="0.511594700944386" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-0.21819863013698648" cx="-0.39283866736621204" r="5.0e-3"/><circle cy="0.32244063926940636" cx="-0.39283866736621204" r="5.0e-3"/></g></g><g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-1.5458904109589056e-2" cx="3.932318992654338e-4" r="5.0e-3"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-1.5458904109589056e-2" cx="-2.5560073452257637e-3" r="5.0e-3"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.32244063926940636" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="0.25486073059360725" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="0.18728082191780815" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="0.11970091324200904" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="5.212100456620994e-2" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="-1.5458904109589167e-2" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="-8.303881278538816e-2" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="-0.15061872146118727" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="-0.21819863013698648" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="-0.2857785388127855" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="-0.6189470094438615" r="5.0e-3"/></g></g><g class="ticktext"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.33173287671232876" cx="-0.647259706190976" r="5.0e-3"/><circle cy="0.26415296803652966" cx="-0.647259706190976" r="5.0e-3"/><circle cy="0.1965730593607305" cx="-0.647259706190976" r="5.0e-3"/><circle cy="0.12899315068493145" cx="-0.647259706190976" r="5.0e-3"/><circle cy="6.1413242009132396e-2" cx="-0.647259706190976" r="5.0e-3"/><circle cy="-6.166666666666654e-3" cx="-0.647259706190976" r="5.0e-3"/><circle cy="-7.374657534246587e-2" cx="-0.647259706190976" r="5.0e-3"/><circle cy="-0.14132648401826486" cx="-0.647259706190976" r="5.0e-3"/><circle cy="-0.20890639269406397" cx="-0.647259706190976" r="5.0e-3"/><circle cy="-0.2764863013698632" cx="-0.647259706190976" r="5.0e-3"/><circle cy="-0.3440662100456622" cx="-0.647259706190976" r="5.0e-3"/></g></g><g class="ticklines"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.32244063926940636" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="0.32244063926940636" cx="0.5902410807974814" r="5.0e-3"/><circle cy="0.25486073059360725" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="0.25486073059360725" cx="0.5902410807974814" r="5.0e-3"/><circle cy="0.18728082191780815" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="0.18728082191780815" cx="0.5902410807974814" r="5.0e-3"/><circle cy="0.11970091324200904" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="0.11970091324200904" cx="0.5902410807974814" r="5.0e-3"/><circle cy="5.212100456620994e-2" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="5.212100456620994e-2" cx="0.5902410807974814" r="5.0e-3"/><circle cy="-1.5458904109589167e-2" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="-1.5458904109589167e-2" cx="0.5902410807974814" r="5.0e-3"/><circle cy="-8.303881278538816e-2" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="-8.303881278538816e-2" cx="0.5902410807974814" r="5.0e-3"/><circle cy="-0.15061872146118727" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="-0.15061872146118727" cx="0.5902410807974814" r="5.0e-3"/><circle cy="-0.21819863013698648" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="-0.21819863013698648" cx="0.5902410807974814" r="5.0e-3"/><circle cy="-0.2857785388127855" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="-0.2857785388127855" cx="0.5902410807974814" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="0.5902410807974814" r="5.0e-3"/></g></g></g><g class="axisbar"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-1.5458904109589167e-2" cx="-0.6047906610703043" r="5.0e-3"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.347783105022831" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="0.347783105022831" cx="-0.39283866736621204" r="5.0e-3"/><circle cy="0.347783105022831" cx="-0.19622271773347333" r="5.0e-3"/><circle cy="0.347783105022831" cx="3.932318992654338e-4" r="5.0e-3"/><circle cy="0.347783105022831" cx="0.1970091815320042" r="5.0e-3"/><circle cy="0.347783105022831" cx="0.39362513116474274" r="5.0e-3"/><circle cy="0.347783105022831" cx="0.5902410807974814" r="5.0e-3"/></g></g><g class="ticktext"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.39069634703196343" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="0.39069634703196343" cx="-0.39283866736621204" r="5.0e-3"/><circle cy="0.39069634703196343" cx="-0.19622271773347333" r="5.0e-3"/><circle cy="0.39069634703196343" cx="3.932318992654338e-4" r="5.0e-3"/><circle cy="0.39069634703196343" cx="0.1970091815320042" r="5.0e-3"/><circle cy="0.39069634703196343" cx="0.39362513116474274" r="5.0e-3"/><circle cy="0.39069634703196343" cx="0.5902410807974814" r="5.0e-3"/></g></g><g class="ticklines"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.32244063926940636" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="0.32244063926940636" cx="-0.39283866736621204" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="-0.39283866736621204" r="5.0e-3"/><circle cy="0.32244063926940636" cx="-0.19622271773347333" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="-0.19622271773347333" r="5.0e-3"/><circle cy="0.32244063926940636" cx="3.932318992654338e-4" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="3.932318992654338e-4" r="5.0e-3"/><circle cy="0.32244063926940636" cx="0.1970091815320042" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="0.1970091815320042" r="5.0e-3"/><circle cy="0.32244063926940636" cx="0.39362513116474274" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="0.39362513116474274" r="5.0e-3"/><circle cy="0.32244063926940636" cx="0.5902410807974814" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="0.5902410807974814" r="5.0e-3"/></g></g></g><g class="axisbar"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.33561872146118715" cx="3.9323189926521174e-4" r="5.0e-3"/></g></g></g><g class="title"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-0.4184041095890413" cx="-4.620474816369369e-2" r="5.0e-3"/></g></g><g class="title"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.46030365296803655" cx="0.6256319517313744" r="5.0e-3"/></g></g><g class="legend"><g class="legendBorder"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.16700684931506843" cx="0.5243747376705139" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.16700684931506843" cx="0.5243747376705139" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.16700684931506843" cx="0.5243747376705139" r="5.0e-3"/></g></g><g class="legendContent"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.22951826484018256" cx="0.3543019412381947" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.2210707762557077" cx="0.5705794858342077" r="5.0e-3"/><circle cy="0.2210707762557077" cx="0.6885490556138509" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.1754543378995433" cx="0.3543019412381947" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.16700684931506843" cx="0.5705794858342077" r="5.0e-3"/><circle cy="0.16700684931506843" cx="0.6885490556138509" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.12139041095890407" cx="0.3543019412381947" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.11294292237442916" cx="0.5705794858342077" r="5.0e-3"/><circle cy="0.11294292237442916" cx="0.6885490556138509" r="5.0e-3"/></g></g></g><g class="frame"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-0.0" cx="0.0" r="5.0e-3"/></g></g></g></g><g class="rectangularize"><g class="chart"><g class="line"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.5969496169989507" width="0.8014537985309547" y="-0.3608509474885845" height="0.5556242694063926"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.5969496169989507" width="1.1160393179433363" y="-9.053131278538817e-2" height="0.42046445205479455"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.40033366736621206" width="1.4990000000000003e-2" y="-0.2256911301369866" height="0.555624269406393"/></g></g><g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.5894546169989507" width="1.1796956977964321" y="-0.35335844748858447" height="0.6757990867579908"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.5953530954879329" width="1.1855941762854143" y="-0.3584269406392694" height="0.6859360730593607"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.6359356761105283" width="3.3977333333333415e-2" y="-0.35735444748858447" height="0.6837910867579908"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.647259706190976" y="0.33173287671232876">0.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="0.3002546631761273" height="4.3294832109129044e-2"/></g><text x="-0.647259706190976" y="0.26415296803652966">0.50</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="0.23267475450032818" height="4.329483210912907e-2"/></g><text x="-0.647259706190976" y="0.1965730593607305">1.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="0.16509484582452902" height="4.329483210912907e-2"/></g><text x="-0.647259706190976" y="0.12899315068493145">1.50</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="9.751493714872997e-2" height="4.329483210912907e-2"/></g><text x="-0.647259706190976" y="6.1413242009132396e-2">2.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="2.993502847293093e-2" height="4.329483210912906e-2"/></g><text x="-0.647259706190976" y="-6.166666666666654e-3">2.50</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="-3.7644880202868124e-2" height="4.3294832109129065e-2"/></g><text x="-0.647259706190976" y="-7.374657534246587e-2">3.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="-0.10522478887866735" height="4.329483210912908e-2"/></g><text x="-0.647259706190976" y="-0.14132648401826486">3.50</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="-0.17280469755446634" height="4.329483210912907e-2"/></g><text x="-0.647259706190976" y="-0.20890639269406397">4.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="-0.24038460623026545" height="4.329483210912907e-2"/></g><text x="-0.647259706190976" y="-0.2764863013698632">4.50</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="-0.30796451490606463" height="4.3294832109129044e-2"/></g><text x="-0.647259706190976" y="-0.3440662100456622">5.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="-0.37554442358186363" height="4.3294832109129044e-2"/></g></g></g><g class="ticklines"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.591952950332284" width="1.1846923644630987" y="-0.3558559474885844" height="0.6807940867579907"/></g></g></g><g class="axisbar"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.6063635886673662" width="3.1458551941236923e-3" y="-0.3547100456621005" height="0.6785022831050228"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.593451950332284" width="1.1876903644630987" y="0.33080010502283097" height="3.396600000000005e-2"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5894546169989507" y="0.39069634703196343">0.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.6248651495278069" width="7.082106505771235e-2" y="0.359218133495762" height="4.3294832109129044e-2"/></g><text x="-0.39283866736621204" y="0.39069634703196343">0.50</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.42824919989506827" width="7.082106505771246e-2" y="0.359218133495762" height="4.3294832109129044e-2"/></g><text x="-0.19622271773347333" y="0.39069634703196343">1.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.2316332502623296" width="7.082106505771252e-2" y="0.359218133495762" height="4.3294832109129044e-2"/></g><text x="3.932318992654338e-4" y="0.39069634703196343">1.50</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-3.501730062959081e-2" width="7.082106505771249e-2" y="0.359218133495762" height="4.3294832109129044e-2"/></g><text x="0.1970091815320042" y="0.39069634703196343">2.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.16159864900314794" width="7.082106505771252e-2" y="0.359218133495762" height="4.3294832109129044e-2"/></g><text x="0.39362513116474274" y="0.39069634703196343">2.50</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.3582145986358865" width="7.082106505771246e-2" y="0.359218133495762" height="4.3294832109129044e-2"/></g><text x="0.5902410807974814" y="0.39069634703196343">3.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.5548305482686252" width="7.082106505771235e-2" y="0.359218133495762" height="4.3294832109129044e-2"/></g></g></g><g class="ticklines"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.591952950332284" width="1.1846923644630987" y="-0.3558559474885844" height="0.6807940867579907"/></g></g></g><g class="axisbar"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.5910275445960127" width="1.1828415529905558" y="0.33426712328767116" height="2.7031963470319775e-3"/></g></g></g><g class="title"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="7.864637985309549e-2" fill-opacity="1.0" text-anchor="middle"><text x="-4.620474816369369e-2" y="-0.4184041095890413">Line Chart</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="7.864637985309549e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.2231984260230851" width="0.3539873557187828" y="-0.48136053666144424" height="8.658966421825814e-2"/></g></g></g><g class="title"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.718782791185729e-2" fill-opacity="1.0" text-anchor="end"><text x="0.6256319517313744" y="0.46030365296803655">Made with love and chart-svg</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.7187827911857296e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="3.104172612801656e-2" width="0.5946138195173137" y="0.42252979672459473" height="5.195379853095494e-2"/></g></g></g><g class="legend"><g class="legendBorder"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.3307080272822662" width="0.3873334207764956" y="7.408447488584469e-2" height="0.18584474885844748"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.33464034627492123" width="0.3794687827911858" y="7.746347031963463e-2" height="0.1790867579908676"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.3333911796082545" width="0.3819671161245193" y="7.621472031963467e-2" height="0.18158425799086753"/></g></g><g class="legendContent"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3543019412381947" y="0.22951826484018256">palette1 2</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.35428227964323145" width="0.17699367785939135" y="0.19804005130398109" height="4.329483210912907e-2"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.5630844858342079" width="0.13295956977964285" y="0.2135782762557077" height="1.4985000000000026e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3543019412381947" y="0.1754543378995433">palette1 1</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.35428227964323145" width="0.17699367785939135" y="0.1439761243633418" height="4.329483210912907e-2"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.5630844858342079" width="0.13295956977964285" y="0.15951434931506842" height="1.4985000000000026e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3543019412381947" y="0.12139041095890407">palette1 0</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.35428227964323145" width="0.17699367785939135" y="8.99121974227026e-2" height="4.329483210912907e-2"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.5630844858342079" width="0.13295956977964285" y="0.10545042237442914" height="1.4985000000000026e-2"/></g></g></g><g class="frame"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7495" width="1.499" y="-0.49950000000000006" height="0.9990000000000001"/></g></g></g></g></g><g class="hud"></g></svg>
diff --git a/other/ellipse.svg b/other/ellipse.svg
--- a/other/ellipse.svg
+++ b/other/ellipse.svg
@@ -1,233 +1,261 @@
-<svg height="300.0" width="261.40560441808134" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-1.65753 -1.53175 3.19503 3.6667500000000004"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.5" y="-1.5" width="3.0" x="-1.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,2.0
-1.5,2.0"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,1.5
-1.5,1.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,0.9999999999999998
-1.5,0.9999999999999998"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,0.4999999999999998
-1.5,0.4999999999999998"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,-0.0
-1.5,-0.0"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,-0.49999999999999956
-1.5,-0.49999999999999956"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,-1.0
-1.5,-1.0"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,-1.5
-1.5,-1.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.0145" x="-1.5575299999999999">-2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="1.5145" x="-1.5575299999999999">-1.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="1.0145" x="-1.5575299999999999">-1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5144999999999997" x="-1.5575299999999999">-0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="1.4499999999999957e-2" x="-1.5575299999999999">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4854999999999996" x="-1.5575299999999999">0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.9855" x="-1.5575299999999999">1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-1.4855" x="-1.5575299999999999">1.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -1.5265, 2.0)"><polyline points="-1.5265,2.015
--1.5265,1.985"/></g><g transform="rotate(-90.0, -1.5265, 1.5)"><polyline points="-1.5265,1.515
--1.5265,1.485"/></g><g transform="rotate(-90.0, -1.5265, 0.9999999999999998)"><polyline points="-1.5265,1.0149999999999997
--1.5265,0.9849999999999998"/></g><g transform="rotate(-90.0, -1.5265, 0.4999999999999998)"><polyline points="-1.5265,0.5149999999999998
--1.5265,0.48499999999999976"/></g><g transform="rotate(-90.0, -1.5265, -0.0)"><polyline points="-1.5265,1.5e-2
--1.5265,-1.5e-2"/></g><g transform="rotate(-90.0, -1.5265, -0.49999999999999956)"><polyline points="-1.5265,-0.48499999999999954
--1.5265,-0.5149999999999996"/></g><g transform="rotate(-90.0, -1.5265, -1.0)"><polyline points="-1.5265,-0.985
--1.5265,-1.015"/></g><g transform="rotate(-90.0, -1.5265, -1.5)"><polyline points="-1.5265,-1.485
--1.5265,-1.515"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.5" y="-1.5" width="4.0000000000000036e-3" x="-1.514"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,2.0
--1.5,-1.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.0,2.0
--1.0,-1.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.5,2.0
--0.5,-1.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="2.220446049250313e-16,2.0
-2.220446049250313e-16,-1.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.5,2.0
-0.5,-1.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="1.0,2.0
-1.0,-1.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="1.5,2.0
-1.5,-1.5"/></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.10875" x="-1.5">-1.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.10875" x="-1.0">-1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.10875" x="-0.5">-0.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.10875" x="2.220446049250313e-16">0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.10875" x="0.5">0.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.10875" x="1.0">1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.10875" x="1.5">1.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-1.5,2.0415
--1.5,2.0115"/><polyline points="-1.0,2.0415
--1.0,2.0115"/><polyline points="-0.5,2.0415
--0.5,2.0115"/><polyline points="2.220446049250313e-16,2.0415
-2.220446049250313e-16,2.0115"/><polyline points="0.5,2.0415
-0.5,2.0115"/><polyline points="1.0,2.0415
-1.0,2.0115"/><polyline points="1.5,2.0415
-1.5,2.0115"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="4.0000000000000036e-3" y="2.01" width="3.0" x="-1.5"/></g><g stroke-opacity="1.0" fill="none" stroke-width="2.0e-3" stroke="#a6cfe3"><polyline points="1.0,-0.0
-0.9940146461148016,6.427210796446392e-2
-0.9854684971040975,0.12920580153034256
-0.9743808284486222,0.19465462547461154
-0.9607766479200981,0.2604709627192794
-0.9446866391772537,0.3265063672755135
-0.9261470925601185,0.3926118990573495
-0.9051998232386831,0.45863845980980367
-0.8818920769005372,0.5244371293937398
-0.8562764231902009,0.5898595016689936
-0.8284106371404976,0.6547580192182041
-0.7983575688633873,0.718986306156377
-0.7661850017941774,0.7823994982755582
-0.731965499808827,0.8448545697799767
-0.6957762435591621,0.9062106558747356
-0.6576988563951605,0.9663293704804432
-0.6178192202669006,1.0250751183572173
-0.5762272820214287,1.0823154009340614
-0.533016850531415,1.1379211151538344
-0.48828538511317676,1.1917668446597856
-0.4421337757112749,1.2437311426668827
-0.39466611534547713,1.2936968058799507
-0.3459894653333131,1.3415511388407824
-0.2962136138177678,1.3871862081080222
-0.2454508281447203,1.430499085696519
-0.19381560164866296,1.4713920812270747
-0.14142439541777652,1.509772962263005
-8.839537562083555e-2,1.545555162336529
-3.484814698836969e-2,1.5786579761958064
--1.9096516950796172e-2,1.6090067418322525
--7.331694626916585e-2,1.6365330088775658
--0.12769084906199346,1.6611746929906617
--0.18209558727154862,1.6828762158863042
--0.2364084532921109,1.7015886306895947
--0.2905069467318284,1.7172697323335975
--0.3442690507072199,1.7298841527510982
--0.39757350704712957,1.7394034406457946
--0.4503000897854581,1.7458061256630064
--0.5023298763257824,1.7490777668151547
--0.5535455156662832,1.7492109850528088
--0.6038314930800136,1.7462054799078195
--0.6530743906535195,1.7400680301710143
--0.7011631430961871,1.7308124786029173
--0.7479892882433502,1.7184597007119844
--0.7934472116881531,1.7030375576707695
--0.8374343849904167,1.6845808334762182
--0.8798515969252383,1.6631311564958182
--0.9206031772497455,1.6387369055765684
--0.9595972124833211,1.6114531009285114
--0.9967457532146013,1.5813412800289606
--1.0319650124676871,1.5484693588272997
--1.0651755546801553,1.5129114785634061
--1.0963024748666366,1.4747478385451962
--1.1252755675638715,1.4340645152624427
--1.1520294851761868,1.39095326824487
--1.176503885364259,1.3455113331023756
--1.1986435671447302,1.297841202214192
--1.2183985953937095,1.2480503935616252
--1.2357244134733536,1.1962512082257508
--1.250581943727494,1.1425604770970392
--1.262937675619652,1.0870992973681812
--1.2727637413146469,1.0299927594044442
--1.2800379785333331,0.9713696646076038
--1.2847439805386887,0.9113622349097761
--1.2868711331405236,0.8501058145524012
--1.2864146386353401,0.7877385648229778
--1.2833755266273537,0.7244011524380727
--1.277760651706261,0.6602364322754444
--1.2695826779870025,0.5953891251708501
--1.2588600505463818,0.5300054915062731
--1.2456169538209676,0.4642330013257634
--1.2298832570601115,0.3982200017229365
--1.2116944469571096,0.3321153822503289
--1.1910915476104509,0.26606823910524224
--1.1681210279956875,0.20022753884954092
--1.142834697156606,0.134741782421806
--1.1152895873521018,6.975867019969728e-2
--1.0855478254223112,5.42476886794363e-3
--1.0536764926641298,-5.81148191566605e-2
--1.0197474735321572,-0.12071678299768429
--0.9838372935063279,-0.18223992655072063
--0.9460269464918963,-0.24254548694528744
--0.9064017121410812,-0.3014974475186629
--0.8650509635083893,-0.3589628445957551
--0.8220679654734303,-0.41481206738311327
--0.7775496643859012,-0.4689191503006187
--0.7315964694071552,-0.5211620570915811
--0.6843120260415458,-0.5714229560703967
--0.6358029823683445,-0.6195884858869647
--0.5861787485014645,-0.6655500112084738
--0.5355512498195376,-0.7092038677418304
--0.48403467452291715,-0.7504515960441251
--0.4317452160869837,-0.7892001635937813
--0.37880081119262377,-0.8253621746215027
--0.3253208737250024,-0.8588560672277716
--0.2714260254405454,-0.8896062973422842
--0.2172378239096271,-0.9175435091104465
--0.162878488348571,-0.9426046913225816
--0.10847062395932561,-0.9647333195330816
--5.4136945398582714e-2,-0.98387948354892
-2.220446049250313e-16,-1.0"/></g><g stroke-opacity="1.0" fill="none" stroke-width="2.0e-3" stroke="#a6cfe3"><polyline points="0.6086376856300113,-0.9414395063606076
-0.5527795469220069,-0.9702714111607404
-0.4941819474107332,-0.9938628196756247
-0.43307614505076697,-1.01212062739374
-0.3697032965274347,-1.0249727790892234
-0.3043135055215591,-1.0323685531909215
-0.23716483566448598,-1.034278761957263
-0.16852229207883185,-1.0306958666669384
-9.865677552433416e-2,-1.0216340073707895
-2.784401327631536e-2,-1.0071289470874882
--4.363652904390536e-2,-0.9872379306632411
--0.11550275039214353,-0.9620394588525345
--0.18747102762529155,-0.931632978511518
--0.25925733483228797,-0.896138490126698
--0.3305783642546314,-0.8556960742278399
--0.4011526443726703,-0.8104653385541138
--0.4707016507451012,-0.7606247881552686
--0.5389509052176902,-0.7063711209137438
--0.6056310591631523,-0.647918451268001
--0.6704789564771294,-0.5854974652006466
--0.73323867213511,-0.5193545098262526
--0.7936625222115783,-0.44975062117184006
--0.8515120413753138,-0.3769604939869362
--0.9065589240031089,-0.3012713976488932
--0.9585859251977599,-0.222982042441898
--1.0073877181544273,-0.14240140068395002
--1.0527717044917297,-5.984748735427292e-2
--1.0945587743495653,2.4353894966515188e-2
--1.132584013253901,0.10987044189034756
--1.1666973529588605,0.19636465867530917
--1.1967641636975312,0.2834951921631992
--1.2226657855041465,0.3709181779444952
--1.2442999965107613,0.4582885974340818
--1.261581416370263,0.5452616395019807
--1.2744418432135962,0.6314940612853532
--1.2828305228113805,0.7166455428112668
--1.2867143488776662,0.8003800300841508
--1.2860779937253213,0.8823670613373866
--1.280923968757409,0.9622830712149293
--1.2712726145558277,1.0398126677359452
--1.2571620206063265,1.1146498770028685
--1.2386478749767074,1.1864993507405917
--1.2158032445414615,1.2550775319011742
--1.188718286620198,1.3201137737339654
--1.1574998931678915,1.3813514079046847
--1.1222712689211713,1.438548757448074
--1.0831714451655121,1.4914800905564687
--1.0403547310422663,1.5399365114401158
--0.993990104560983,1.5837267847434204
--0.944260545720401,1.6226780902635274
--0.891362314369989,1.656636704992708
--0.8355041756619843,1.6854686097928409
--0.7769065761507113,1.7090600183077247
--0.7158007737907442,1.7273178260258404
--0.6524279252674126,1.7401699777213235
--0.5870381342615362,1.7475657518230217
--0.5198894644044634,1.7494759605893633
--0.4512469208188099,1.7458930652990385
--0.38138140426431133,1.7368312060028896
--0.3105686420162932,1.7223261457195886
--0.23908809969607225,1.702435129295342
--0.16722187834783409,1.6772366574846351
--9.52536011146865e-2,1.6468301771436185
--2.3467293907689424e-2,1.611335688758798
-4.7853735514653994e-2,1.57089327285994
-0.11842801563269267,1.5256625371862147
-0.18797702200512378,1.475821986787368
-0.25622627647771257,1.4215683195458442
-0.32290643042317524,1.363115649900101
-0.38775432773715246,1.3006946638327468
-0.45051404339513246,1.234551708458353
-0.5109378934716009,1.1649478198039402
-0.5687874126353369,1.0921576926190362
-0.6238342952631308,1.0164685962809936
-0.6758612964577821,0.9381792410739984
-0.7246630894144497,0.8575985993160504
-0.7700470757517519,0.7750446859863742
-0.8118341456095877,0.6908433036655852
-0.8498593845139233,0.6053267567417535
-0.8839727242188831,0.5188325399567908
-0.9140395349575536,0.431702006468901
-0.9399411567641689,0.34427902068760585
-0.9615753677707835,0.25690860119802017
-0.9788567876302863,0.16993555913011882
-0.9917172144736188,8.370313734674673e-2
-1.0001058940714032,-1.4483441791663942e-3
-1.0039897201376888,-8.518283145204997e-2
-1.0033533649853439,-0.16716986270528666
-0.998199340017432,-0.24708587258282888
-0.9885479858158499,-0.3246154691038452
-0.9744373918663491,-0.39945267837076814
-0.95592324623673,-0.47130215210849125
-0.9330786158014837,-0.5398803332690743
-0.9059936578802201,-0.604916575101865
-0.8747752644279139,-0.6661542092725852
-0.8395466401811942,-0.723351558815974
-0.8004468164255343,-0.7762828919243687
-0.7576301023022891,-0.8247393128080156
-0.7112654758210062,-0.86852958611132
-0.6615359169804229,-0.907480891631427
-0.6086376856300113,-0.9414395063606076"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="3.0e-3" stroke="#1f78b5"><rect height="3.0000000000000027e-2" y="0.34259859931604997" width="3.0000000000000027e-2" x="-0.1563623143699885"/><rect height="3.0e-2" y="-1.5e-2" width="2.9999999999999916e-2" x="0.985"/><rect height="2.9999999999999916e-2" y="-1.015" width="3.0e-2" x="-1.4999999999999777e-2"/></g><g fill-opacity="0.1" stroke-opacity="1.0" fill="#6666cc" stroke-width="2.0e-3" stroke="#808080"><rect height="2.749539690023556" y="-1.0" width="2.287006238108949" x="-1.2870062381089489"/></g><g stroke-dasharray="3.0e-2 1.0e-2" stroke-opacity="1.0" stroke-linecap="round" fill="none" stroke-width="5.0e-3" stroke="#e63305"><polyline points="0.6086376856300113,-0.9414395063606076
--0.891362314369989,1.656636704992708"/></g><g stroke-dasharray="3.0e-2 1.0e-2" stroke-opacity="1.0" stroke-linecap="round" fill="none" stroke-width="5.0e-3" stroke="#e6e605"><polyline points="-1.0073877181544273,-0.14240140068395002
-0.7246630894144497,0.8575985993160504"/></g><g></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="458.15392152217606" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7080296806108183 -0.46949693515431773 1.4696780298956873 0.9623477793311109" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"><g class="ellipse"><g fill="none" stroke="rgb(66%, 7%, 55%)" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.223887331075026,-3.2338301402926595e-2
+0.22211215024874542,-1.8050870674847785e-2
+0.2195774697347237,-3.6163721322803877e-3
+0.21628900639857507,1.0932637818583113e-2
+0.2122541772314619,2.556334449587111e-2
+0.20748208262138101,4.024274895417046e-2
+0.20198348582762138,5.4937742412265844e-2
+0.19577078870468267,6.961518092860564e-2
+0.1888580037304135,8.424196015607399e-2
+0.1812607224014553,9.878509000745644e-2
+0.1729960800672744,0.11321176906319891
+0.1640827172821009,0.12748945855363364
+0.15454073776193988,0.1415859557488101
+0.14439166304148265,0.15546946659040178
+0.13365838393318807,0.16910867740187208
+0.12236510889801455,0.18247282551515775
+0.11053730944425211,0.1955317686545776
+9.820166267760311e-2,0.2082560529214712
+8.538599113208833e-2,0.2206169792262318
+7.21192000174895e-2,0.23258666801790007
+5.843121202485968e-2,0.24413812216532182
+4.435289983714863e-2,0.2552452878480457
+2.9916016497160913e-2,0.2658831133196224
+1.5153123789899303e-2,0.27602760541076804
+9.751880082431441e-5,0.28565588364495254
+-1.5216841184325536e-2,0.29474623184435317
+-3.075541526876946e-2,0.30327814710978496
+-4.6483156850226526e-2,0.3112323860641286
+-6.236459266705857e-2,0.3185910082549615
+-7.836390280672456e-2,0.3253374166184956
+-9.444500149609109e-2,0.3314563949135587
+-0.11057161849138003,0.33693414204118854
+-0.12670738088418354,0.34175830317243294
+-0.14281589513903287,0.345917997614148
+-0.1588608291774915,0.34940384334994556
+-0.1748059943236358,0.352207978200938
+-0.19061542692609418,0.3543240775585523
+-0.20625346947255635,0.3557473686494201
+-0.22168485101379692,0.3564746413001677
+-0.23687476671582108,0.3565042551778276
+-0.25178895636070997,0.3558361434895403
+-0.26639378161910443,0.35447181313320353
+-0.28065630192004676,0.3524143412987266
+-0.29454434874705726,0.3496683685275576
+-0.30802659819287415,0.3462400882461376
+-0.3210726416092128,0.3421372327968856
+-0.3336530541921973,0.33736905599822564
+-0.34573946134877126,0.3319463122729871
+-0.3573046026944027,0.32588123239225436
+-0.36832239353773844,0.31918749588937634
+-0.3787679837135318,0.3118802002063522
+-0.38861781363114806,0.3039758266421836
+-0.39784966741223304,0.295492203179997
+-0.4064427229976957,0.28644846427677406
+-0.4143775991109887,0.2768650077063871
+-0.4216363989717655,0.26676344855327505
+-0.42820275066131774,0.25616657046052704
+-0.43406184404875114,0.24509827424233083
+-0.43920046419461517,0.2335835239766882
+-0.4436070211566446,0.22164829069998443
+-0.44727157613038804,0.2093194938304045
+-0.4501858638657654,0.1966249404523141
+-0.45234331130899175,0.18359326259854658
+-0.4537390524278258,0.170253852672054
+-0.4543699391867002,0.15663679715257472
+-0.454234548646985,0.14277280873783976
+-0.4533331861763652,0.1286931570723705
+-0.45166788476009717,0.11442959822010795
+-0.4492424004156956,0.10001430303994024
+-0.44606220372139327,8.547978462568168e-2
+-0.4421344674774816,7.085882497415069e-2
+-0.4374680505283599,5.61844010467521e-2
+-0.432073477781784,4.1489610391323595e-2
+-0.4259629164703771,2.6807596492002483e-2
+-0.4191501487089479,1.2171474015490069e-2
+-0.4116505404095079,-2.385745877692913e-3
+-0.40348100662410136,-1.6831229988493956e-2
+-0.39465997339361436,-3.113239713323246e-2
+-0.38520733618861325,-4.525699162909269e-2
+-0.37514441503594353,-5.9173156045464914e-2
+-0.3644939064323047,-7.284950305704352e-2
+-0.3532798321532531,-8.62551862366232e-2
+-0.3415274850730936,-9.935996962792293e-2
+-0.3292633721178644,-0.11213429594151525
+-0.31651515448007367,-0.12454935322005667
+-0.303311585230043,-0.13657713982244568
+-0.2896824444645611,-0.14819052758035212
+-0.27565847213912414,-0.15936332298466382
+-0.2612712987352564,-0.17007032626384544
+-0.2465533739192841,-0.18028738822096946
+-0.2315378933534744,-0.18999146470121597
+-0.2162587238246108,-0.19916066856699688
+-0.20075032685887717,-0.20777431906347799
+-0.18504768099532748,-0.215812988463154
+-0.16918620289326092,-0.22325854588427274
+-0.15320166745142966,-0.23009419818427979
+-0.13713012711925537,-0.23630452783604672
+-0.12100783058204267,-0.2418755277014566
+-0.10487114100358713,-0.24679463262391754
+-8.875645401058674e-2,-0.2510507477685455
+-7.27001156038285e-2,-0.2546342736461006"/></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="2.0e-3" stroke-opacity="1.0"><polyline points="0.10781418152970379,-0.24161651177749155
+9.12473587940632e-2,-0.24802572808665968
+7.386804637350497e-2,-0.2532700031790618
+5.574483247429951e-2,-0.25732864029678915
+3.694924114199871e-2,-0.26018562185335337
+1.7555449988702065e-2,-0.26182967264778134
+-2.3600025520886803e-3,-0.2622543043626825
+-2.2718519287699745e-2,-0.2614578411706743
+-4.343975445349735e-2,-0.25944342634810613
+-6.444193080091404e-2,-0.2562190098699838
+-8.564216233488803e-2,-0.2517973170350509
+-0.10695678142701942,-0.24619579824484772
+-0.12830166901347467,-0.2394365601349484
+-0.14959258657450153,-0.23154627833017072
+-0.17074550858538184,-0.22255609216807126
+-0.1916769541267892,-0.21250148180620654
+-0.21230431634583985,-0.20142212819816008
+-0.23254618846760045,-0.18936175649094789
+-0.252322685070438,-0.17636796346183847
+-0.271555757357283,-0.16249202967561827
+-0.29016950117857426,-0.1477887171036305
+-0.30809045659126,-0.13231605300329208
+-0.32524789777163166,-0.11613510091101964
+-0.34157411213783995,-9.930971965234714e-2
+-0.3570046675805192,-8.1906311320317e-2
+-0.37147866674688734,-6.399355921675498e-2
+-0.38493898737477605,-4.564215679065575e-2
+-0.39733250772810225,-2.6924528643436973e-2
+-0.4086103162440926,-7.914544702124549e-3
+-0.41872790456487485,1.1312771311500325e-2
+-0.4276453431916336,3.068153796525719e-2
+-0.435327439068099,5.0115315585911646e-2
+-0.4417438744714624,6.953740793164315e-2
+-0.4468693266625773,8.88711648770733e-2
+-0.4506835678232417,0.10804028491629158
+-0.4531715448861555,0.12696911629004115
+-0.45432343894249994,0.14558295554865047
+-0.4541347039926851,0.1638083423724201
+-0.4526060848873329,0.1815733494859435
+-0.4497436143876927,0.19880786652220378
+-0.44555858935708803,0.2154438767161604
+-0.4400675261773588,0.2314157253358478
+-0.4332920955662472,0.24666037879160813
+-0.42525903705297546,0.2611176734008706
+-0.41600005344954,0.27473055282672243
+-0.4055516857341965,0.2874452932532029
+-0.39395516884091236,0.29921171540866065
+-0.3812562689239204,0.3099833826004156
+-0.36750510273961795,0.31971778397916795
+-0.35275593985862375,0.328376502309901
+-0.33706698848857775,0.3359253655871556
+-0.3205001657529374,0.34233458189632376
+-0.30312085333237876,0.34757885698872576
+-0.28499763943317347,0.3516374941064532
+-0.2662020481008727,0.3544944756630174
+-0.24680825694757613,0.3561385264574453
+-0.22689280440678533,0.3565631581723465
+-0.20653428767117443,0.3557666949803383
+-0.1858130525053766,0.35375228015777005
+-0.16481087615796003,0.35052786367964783
+-0.14361064462398615,0.34610617084471496
+-0.12229602553185459,0.34050465205451175
+-0.1009511379453995,0.33374541394461243
+-7.966022038437237e-2,0.32585513213983475
+-5.8507298373492056e-2,0.3168649459777353
+-3.7575852832084644e-2,0.30681033561587057
+-1.694849061303394e-2,0.295730982007824
+3.2933815087263785e-3,0.2836706103006118
+2.3069878111564135e-2,0.2706768172715023
+4.2302950398409145e-2,0.2568008834852822
+6.0916694219700473e-2,0.24209757091329454
+7.883764963238604e-2,0.2266249068129561
+9.599509081275781e-2,0.21044395472068356
+0.11232130517896577,0.19361857346201117
+0.12775186062164534,0.17621516512998092
+0.14222585978801328,0.158302413026419
+0.155686180415902,0.1399510106003199
+0.1680797007692283,0.12123338245310095
+0.17935750928521854,0.1022233985117888
+0.1894750976060009,8.299608249816365e-2
+0.19839253623275965,6.362731584440678e-2
+0.20607463210922505,4.419353822375255e-2
+0.2124910675125884,2.4771445878021103e-2
+0.21761651970370344,5.4376889325906674e-3
+0.22143076086436775,-1.37314311066275e-2
+0.22391873792728167,-3.266026248037712e-2
+0.2250706319836261,-5.127410173898639e-2
+0.22488189703381123,-6.949948856275578e-2
+0.22335327792845894,-8.726449567627947e-2
+0.22049080742881888,-0.10449901271253981
+0.21630578239821419,-0.12113502290649636
+0.21081471921848483,-0.13710687152618373
+0.20403928860737341,-0.15235152498194382
+0.19600623009410156,-0.16680881959120653
+0.1867472464906661,-0.1804216990170585
+0.17629887877532258,-0.19313643944353887
+0.16470236188203846,-0.2049028615989965
+0.15200346196504644,-0.21567452879075155
+0.13825229578074394,-0.22540893016950392
+0.12350313289974968,-0.23406764850023698
+0.10781418152970379,-0.24161651177749144"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="4.7154426904832014e-2" cx="-0.11462640347943698" r="1.5e-2"/></g><g fill="rgb(100%, 71%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="0.20888733107502566" width="3.0000000000000027e-2" y="-4.7338301402926594e-2" height="3.0e-2"/><rect x="-8.77001156038285e-2" width="3.0e-2" y="-0.2696342736461005" height="3.0000000000000027e-2"/></g><g fill="rgb(53%, 51%, 28%)" stroke="rgb(50%, 50%, 50%)" stroke-width="2.0e-3" fill-opacity="5.0e-3" stroke-opacity="1.0"><rect x="-0.4544100096243192" width="0.6782973406993452" y="-0.2546342736461006" height="0.6112115986149814"/></g><g fill="none" stroke="rgb(21%, 29%, 7%)" stroke-dasharray="3.0e-2 1.0e-2" stroke-linecap="round" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.10781418152970379,-0.24161651177749155
+-0.33706698848857775,0.3359253655871556"/></g><g fill="none" stroke="rgb(73%, 34%, 1%)" stroke-dasharray="3.0e-2 1.0e-2" stroke-linecap="round" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="-0.37147866674688734,-6.399355921675498e-2
+0.14222585978801328,0.158302413026419"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5175812856221098" width="0.8897623400365626" y="-0.3657822597676875" height="0.7780359028511088"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.5332829739756962, 0.4122536430834213)"><polyline points="-0.5332829739756962,0.4272536430834213
+-0.5332829739756962,0.39725364308342126"/></g><g transform="rotate(-90.0, -0.5332829739756962, 0.30110565696183433)"><polyline points="-0.5332829739756962,0.31610565696183435
+-0.5332829739756962,0.2861056569618343"/></g><g transform="rotate(-90.0, -0.5332829739756962, 0.1899576708402474)"><polyline points="-0.5332829739756962,0.2049576708402474
+-0.5332829739756962,0.17495767084024738"/></g><g transform="rotate(-90.0, -0.5332829739756962, 7.880968471866046e-2)"><polyline points="-0.5332829739756962,9.380968471866045e-2
+-0.5332829739756962,6.380968471866046e-2"/></g><g transform="rotate(-90.0, -0.5332829739756962, -3.2338301402926595e-2)"><polyline points="-0.5332829739756962,-1.7338301402926595e-2
+-0.5332829739756962,-4.7338301402926594e-2"/></g><g transform="rotate(-90.0, -0.5332829739756962, -0.14348628752451342)"><polyline points="-0.5332829739756962,-0.1284862875245134
+-0.5332829739756962,-0.15848628752451344"/></g><g transform="rotate(-90.0, -0.5332829739756962, -0.2546342736461005)"><polyline points="-0.5332829739756962,-0.23963427364610046
+-0.5332829739756962,-0.2696342736461005"/></g><g transform="rotate(-90.0, -0.5332829739756962, -0.3657822597676875)"><polyline points="-0.5332829739756962,-0.3507822597676875
+-0.5332829739756962,-0.38078225976768754"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.552125" y="0.4229516367476241">-2.00</text><text x="-0.552125" y="0.3118036506260371">-1.50</text><text x="-0.552125" y="0.20065566450445016">-1.00</text><text x="-0.552125" y="8.950767838286317e-2">-0.50</text><text x="-0.552125" y="-2.164030773872372e-2"> 0.00</text><text x="-0.552125" y="-0.13278829386031066"> 0.50</text><text x="-0.552125" y="-0.24393627998189782"> 1.00</text><text x="-0.552125" y="-0.35508426610348465"> 1.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5175812856221098,0.4122536430834213
+0.3721810544144528,0.4122536430834213"/><polyline points="-0.5175812856221098,0.30110565696183433
+0.3721810544144528,0.30110565696183433"/><polyline points="-0.5175812856221098,0.1899576708402474
+0.3721810544144528,0.1899576708402474"/><polyline points="-0.5175812856221098,7.880968471866046e-2
+0.3721810544144528,7.880968471866046e-2"/><polyline points="-0.5175812856221098,-3.2338301402926595e-2
+0.3721810544144528,-3.2338301402926595e-2"/><polyline points="-0.5175812856221098,-0.14348628752451342
+0.3721810544144528,-0.14348628752451342"/><polyline points="-0.5175812856221098,-0.2546342736461005
+0.3721810544144528,-0.2546342736461005"/><polyline points="-0.5175812856221098,-0.3657822597676875
+0.3721810544144528,-0.3657822597676875"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5249087401871169" width="2.093558447144872e-3" y="-0.3673383315733896" height="0.7811480464625131"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5175812856221098,0.4505947201689546
+-0.5175812856221098,0.42059472016895455"/><polyline points="-0.3692875622826828,0.4505947201689546
+-0.3692875622826828,0.42059472016895455"/><polyline points="-0.22099383894325564,0.4505947201689546
+-0.22099383894325564,0.42059472016895455"/><polyline points="-7.27001156038285e-2,0.4505947201689546
+-7.27001156038285e-2,0.42059472016895455"/><polyline points="7.559360773559864e-2,0.4505947201689546
+7.559360773559864e-2,0.42059472016895455"/><polyline points="0.22388733107502568,0.4505947201689546
+0.22388733107502568,0.42059472016895455"/><polyline points="0.3721810544144528,0.4505947201689546
+0.3721810544144528,0.42059472016895455"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5175812856221098" y="0.485">-1.50</text><text x="-0.3692875622826828" y="0.485">-1.00</text><text x="-0.22099383894325564" y="0.485">-0.50</text><text x="-7.27001156038285e-2" y="0.485"> 0.00</text><text x="7.559360773559864e-2" y="0.485"> 0.50</text><text x="0.22388733107502568" y="0.485"> 1.00</text><text x="0.3721810544144528" y="0.485"> 1.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5175812856221098,0.4122536430834213
+-0.5175812856221098,-0.3657822597676875"/><polyline points="-0.3692875622826828,0.4122536430834213
+-0.3692875622826828,-0.3657822597676875"/><polyline points="-0.22099383894325564,0.4122536430834213
+-0.22099383894325564,-0.3657822597676875"/><polyline points="-7.27001156038285e-2,0.4122536430834213
+-7.27001156038285e-2,-0.3657822597676875"/><polyline points="7.559360773559864e-2,0.4122536430834213
+7.559360773559864e-2,-0.3657822597676875"/><polyline points="0.22388733107502568,0.4122536430834213
+0.22388733107502568,-0.3657822597676875"/><polyline points="0.3721810544144528,0.4122536430834213
+0.3721810544144528,-0.3657822597676875"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5186280648456822" width="0.8918558984837076" y="0.4200340021119324" height="3.1121436114043832e-3"/></g></g></g><g class="legend"><g class="legendBorder"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="2.5e-3" fill-opacity="0.0" stroke-opacity="1.0"><rect x="0.4408759409613934" width="0.2211321109796751" y="-0.35907170010559686" height="0.45515100316789886"/></g></g><g class="legendContent"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="start"><text x="0.4539606812560488" y="6.495786694825767e-2">Bounding Box</text></g><g fill="rgb(53%, 51%, 28%)" stroke="rgb(50%, 50%, 50%)" stroke-width="2.5e-3" fill-opacity="5.0e-3" stroke-opacity="1.0"><rect x="0.621445357027637" width="1.308474029465545e-2" y="4.55069693769799e-2" height="1.945089757127777e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="start"><text x="0.4539606812560488" y="2.714994720168895e-3">Endpoints</text></g><g fill="rgb(100%, 71%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="0.6154877271749648" width="2.499999999999991e-2" y="-1.9510454065469907e-2" height="2.5e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="start"><text x="0.4539606812560488" y="-5.952787750791977e-2">Centroid</text></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-6.925332629355863e-2" cx="0.6279877271749648" r="1.25e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="start"><text x="0.4539606812560488" y="-0.12177074973600843">Arc</text></g><g fill="none" stroke="rgb(66%, 7%, 55%)" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.621445357027637,-0.1314961985216474
+0.6476148376169477,-0.1314961985216474"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="start"><text x="0.4539606812560488" y="-0.1840136219640971">Full Ellipse</text></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="2.0e-3" stroke-opacity="1.0"><polyline points="0.621445357027637,-0.19373907074973606
+0.6476148376169477,-0.19373907074973606"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="start"><text x="0.4539606812560488" y="-0.24625649419218587">Minor Axis</text></g><g fill="none" stroke="rgb(73%, 34%, 1%)" stroke-dasharray="3.0e-2 1.0e-2" stroke-linecap="round" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.621445357027637,-0.25598194297782484
+0.6476148376169477,-0.25598194297782484"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="start"><text x="0.4539606812560488" y="-0.30849936642027465">Major Axis</text></g><g fill="none" stroke="rgb(21%, 29%, 7%)" stroke-dasharray="3.0e-2 1.0e-2" stroke-linecap="round" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.621445357027637,-0.3182248152059134
+0.6476148376169477,-0.3182248152059134"/></g></g></g><g class="title"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.1871168942897066e-2" fill-opacity="1.0" text-anchor="middle"><text x="2.680933433702537e-2" y="-0.43600000000000005">ArcPosition (Point 1 0) (Point 0 1) (ArcInfo (Point 1.5 1) (pi / 3) True True)</text></g></g></g></svg>
diff --git a/other/ellipse2.svg b/other/ellipse2.svg
new file mode 100644
--- /dev/null
+++ b/other/ellipse2.svg
@@ -0,0 +1,261 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="597.6099976648998" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.9544783312696444 -0.48029831412515483 1.9435885322411657 0.975680731498238" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"><g class="ellipse"><g fill="none" stroke="rgb(66%, 7%, 55%)" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.3471595667841385,-3.2338301402926595e-2
+0.34439768046583885,-1.8050870674847785e-2
+0.3404541388675415,-3.6163721322803877e-3
+0.3353378364819595,1.0932637818583113e-2
+0.3290603129145857,2.556334449587111e-2
+0.3216357268565957,4.024274895417046e-2
+0.31308082415051475,5.4937742412265844e-2
+0.3034149000206692,6.961518092860564e-2
+0.2926597555536212,8.424196015607399e-2
+0.28083964852672905,9.878509000745644e-2
+0.2679812386957485,0.11321176906319891
+0.25411352766487183,0.12748945855363364
+0.23926779347482552,0.1415859557488101
+0.22347752005656019,0.15546946659040178
+0.20677832170965083,0.16910867740187208
+0.18920786277573298,0.18247282551515775
+0.1708057726881651,0.1955317686545776
+0.1516135565894987,0.2082560529214712
+0.1316745017183728,0.2206169792262318
+0.11103357977695993,0.23258666801790007
+8.973734549917989e-2,0.24413812216532182
+6.78338316484478e-2,0.2552452878480457
+4.537244068179125e-2,0.2658831133196224
+2.2403833324679656e-2,0.27602760541076804
+-1.0201856921179253e-3,0.28565588364495254
+-2.4846784475928807e-2,0.29474623184435317
+-4.9022223132299425e-2,0.30327814710978496
+-7.349197497306958e-2,0.3112323860641286
+-9.820084949903274e-2,0.3185910082549615
+-0.12309311687979396,0.3253374166184956
+-0.14811263365006366,0.3314563949135587
+-0.17320296933888957,0.33693414204118854
+-0.1983075337462198,0.34175830317243294
+-0.22336970457972305,0.345917997614148
+-0.24833295516399645,0.34940384334994556
+-0.2731409819341122,0.352207978200938
+-0.2977378314259447,0.3543240775585523
+-0.32206802647686594,0.3557473686494201
+-0.346076691352158,0.3564746413001677
+-0.3697096755149301,0.3565042551778276
+-0.3929136757603872,0.3558361434895403
+-0.4156363564389704,0.35447181313320353
+-0.43782646749722137,0.3524143412987266
+-0.4594339600701289,0.3496683685275576
+-0.48041009936424467,0.3462400882461376
+-0.5007075745769665,0.3421372327968856
+-0.5202806056040705,0.33736905599822564
+-0.5390850462948154,0.3319463122729871
+-0.5570784840217349,0.32588123239225436
+-0.5742203353405408,0.31918749588937634
+-0.590471937524379,0.3118802002063522
+-0.6057966357659896,0.3039758266421836
+-0.6201598658510872,0.295492203179997
+-0.633529232116497,0.28644846427677406
+-0.6458745805172142,0.2768650077063871
+-0.657168066637589,0.26676344855327505
+-0.6673842184932376,0.25616657046052704
+-0.6764999939820354,0.24509827424233083
+-0.6844948328546122,0.2335835239766882
+-0.691350703087132,0.22164829069998443
+-0.6970521415517674,0.2093194938304045
+-0.701586288893135,0.1966249404523141
+-0.7049429185320335,0.18359326259854658
+-0.7071144597310632,0.170253852672054
+-0.7080960146701072,0.15663679715257472
+-0.7078853694931591,0.14277280873783976
+-0.7064829993015829,0.1286931570723705
+-0.7038920670825409,0.11442959822010795
+-0.7001184165750101,0.10001430303994024
+-0.6951705590894723,8.547978462568168e-2
+-0.6890596543110119,7.085882497415069e-2
+-0.6817994851291126,5.61844010467521e-2
+-0.6734064265509295,4.1489610391323595e-2
+-0.6638994087681459,2.6807596492002483e-2
+-0.6532998744607208,1.2171474015490069e-2
+-0.6416317304338225,-2.385745877692913e-3
+-0.6289212936970329,-1.6831229988493956e-2
+-0.6151972321074346,-3.113239713323246e-2
+-0.6004904997104632,-4.525699162909269e-2
+-0.5848342669243538,-5.9173156045464914e-2
+-0.5682638457256555,-7.284950305704352e-2
+-0.5508166100045472,-8.62551862366232e-2
+-0.5325319112695963,-9.935996962792293e-2
+-0.5134509898920827,-0.11213429594151525
+-0.49361688209006677,-0.12454935322005667
+-0.4730743228620086,-0.13657713982244568
+-0.4518696450888526,-0.14819052758035212
+-0.4300506750321561,-0.15936332298466382
+-0.40766662446396545,-0.17007032626384544
+-0.38476797967172366,-0.18028738822096946
+-0.361406387588569,-0.18999146470121597
+-0.3376345393058412,-0.19916066856699688
+-0.3135060512305369,-0.20777431906347799
+-0.28907534415574787,-0.215812988463154
+-0.2643975205168486,-0.22325854588427274
+-0.23952824011026097,-0.23009419818427979
+-0.21452359455511694,-0.23630452783604672
+-0.18943998078096735,-0.2418755277014566
+-0.16433397382686732,-0.24679463262391754
+-0.13926219923875294,-0.2510507477685455
+-0.11428120535289066,-0.2546342736461006"/></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="2.0e-3" stroke-opacity="1.0"><polyline points="0.16656903825591596,-0.24161651177749155
+0.1407938156003571,-0.24802572808665968
+0.11375449403649895,-0.2532700031790618
+8.555778541346293e-2,-0.25732864029678915
+5.63149692583339e-2,-0.26018562185335337
+2.614145360670339e-2,-0.26182967264778134
+-4.843680460118738e-3,-0.2622543043626825
+-3.6518148773732606e-2,-0.2614578411706743
+-6.875694667839238e-2,-0.25944342634810613
+-0.10143284236727412,-0.2562190098699838
+-0.13441687900829014,-0.2517973170350509
+-0.16757888367779195,-0.24619579824484772
+-0.2007879810936275,-0.2394365601349484
+-0.23391311012008986,-0.23154627833017072
+-0.26682354100634387,-0.22255609216807126
+-0.2993893913170266,-0.21250148180620654
+-0.3314821385188843,-0.20142212819816008
+-0.3629751272004923,-0.18936175649094789
+-0.3937440689233023,-0.17636796346183847
+-0.42366753273132673,-0.16249202967561827
+-0.45262742438364556,-0.1477887171036305
+-0.48050945241842324,-0.13231605300329208
+-0.5072035792090932,-0.11613510091101964
+-0.5326044552325992,-9.930971965234714e-2
+-0.5566118348358332,-8.1906311320317e-2
+-0.5791309718594293,-6.399355921675498e-2
+-0.6000729935575706,-4.564215679065575e-2
+-0.6193552513381141,-2.6924528643436973e-2
+-0.6369016469388257,-7.914544702124549e-3
+-0.652642932752455,1.1312771311500325e-2
+-0.6665169851154051,3.068153796525719e-2
+-0.678469049481451,5.0115315585911646e-2
+-0.6884519565129188,6.953740793164315e-2
+-0.6964263082365114,8.88711648770733e-2
+-0.7023606335291108,0.10804028491629158
+-0.7062315123199225,0.12696911629004115
+-0.7080236680187952,0.14558295554865047
+-0.707730027805944,0.1638083423724201
+-0.705351750545137,0.1815733494859435
+-0.7008982222101914,0.19880786652220378
+-0.6943870188428215,0.2154438767161604
+-0.6858438371880327,0.2314157253358478
+-0.6753023932808077,0.24666037879160813
+-0.6628042893843209,0.2611176734008706
+-0.648398849804811,0.27473055282672243
+-0.6321429262310793,0.2874452932532029
+-0.6141006733668462,0.29921171540866065
+-0.5943432957414451,0.3099833826004156
+-0.572948766698077,0.31971778397916795
+-0.5500015206686448,0.328376502309901
+-0.5255921199496276,0.3359253655871556
+-0.49981689729406864,0.34233458189632376
+-0.47277757573021034,0.34757885698872576
+-0.4445808671071745,0.3516374941064532
+-0.4153380509520453,0.3544944756630174
+-0.38516453530041506,0.3561385264574453
+-0.35417940123359265,0.3565631581723465
+-0.32250493291997895,0.3557666949803383
+-0.29026613501531906,0.35375228015777005
+-0.25759023932643754,0.35052786367964783
+-0.22460620268542153,0.34610617084471496
+-0.1914441980159195,0.34050465205451175
+-0.15823510060008417,0.33374541394461243
+-0.12510997157362158,0.32585513213983475
+-9.219954068736758e-2,0.3168649459777353
+-5.963369037668487e-2,0.30681033561587057
+-2.7540943174827026e-2,0.295730982007824
+3.952045506780855e-3,0.2836706103006118
+3.472098722959105e-2,0.2706768172715023
+6.46444510376154e-2,0.2568008834852822
+9.360434268993423e-2,0.24209757091329454
+0.1214863707247118,0.2266249068129561
+0.14818049751538176,0.21044395472068356
+0.17358137353888758,0.19361857346201117
+0.19758875314212188,0.17621516512998092
+0.22010789016571786,0.158302413026419
+0.24104991186385893,0.1399510106003199
+0.26033216964440276,0.12123338245310095
+0.2778785652451141,0.1022233985117888
+0.29361985105874355,8.299608249816365e-2
+0.3074939034216937,6.362731584440678e-2
+0.3194459677877395,4.419353822375255e-2
+0.32942887481920713,2.4771445878021103e-2
+0.3374032265428002,5.4376889325906674e-3
+0.3433375518353994,-1.37314311066275e-2
+0.3472084306262111,-3.266026248037712e-2
+0.3490005863250838,-5.127410173898639e-2
+0.3487069461122325,-6.949948856275578e-2
+0.34632866885142555,-8.726449567627947e-2
+0.34187514051647994,-0.10449901271253981
+0.33536393714911017,-0.12113502290649636
+0.3268207554943212,-0.13710687152618373
+0.31627931158709655,-0.15235152498194382
+0.30378120769060946,-0.16680881959120653
+0.28937576811109955,-0.1804216990170585
+0.2731198445373677,-0.19313643944353887
+0.25507759167313493,-0.2049028615989965
+0.23532021404773373,-0.21567452879075155
+0.21392568500436537,-0.22540893016950392
+0.19097843897493316,-0.23406764850023698
+0.16656903825591618,-0.24161651177749144"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="4.7154426904832014e-2" cx="-0.17951154084685572" r="1.5e-2"/></g><g fill="rgb(100%, 71%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="0.33215956678413805" width="3.0000000000000027e-2" y="-4.7338301402926594e-2" height="3.0e-2"/><rect x="-0.12928120535289067" width="3.0000000000000013e-2" y="-0.2696342736461005" height="3.0000000000000027e-2"/></g><g fill="rgb(53%, 51%, 28%)" stroke="rgb(50%, 50%, 50%)" stroke-width="2.0e-3" fill-opacity="5.0e-3" stroke-opacity="1.0"><rect x="-0.7081583576110569" width="1.0553179243951956" y="-0.2546342736461006" height="0.6112115986149814"/></g><g fill="none" stroke="rgb(21%, 29%, 7%)" stroke-dasharray="3.0e-2 1.0e-2" stroke-linecap="round" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.16656903825591596,-0.24161651177749155
+-0.5255921199496276,0.3359253655871556"/></g><g fill="none" stroke="rgb(73%, 34%, 1%)" stroke-dasharray="3.0e-2 1.0e-2" stroke-linecap="round" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="-0.5791309718594293,-6.399355921675498e-2
+0.22010789016571786,0.158302413026419"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.806442363558434" width="1.3843223164110867" y="-0.3657822597676875" height="0.7780359028511088"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.8272071983046003, 0.4122536430834213)"><polyline points="-0.8272071983046003,0.4272536430834213
+-0.8272071983046003,0.39725364308342126"/></g><g transform="rotate(-90.0, -0.8272071983046003, 0.30110565696183433)"><polyline points="-0.8272071983046003,0.31610565696183435
+-0.8272071983046003,0.2861056569618343"/></g><g transform="rotate(-90.0, -0.8272071983046003, 0.1899576708402474)"><polyline points="-0.8272071983046003,0.2049576708402474
+-0.8272071983046003,0.17495767084024738"/></g><g transform="rotate(-90.0, -0.8272071983046003, 7.880968471866046e-2)"><polyline points="-0.8272071983046003,9.380968471866045e-2
+-0.8272071983046003,6.380968471866046e-2"/></g><g transform="rotate(-90.0, -0.8272071983046003, -3.2338301402926595e-2)"><polyline points="-0.8272071983046003,-1.7338301402926595e-2
+-0.8272071983046003,-4.7338301402926594e-2"/></g><g transform="rotate(-90.0, -0.8272071983046003, -0.14348628752451342)"><polyline points="-0.8272071983046003,-0.1284862875245134
+-0.8272071983046003,-0.15848628752451344"/></g><g transform="rotate(-90.0, -0.8272071983046003, -0.2546342736461005)"><polyline points="-0.8272071983046003,-0.23963427364610046
+-0.8272071983046003,-0.2696342736461005"/></g><g transform="rotate(-90.0, -0.8272071983046003, -0.3657822597676875)"><polyline points="-0.8272071983046003,-0.3507822597676875
+-0.8272071983046003,-0.38078225976768754"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.8521249999999998" y="0.4229516367476241">-2.00</text><text x="-0.8521249999999998" y="0.3118036506260371">-1.50</text><text x="-0.8521249999999998" y="0.20065566450445016">-1.00</text><text x="-0.8521249999999998" y="8.950767838286317e-2">-0.50</text><text x="-0.8521249999999998" y="-2.164030773872372e-2"> 0.00</text><text x="-0.8521249999999998" y="-0.13278829386031066"> 0.50</text><text x="-0.8521249999999998" y="-0.24393627998189782"> 1.00</text><text x="-0.8521249999999998" y="-0.35508426610348465"> 1.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.806442363558434,0.4122536430834213
+0.5778799528526526,0.4122536430834213"/><polyline points="-0.806442363558434,0.30110565696183433
+0.5778799528526526,0.30110565696183433"/><polyline points="-0.806442363558434,0.1899576708402474
+0.5778799528526526,0.1899576708402474"/><polyline points="-0.806442363558434,7.880968471866046e-2
+0.5778799528526526,7.880968471866046e-2"/><polyline points="-0.806442363558434,-3.2338301402926595e-2
+0.5778799528526526,-3.2338301402926595e-2"/><polyline points="-0.806442363558434,-0.14348628752451342
+0.5778799528526526,-0.14348628752451342"/><polyline points="-0.806442363558434,-0.2546342736461005
+0.5778799528526526,-0.2546342736461005"/><polyline points="-0.806442363558434,-0.3657822597676875
+0.5778799528526526,-0.3657822597676875"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.8161326197733116" width="2.768644632822115e-3" y="-0.3673383315733896" height="0.7811480464625131"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.806442363558434,0.4505947201689546
+-0.806442363558434,0.42059472016895455"/><polyline points="-0.5757219774899196,0.4505947201689546
+-0.5757219774899196,0.42059472016895455"/><polyline points="-0.3450015914214052,0.4505947201689546
+-0.3450015914214052,0.42059472016895455"/><polyline points="-0.11428120535289066,0.4505947201689546
+-0.11428120535289066,0.42059472016895455"/><polyline points="0.11643918071562376,0.4505947201689546
+0.11643918071562376,0.42059472016895455"/><polyline points="0.34715956678413806,0.4505947201689546
+0.34715956678413806,0.42059472016895455"/><polyline points="0.5778799528526526,0.4505947201689546
+0.5778799528526526,0.42059472016895455"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.806442363558434" y="0.485">-1.50</text><text x="-0.5757219774899196" y="0.485">-1.00</text><text x="-0.3450015914214052" y="0.485">-0.50</text><text x="-0.11428120535289066" y="0.485"> 0.00</text><text x="0.11643918071562376" y="0.485"> 0.50</text><text x="0.34715956678413806" y="0.485"> 1.00</text><text x="0.5778799528526526" y="0.485"> 1.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.806442363558434,0.4122536430834213
+-0.806442363558434,-0.3657822597676875"/><polyline points="-0.5757219774899196,0.4122536430834213
+-0.5757219774899196,-0.3657822597676875"/><polyline points="-0.3450015914214052,0.4122536430834213
+-0.3450015914214052,-0.3657822597676875"/><polyline points="-0.11428120535289066,0.4122536430834213
+-0.11428120535289066,-0.3657822597676875"/><polyline points="0.11643918071562376,0.4122536430834213
+0.11643918071562376,-0.3657822597676875"/><polyline points="0.34715956678413806,0.4122536430834213
+0.34715956678413806,-0.3657822597676875"/><polyline points="0.5778799528526526,0.4122536430834213
+0.5778799528526526,-0.3657822597676875"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.8078266858748452" width="1.387090961043909" y="0.4200340021119324" height="3.1121436114043832e-3"/></g></g></g><g class="legend"><g class="legendBorder"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="2.5e-3" fill-opacity="0.0" stroke-opacity="1.0"><rect x="0.6687261048671302" width="0.2924380893418421" y="-0.35907170010559686" height="0.45515100316789886"/></g></g><g class="legendContent"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="start"><text x="0.686030133822269" y="6.495786694825767e-2">Bounding Box</text></g><g fill="rgb(53%, 51%, 28%)" stroke="rgb(50%, 50%, 50%)" stroke-width="2.5e-3" fill-opacity="5.0e-3" stroke-opacity="1.0"><rect x="0.907521704448043" width="1.7304028955138273e-2" y="4.55069693769799e-2" height="1.945089757127777e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="start"><text x="0.686030133822269" y="2.714994720168895e-3">Endpoints</text></g><g fill="rgb(100%, 71%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="0.9036737189256121" width="2.499999999999991e-2" y="-1.9510454065469907e-2" height="2.5e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="start"><text x="0.686030133822269" y="-5.952787750791977e-2">Centroid</text></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-6.925332629355863e-2" cx="0.9161737189256121" r="1.25e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="start"><text x="0.686030133822269" y="-0.12177074973600843">Arc</text></g><g fill="none" stroke="rgb(66%, 7%, 55%)" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.907521704448043,-0.1314961985216474
+0.9421297623583198,-0.1314961985216474"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="start"><text x="0.686030133822269" y="-0.1840136219640971">Full Ellipse</text></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="2.0e-3" stroke-opacity="1.0"><polyline points="0.907521704448043,-0.19373907074973606
+0.9421297623583198,-0.19373907074973606"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="start"><text x="0.686030133822269" y="-0.24625649419218587">Minor Axis</text></g><g fill="none" stroke="rgb(73%, 34%, 1%)" stroke-dasharray="3.0e-2 1.0e-2" stroke-linecap="round" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.907521704448043,-0.25598194297782484
+0.9421297623583198,-0.25598194297782484"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="start"><text x="0.686030133822269" y="-0.30849936642027465">Major Axis</text></g><g fill="none" stroke="rgb(21%, 29%, 7%)" stroke-dasharray="3.0e-2 1.0e-2" stroke-linecap="round" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.907521704448043,-0.3182248152059134
+0.9421297623583198,-0.3182248152059134"/></g></g></g><g class="title"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="5.537289265644347e-2" fill-opacity="1.0" text-anchor="middle"><text x="1.7315934850938408e-2" y="-0.43600000000000005">ArcPosition (Point 1 0) (Point 0 1) (ArcInfo (Point 1.5 1) (pi / 3) True True)</text></g></g></g></svg>
diff --git a/other/glines.svg b/other/glines.svg
deleted file mode 100644
--- a/other/glines.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg height="300.0" width="425.764192139738" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.8125 -0.5825 1.6249999999999998 1.145"><g stroke-opacity="1.0" fill="none" stroke-width="1.5e-2" stroke="#b05929"><polyline points="-0.75,0.30000000000000004
--0.2142857142857144,0.30000000000000004
-0.3214285714285712,-0.5"/></g><g stroke-opacity="1.0" fill="none" stroke-width="3.0e-2" stroke="#a6cfe3"><polyline points="-0.75,0.5
-0.7499999999999998,-0.10000000000000009"/></g><g stroke-opacity="1.0" fill="none" stroke-width="1.0e-2" stroke="#1f78b5"><polyline points="-0.4821428571428572,-0.30000000000000004
--0.4821428571428572,0.5"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#b05929" stroke-width="5.0e-3" stroke="#b05929"><ellipse ry="6.0e-2" rx="4.0e-2" cx="-0.75" cy="0.30000000000000004"/><ellipse ry="6.0e-2" rx="4.0e-2" cx="-0.2142857142857144" cy="0.30000000000000004"/><ellipse ry="6.0e-2" rx="4.0e-2" cx="0.3214285714285712" cy="-0.5"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-3" stroke="#a6cfe3"><rect height="8.000000000000002e-2" y="0.46" width="8.000000000000007e-2" x="-0.79"/><rect height="8.000000000000002e-2" y="-0.1400000000000001" width="8.000000000000007e-2" x="0.7099999999999997"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="5.0e-3" stroke="#1f78b5"><circle r="4.0e-2" cx="-0.4821428571428572" cy="-0.30000000000000004"/><circle r="4.0e-2" cx="-0.4821428571428572" cy="0.5"/></g></svg>
diff --git a/other/glyphs.svg b/other/glyphs.svg
--- a/other/glyphs.svg
+++ b/other/glyphs.svg
@@ -1,3 +1,27 @@
-<svg height="50.0" width="401.25" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.8250000000000001 -0.15 1.605 0.2"><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#1f78b5"><circle r="5.0e-2" cx="-0.75" cy="-2.5e-2"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#1f78b5"><rect height="0.1" y="-7.500000000000001e-2" width="0.10000000000000009" x="-0.6125"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#1f78b5"><rect height="7.500000000000001e-2" y="-6.25e-2" width="9.999999999999998e-2" x="-0.42500000000000004"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#1f78b5"><rect height="7.500000000000001e-2" y="-6.25e-2" width="9.999999999999998e-2" ry="1.0e-2" x="-0.2375" rx="1.0e-2"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="0.0" stroke="#1f78b5"><ellipse ry="3.7500000000000006e-2" rx="5.0e-2" cx="-1.1102230246251565e-16" cy="-2.5e-2"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#1f78b5"><polyline points="0.18749999999999978,2.5e-2
-0.18749999999999978,-7.500000000000001e-2"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#1f78b5"><polyline points="0.325,-2.5e-2
-0.425,-2.5e-2"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#1f78b5"><polygon points="0.0,-0.0 0.1,-0.1 0.1,-0.0" transform="translate(0.5625, -2.5e-2)"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#1f78b5"><path d="M0.05,-0.03660254037844387 A0.1 0.1 0.0 0 1 0.0,0.05 0.1 0.1 0.0 0 1 -0.05,-0.03660254037844387 0.1 0.1 0.0 0 1 0.05,-0.03660254037844387 Z" transform="translate(0.7499999999999998, -2.5e-2) scale(0.1)"/></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="600.0" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.75 -0.5 1.5 1.0" height="400.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"><g class="glyphs"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-0.0" cx="-0.695" r="5.0e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><rect x="-0.57125" width="0.10000000000000003" y="-5.0e-2" height="0.1"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><rect x="-0.39749999999999996" width="9.999999999999998e-2" y="-3.7500000000000006e-2" height="7.500000000000001e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><rect x="-0.22374999999999995" ry="1.0e-2" width="9.999999999999999e-2" y="-3.7500000000000006e-2" height="7.500000000000001e-2" rx="1.0e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><ellipse cy="-0.0" ry="3.7500000000000006e-2" cx="0.0" rx="5.0e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><polyline points="0.17374999999999996,5.0e-2
+0.17374999999999996,-5.0e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><polyline points="0.29750000000000004,-0.0
+0.3975,-0.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><polygon transform="translate(0.5212499999999999, -0.0)" points="0.0,-7.071067811865477e-2 -5.000000000000002e-2,4.330127018922193e-2 5.000000000000002e-2,4.330127018922193e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="9.999999999999999e-2" fill-opacity="0.2" stroke-opacity="1.0"><path d="M 0.5,-0.3660 A 1.0 1.0 -0.0 0 1 0,0.5 A 1.0 1.0 -0.0 0 1 -0.5,-0.3660 A 1.0 1.0 -0.0 0 1 0.5,-0.3660 L 0.5,-0.3660 Z" transform="translate(0.695, -0.0) scale(0.1)"/></g></g></g><g class="hud"></g></svg>
diff --git a/other/gradient.svg b/other/gradient.svg
new file mode 100644
--- /dev/null
+++ b/other/gradient.svg
@@ -0,0 +1,25 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="600.0" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-3.0 -0.5 6.0 1.0" height="100.0"><style>svg { shape-rendering: crispEdges; }svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"><g class="gradient"><g fill="rgb(60%, 26%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.9012903225806452" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(60%, 26%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.8432645161290324" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(60%, 26%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.7852387096774196" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 26%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.7272129032258063" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 26%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.6691870967741935" width="5.802580645161237e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 26%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.611161290322581" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 26%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.553135483870968" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 26%, 25%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.495109677419355" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 27%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.4370838709677423" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 27%, 21%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.379058064516129" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 27%, 18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.321032258064516" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 28%, 16%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.2630064516129034" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(60%, 28%, 14%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.2049806451612906" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(60%, 29%, 11%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.1469548387096773" width="5.802580645161237e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(59%, 29%, 8%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.088929032258065" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(59%, 30%, 5%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.0309032258064517" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(58%, 31%, 0%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.9728774193548388" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(58%, 31%, -4%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.9148516129032258" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(57%, 32%, -7%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.856825806451613" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(56%, 33%, -10%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.7988" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(55%, 33%, -13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.740774193548387" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(54%, 34%, -15%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.6827483870967743" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(53%, 35%, -17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.6247225806451613" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(52%, 36%, -18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.5666967741935482" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(51%, 36%, -18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.5086709677419357" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(49%, 37%, -19%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.4506451612903228" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(48%, 38%, -18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.3926193548387096" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(47%, 38%, -18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.3345935483870965" width="5.8025806451612594e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(45%, 39%, -16%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.276567741935484" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(43%, 40%, -15%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.2185419354838711" width="5.8025806451612594e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(42%, 40%, -13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.1605161290322585" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(40%, 41%, -10%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.1024903225806455" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(38%, 42%, -7%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.0444645161290322" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(36%, 42%, -3%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.9864387096774192" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(34%, 43%, 2%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.9284129032258064" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(32%, 43%, 6%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.8703870967741936" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(30%, 44%, 10%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.8123612903225803" width="5.802580645161237e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(28%, 44%, 13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.7543354838709679" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(25%, 45%, 15%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.6963096774193547" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(22%, 45%, 18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.6382838709677419" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(19%, 46%, 20%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.5802580645161286" width="5.802580645161237e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(16%, 46%, 22%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.5222322580645162" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(11%, 46%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.46420645161290297" width="5.802580645161237e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(5%, 46%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4061806451612906" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-5%, 47%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.34815483870967734" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-14%, 47%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2901290322580641" width="5.802580645161237e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-23%, 47%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2321032258064517" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-30%, 47%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17407741935483845" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-37%, 47%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11605161290322563" width="5.802580645161237e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-43%, 47%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.802580645161326e-2" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-48%, 47%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.0" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-52%, 47%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.8025806451612816e-2" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-56%, 47%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11605161290322608" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-58%, 47%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1740774193548389" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-60%, 47%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2321032258064517" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-60%, 46%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.29012903225806497" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-60%, 46%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3481548387096778" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-59%, 46%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4061806451612906" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-57%, 46%, 53%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.46420645161290297" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-54%, 45%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5222322580645167" width="5.802580645161193e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-50%, 45%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5802580645161286" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-46%, 44%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.6382838709677419" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-41%, 44%, 58%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.6963096774193547" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-35%, 44%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.7543354838709679" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-28%, 43%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.8123612903225808" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-20%, 43%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.8703870967741936" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-12%, 42%, 62%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.9284129032258068" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-4%, 41%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.9864387096774201" width="5.8025806451611484e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(6%, 41%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.0444645161290316" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(11%, 40%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.1024903225806453" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(15%, 40%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.160516129032258" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(19%, 39%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.218541935483871" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(21%, 38%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.2765677419354837" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(24%, 38%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.3345935483870974" width="5.802580645161104e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(26%, 37%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.3926193548387085" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(29%, 37%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.4506451612903222" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(31%, 36%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.5086709677419359" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(33%, 35%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.5666967741935487" width="5.802580645161193e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(35%, 35%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.6247225806451606" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(36%, 34%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.6827483870967743" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(38%, 34%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.740774193548388" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(40%, 33%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.7988000000000008" width="5.802580645161193e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(41%, 32%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.8568258064516128" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(43%, 32%, 62%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.9148516129032256" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(44%, 31%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.9728774193548393" width="5.802580645161104e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(46%, 31%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.0309032258064503" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(47%, 30%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.088929032258064" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(48%, 30%, 58%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.1469548387096777" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(49%, 29%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.2049806451612906" width="5.802580645161193e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(51%, 29%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.2630064516129025" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(52%, 28%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.321032258064516" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(53%, 28%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.37905806451613" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(54%, 28%, 51%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.4370838709677427" width="5.802580645161193e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(55%, 27%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.4951096774193546" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(56%, 27%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.5531354838709674" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(56%, 27%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.611161290322581" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(57%, 26%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.669187096774193" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(58%, 26%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.727212903225807" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(58%, 26%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.7852387096774196" width="5.802580645161193e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(59%, 26%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.8432645161290315" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g></g><g class="border"><g fill="rgb(0%, 0%, 0%)" stroke="rgb(94%, 94%, 94%)" stroke-width="2.0e-2" fill-opacity="0.0" stroke-opacity="1.0"><rect x="-0.970320430107527" width="0.2321032258064517" y="-0.40819672131147533" height="0.8163934426229508"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(0%, 0%, 0%)" stroke="rgb(99%, 99%, 99%)" stroke-width="4.0e-3" fill-opacity="0.0" stroke-opacity="1.0"><rect x="-2.998" width="5.996" y="-0.498" height="0.996"/></g></g></g></svg>
diff --git a/other/hudoptions.svg b/other/hudoptions.svg
--- a/other/hudoptions.svg
+++ b/other/hudoptions.svg
@@ -1,45 +1,69 @@
-<svg height="300.0" width="457.74043453182077" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.87 -0.5531722096956032 1.6775 1.0994222096956032"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9019165727170236" y="-0.5" width="1.4445949676731749" x="-0.6945949676731749"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.40191657271702363
-0.75,0.40191657271702363"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.3117249154453213
-0.75,0.3117249154453213"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.2215332581736189
-0.75,0.2215332581736189"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.13134160090191654
-0.75,0.13134160090191654"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,4.114994363021418e-2
-0.75,4.114994363021418e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-4.904171364148813e-2
-0.75,-4.904171364148813e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.13923337091319066
-0.75,-0.13923337091319066"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.22942502818489297
-0.75,-0.22942502818489297"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.3196166854565953
-0.75,-0.3196166854565953"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.4098083427282976
-0.75,-0.4098083427282976"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.5
-0.75,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.41499436302142045" x="-0.75">-0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.3248027057497182" x="-0.75">-0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.23461104847801584" x="-0.75">-0.3</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.14441939120631336" x="-0.75">-0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="5.4227733934611055e-2" x="-0.75">-0.1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-3.596392333709142e-2" x="-0.75">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.12615558060879384" x="-0.75">0.1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.21634723788049615" x="-0.75">0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.30653889515219834" x="-0.75">0.3</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.3967305524239009" x="-0.75">0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4869222096956032" x="-0.75">0.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.7201161454354009, 0.40191657271702363)"><polyline points="-0.7201161454354009,0.41691657271702365
--0.7201161454354009,0.3869165727170236"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.3117249154453213)"><polyline points="-0.7201161454354009,0.32672491544532134
--0.7201161454354009,0.2967249154453213"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.2215332581736189)"><polyline points="-0.7201161454354009,0.23653325817361892
--0.7201161454354009,0.2065332581736189"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.13134160090191654)"><polyline points="-0.7201161454354009,0.14634160090191656
--0.7201161454354009,0.11634160090191654"/></g><g transform="rotate(-90.0, -0.7201161454354009, 4.114994363021418e-2)"><polyline points="-0.7201161454354009,5.614994363021418e-2
--0.7201161454354009,2.614994363021418e-2"/></g><g transform="rotate(-90.0, -0.7201161454354009, -4.904171364148813e-2)"><polyline points="-0.7201161454354009,-3.404171364148813e-2
--0.7201161454354009,-6.404171364148813e-2"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.13923337091319066)"><polyline points="-0.7201161454354009,-0.12423337091319066
--0.7201161454354009,-0.15423337091319067"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.22942502818489297)"><polyline points="-0.7201161454354009,-0.21442502818489295
--0.7201161454354009,-0.24442502818489298"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.3196166854565953)"><polyline points="-0.7201161454354009,-0.30461668545659526
--0.7201161454354009,-0.3346166854565953"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.4098083427282976)"><polyline points="-0.7201161454354009,-0.39480834272829757
--0.7201161454354009,-0.4248083427282976"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.5)"><polyline points="-0.7201161454354009,-0.485
--0.7201161454354009,-0.515"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9019165727170236" y="-0.5" width="3.8522532471284565e-3" x="-0.7080778540381245"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.40191657271702363
--0.6945949676731749,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.5501354709058575,0.40191657271702363
--0.5501354709058575,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.40567597413853984,0.40191657271702363
--0.40567597413853984,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.2612164773712222,0.40191657271702363
--0.2612164773712222,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.11675698060390471,0.40191657271702363
--0.11675698060390471,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="2.770251616341257e-2,0.40191657271702363
-2.770251616341257e-2,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.1721620129307302,0.40191657271702363
-0.1721620129307302,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.3166215096980478,0.40191657271702363
-0.3166215096980478,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.4610810064653652,0.40191657271702363
-0.4610810064653652,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.6055405032326826,0.40191657271702363
-0.6055405032326826,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.75,0.40191657271702363
-0.75,-0.5"/></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.6945949676731749">-0.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.5501354709058575">-0.4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.40567597413853984">-0.3</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.2612164773712222">-0.2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.11675698060390471">-0.1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="2.770251616341257e-2">0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.1721620129307302">0.1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.3166215096980478">0.2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.4610810064653652">0.3</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.6055405032326826">0.4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.75">0.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.44081736189402476
--0.6945949676731749,0.41081736189402474"/><polyline points="-0.5501354709058575,0.44081736189402476
--0.5501354709058575,0.41081736189402474"/><polyline points="-0.40567597413853984,0.44081736189402476
--0.40567597413853984,0.41081736189402474"/><polyline points="-0.2612164773712222,0.44081736189402476
--0.2612164773712222,0.41081736189402474"/><polyline points="-0.11675698060390471,0.44081736189402476
--0.11675698060390471,0.41081736189402474"/><polyline points="2.770251616341257e-2,0.44081736189402476
-2.770251616341257e-2,0.41081736189402474"/><polyline points="0.1721620129307302,0.44081736189402476
-0.1721620129307302,0.41081736189402474"/><polyline points="0.3166215096980478,0.44081736189402476
-0.3166215096980478,0.41081736189402474"/><polyline points="0.4610810064653652,0.44081736189402476
-0.4610810064653652,0.41081736189402474"/><polyline points="0.6055405032326826,0.44081736189402476
-0.6055405032326826,0.41081736189402474"/><polyline points="0.75,0.44081736189402476
-0.75,0.41081736189402474"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.6076662908680612e-3" y="0.41093573844419395" width="1.4445949676731749" x="-0.6945949676731749"/></g><g></g><g></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="445.31471568510756" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7331572863520408 -0.49594877991132563 1.4750353555484697 0.9937030847582644" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"></g><g class="hud"><g class="frame"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5813810586734693" width="1.2754304846938778" y="-0.47399600638977646" height="0.8769968051118211"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6068896683673468, 0.4030007987220447)"><polyline points="-0.6068896683673468,0.4180007987220447
+-0.6068896683673468,0.3880007987220447"/></g><g transform="rotate(-90.0, -0.6068896683673468, 0.3153011182108626)"><polyline points="-0.6068896683673468,0.3303011182108626
+-0.6068896683673468,0.3003011182108626"/></g><g transform="rotate(-90.0, -0.6068896683673468, 0.22760143769968044)"><polyline points="-0.6068896683673468,0.24260143769968046
+-0.6068896683673468,0.21260143769968043"/></g><g transform="rotate(-90.0, -0.6068896683673468, 0.1399017571884983)"><polyline points="-0.6068896683673468,0.1549017571884983
+-0.6068896683673468,0.12490175718849829"/></g><g transform="rotate(-90.0, -0.6068896683673468, 5.220207667731619e-2)"><polyline points="-0.6068896683673468,6.720207667731619e-2
+-0.6068896683673468,3.720207667731619e-2"/></g><g transform="rotate(-90.0, -0.6068896683673468, -3.549760383386591e-2)"><polyline points="-0.6068896683673468,-2.049760383386591e-2
+-0.6068896683673468,-5.049760383386591e-2"/></g><g transform="rotate(-90.0, -0.6068896683673468, -0.12319728434504806)"><polyline points="-0.6068896683673468,-0.10819728434504806
+-0.6068896683673468,-0.13819728434504808"/></g><g transform="rotate(-90.0, -0.6068896683673468, -0.21089696485623022)"><polyline points="-0.6068896683673468,-0.1958969648562302
+-0.6068896683673468,-0.22589696485623023"/></g><g transform="rotate(-90.0, -0.6068896683673468, -0.29859664536741226)"><polyline points="-0.6068896683673468,-0.28359664536741225
+-0.6068896683673468,-0.3135966453674123"/></g><g transform="rotate(-90.0, -0.6068896683673468, -0.3862963258785943)"><polyline points="-0.6068896683673468,-0.3712963258785943
+-0.6068896683673468,-0.4012963258785943"/></g><g transform="rotate(-90.0, -0.6068896683673468, -0.47399600638977646)"><polyline points="-0.6068896683673468,-0.45899600638977645
+-0.6068896683673468,-0.48899600638977647"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.251434948979592e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.6375" y="0.4150595047923323">-0.50</text><text x="-0.6375" y="0.3273598242811501">-0.40</text><text x="-0.6375" y="0.23966014376996794">-0.30</text><text x="-0.6375" y="0.15196046325878587">-0.20</text><text x="-0.6375" y="6.426078274760372e-2">-0.10</text><text x="-0.6375" y="-2.3438897763578326e-2"> 0.00</text><text x="-0.6375" y="-0.11113857827476048"> 0.10</text><text x="-0.6375" y="-0.19883825878594263"> 0.20</text><text x="-0.6375" y="-0.2865379392971247"> 0.30</text><text x="-0.6375" y="-0.37423761980830683"> 0.40</text><text x="-0.6375" y="-0.4619373003194889"> 0.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5813810586734693,0.4030007987220447
+0.6940494260204084,0.4030007987220447"/><polyline points="-0.5813810586734693,0.3153011182108626
+0.6940494260204084,0.3153011182108626"/><polyline points="-0.5813810586734693,0.22760143769968044
+0.6940494260204084,0.22760143769968044"/><polyline points="-0.5813810586734693,0.1399017571884983
+0.6940494260204084,0.1399017571884983"/><polyline points="-0.5813810586734693,5.220207667731619e-2
+0.6940494260204084,5.220207667731619e-2"/><polyline points="-0.5813810586734693,-3.549760383386591e-2
+0.6940494260204084,-3.549760383386591e-2"/><polyline points="-0.5813810586734693,-0.12319728434504806
+0.6940494260204084,-0.12319728434504806"/><polyline points="-0.5813810586734693,-0.21089696485623022
+0.6940494260204084,-0.21089696485623022"/><polyline points="-0.5813810586734693,-0.29859664536741226
+0.6940494260204084,-0.29859664536741226"/><polyline points="-0.5813810586734693,-0.3862963258785943
+0.6940494260204084,-0.3862963258785943"/><polyline points="-0.5813810586734693,-0.47399600638977646
+0.6940494260204084,-0.47399600638977646"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5932850765306121" width="3.40114795918367e-3" y="-0.47575" height="0.8805047923322683"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5813810586734693,0.44431070287539937
+-0.5813810586734693,0.41431070287539934"/><polyline points="-0.4538380102040816,0.44431070287539937
+-0.4538380102040816,0.41431070287539934"/><polyline points="-0.32629496173469374,0.44431070287539937
+-0.32629496173469374,0.41431070287539934"/><polyline points="-0.198751913265306,0.44431070287539937
+-0.198751913265306,0.41431070287539934"/><polyline points="-7.120886479591826e-2,0.44431070287539937
+-7.120886479591826e-2,0.41431070287539934"/><polyline points="5.633418367346954e-2,0.44431070287539937
+5.633418367346954e-2,0.41431070287539934"/><polyline points="0.18387723214285745,0.44431070287539937
+0.18387723214285745,0.41431070287539934"/><polyline points="0.311420280612245,0.44431070287539937
+0.311420280612245,0.41431070287539934"/><polyline points="0.43896332908163305,0.44431070287539937
+0.43896332908163305,0.41431070287539934"/><polyline points="0.5665063775510206,0.44431070287539937
+0.5665063775510206,0.41431070287539934"/><polyline points="0.6940494260204084,0.44431070287539937
+0.6940494260204084,0.41431070287539934"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.251434948979592e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5813810586734693" y="0.485">-0.50</text><text x="-0.4538380102040816" y="0.485">-0.40</text><text x="-0.32629496173469374" y="0.485">-0.30</text><text x="-0.198751913265306" y="0.485">-0.20</text><text x="-7.120886479591826e-2" y="0.485">-0.10</text><text x="5.633418367346954e-2" y="0.485"> 0.00</text><text x="0.18387723214285745" y="0.485"> 0.10</text><text x="0.311420280612245" y="0.485"> 0.20</text><text x="0.43896332908163305" y="0.485"> 0.30</text><text x="0.5665063775510206" y="0.485"> 0.40</text><text x="0.6940494260204084" y="0.485"> 0.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5813810586734693,0.4030007987220447
+-0.5813810586734693,-0.47399600638977646"/><polyline points="-0.4538380102040816,0.4030007987220447
+-0.4538380102040816,-0.47399600638977646"/><polyline points="-0.32629496173469374,0.4030007987220447
+-0.32629496173469374,-0.47399600638977646"/><polyline points="-0.198751913265306,0.4030007987220447
+-0.198751913265306,-0.47399600638977646"/><polyline points="-7.120886479591826e-2,0.4030007987220447
+-7.120886479591826e-2,-0.47399600638977646"/><polyline points="5.633418367346954e-2,0.4030007987220447
+5.633418367346954e-2,-0.47399600638977646"/><polyline points="0.18387723214285745,0.4030007987220447
+0.18387723214285745,-0.47399600638977646"/><polyline points="0.311420280612245,0.4030007987220447
+0.311420280612245,-0.47399600638977646"/><polyline points="0.43896332908163305,0.4030007987220447
+0.43896332908163305,-0.47399600638977646"/><polyline points="0.5665063775510206,0.4030007987220447
+0.5665063775510206,-0.47399600638977646"/><polyline points="0.6940494260204084,0.4030007987220447
+0.6940494260204084,-0.47399600638977646"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5830816326530611" width="1.2788316326530613" y="0.41177076677316293" height="3.5079872204472617e-3"/></g></g></g></g></svg>
diff --git a/other/label.svg b/other/label.svg
deleted file mode 100644
--- a/other/label.svg
+++ /dev/null
@@ -1,1 +0,0 @@
-<svg height="300.0" width="300.0000000000001" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.6040702012600883 -0.6493250352560272 1.2533952365161158 1.2533952365161154"><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-1.131370849898472e-2" x="1.1313708498984831e-2" transform="rotate(45.0, 1.1313708498984831e-2, -1.131370849898472e-2)">text at (1,1) rotated by -(pi/4) radians</text></g></svg>
diff --git a/other/legend.svg b/other/legend.svg
deleted file mode 100644
--- a/other/legend.svg
+++ /dev/null
@@ -1,46 +0,0 @@
-<svg height="300.0" width="471.9812426729191" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.87 -0.52 1.6775 1.0662500000000001"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.8481404520588612" y="-0.44037572622026233" width="1.4445949676731749" x="-0.6945949676731749"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.4077647258385989
-0.75,0.4077647258385989"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.32295068063271276
-0.75,0.32295068063271276"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.23813663542682662
-0.75,0.23813663542682662"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.15332259022094047
-0.75,0.15332259022094047"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,6.850854501505443e-2
-0.75,6.850854501505443e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-1.6305500190831768e-2
-0.75,-1.6305500190831768e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.10111954539671786
-0.75,-0.10111954539671786"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.18593359060260406
-0.75,-0.18593359060260406"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.27074763580849015
-0.75,-0.27074763580849015"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.35556168101437624
-0.75,-0.35556168101437624"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.44037572622026233
-0.75,-0.44037572622026233"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.42006276239345225" x="-0.75">-0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.33524871718756627" x="-0.75">-0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.2504346719816801" x="-0.75">-0.3</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.16562062677579398" x="-0.75">-0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="8.080658156990789e-2" x="-0.75">-0.1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-4.007463635978259e-3" x="-0.75">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-8.882150884186446e-2" x="-0.75">0.1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.17363555404775055" x="-0.75">0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.25844959925363653" x="-0.75">0.3</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.34326364445952273" x="-0.75">0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4280776896654086" x="-0.75">0.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.7201161454354009, 0.4077647258385989)"><polyline points="-0.7201161454354009,0.4227647258385989
--0.7201161454354009,0.3927647258385989"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.32295068063271276)"><polyline points="-0.7201161454354009,0.3379506806327128
--0.7201161454354009,0.30795068063271275"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.23813663542682662)"><polyline points="-0.7201161454354009,0.25313663542682663
--0.7201161454354009,0.2231366354268266"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.15332259022094047)"><polyline points="-0.7201161454354009,0.16832259022094048
--0.7201161454354009,0.13832259022094046"/></g><g transform="rotate(-90.0, -0.7201161454354009, 6.850854501505443e-2)"><polyline points="-0.7201161454354009,8.350854501505443e-2
--0.7201161454354009,5.3508545015054435e-2"/></g><g transform="rotate(-90.0, -0.7201161454354009, -1.6305500190831768e-2)"><polyline points="-0.7201161454354009,-1.3055001908317682e-3
--0.7201161454354009,-3.130550019083177e-2"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.10111954539671786)"><polyline points="-0.7201161454354009,-8.611954539671786e-2
--0.7201161454354009,-0.11611954539671786"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.18593359060260406)"><polyline points="-0.7201161454354009,-0.17093359060260405
--0.7201161454354009,-0.20093359060260407"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.27074763580849015)"><polyline points="-0.7201161454354009,-0.25574763580849014
--0.7201161454354009,-0.28574763580849016"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.35556168101437624)"><polyline points="-0.7201161454354009,-0.3405616810143762
--0.7201161454354009,-0.37056168101437625"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.44037572622026233)"><polyline points="-0.7201161454354009,-0.4253757262202623
--0.7201161454354009,-0.45537572622026234"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.8481404520588612" y="-0.44037572622026233" width="3.8522532471284565e-3" x="-0.7080778540381245"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.4077647258385989
--0.6945949676731749,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.5501354709058575,0.4077647258385989
--0.5501354709058575,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.40567597413853984,0.4077647258385989
--0.40567597413853984,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.2612164773712222,0.4077647258385989
--0.2612164773712222,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.11675698060390471,0.4077647258385989
--0.11675698060390471,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="2.770251616341257e-2,0.4077647258385989
-2.770251616341257e-2,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.1721620129307302,0.4077647258385989
-0.1721620129307302,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.3166215096980478,0.4077647258385989
-0.3166215096980478,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.4610810064653652,0.4077647258385989
-0.4610810064653652,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.6055405032326826,0.4077647258385989
-0.6055405032326826,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.75,0.4077647258385989
-0.75,-0.44037572622026233"/></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.6945949676731749">-0.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.5501354709058575">-0.4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.40567597413853984">-0.3</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.2612164773712222">-0.2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.11675698060390471">-0.1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="2.770251616341257e-2">0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.1721620129307302">0.1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.3166215096980478">0.2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.4610810064653652">0.3</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.6055405032326826">0.4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.75">0.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.44524044781815864
--0.6945949676731749,0.4152404478181586"/><polyline points="-0.5501354709058575,0.44524044781815864
--0.5501354709058575,0.4152404478181586"/><polyline points="-0.40567597413853984,0.44524044781815864
--0.40567597413853984,0.4152404478181586"/><polyline points="-0.2612164773712222,0.44524044781815864
--0.2612164773712222,0.4152404478181586"/><polyline points="-0.11675698060390471,0.44524044781815864
--0.11675698060390471,0.4152404478181586"/><polyline points="2.770251616341257e-2,0.44524044781815864
-2.770251616341257e-2,0.4152404478181586"/><polyline points="0.1721620129307302,0.44524044781815864
-0.1721620129307302,0.4152404478181586"/><polyline points="0.3166215096980478,0.44524044781815864
-0.3166215096980478,0.4152404478181586"/><polyline points="0.4610810064653652,0.44524044781815864
-0.4610810064653652,0.4152404478181586"/><polyline points="0.6055405032326826,0.44524044781815864
-0.6055405032326826,0.4152404478181586"/><polyline points="0.75,0.44524044781815864
-0.75,0.4152404478181586"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.392561808235439e-3" y="0.41624613035918745" width="1.4445949676731749" x="-0.6945949676731749"/></g><g></g><g fill-opacity="0.0" stroke-opacity="1.0" fill="#0d0d0d" stroke-width="3.0e-3" stroke="#0d0d0d"><rect height="0.532292947712141" y="-0.49363894660955854" width="0.6991839643538167" x="-1.1893831900509078e-3"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.8e-2"><text y="-8.163351851066647e-3" x="2.770251616341257e-2">blank</text></g><g></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.8e-2"><text y="-9.26381408761292e-2" x="2.770251616341257e-2">abcdefghijklmnopqrst</text></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="3.0e-3" stroke="#1f78b5"><rect height="3.6000000000000004e-2" y="-0.11878028921589433" width="3.600000000000003e-2" x="0.5470918441378338"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.8e-2"><text y="-0.17711292990119176" x="2.770251616341257e-2">line</text></g><g stroke-opacity="1.0" fill="none" stroke-width="1.2e-2" stroke="#0d0d0d"><polyline points="0.5477567045257556,-0.18525507824095677
-0.6170972629740679,-0.18525507824095677"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.8e-2"><text y="-0.2615877189262543" x="2.770251616341257e-2">text</text></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.6e-2"><text y="-0.26362325601119563" x="0.5477567045257556">content</text></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.8e-2"><text y="-0.3460625079513169" x="2.770251616341257e-2">rect</text></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="3.0e-3" stroke="#a6cfe3"><rect height="3.0533056274118953e-2" y="-0.3694711844281414" width="3.467027922415622e-2" x="0.5477567045257556"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.8e-2"><text y="-0.4305372969763793" x="2.770251616341257e-2">glyph</text></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="3.0e-3" stroke="#1f78b5"><rect height="3.600000000000003e-2" y="-0.45667944531614446" width="3.600000000000003e-2" x="0.5470918441378336"/></g><g></g></svg>
diff --git a/other/lglyph.svg b/other/lglyph.svg
deleted file mode 100644
--- a/other/lglyph.svg
+++ /dev/null
@@ -1,1 +0,0 @@
-<svg height="300.0" width="445.0402144772118" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.8300000000000001 -0.594 1.6600000000000001 1.119"><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="-0.75">0,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="-0.75">0,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="-0.75">0,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="-0.75">0,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="-0.75">0,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="-0.75">0,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="-0.44999999999999996">1,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="-0.44999999999999996">1,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="-0.44999999999999996">1,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="-0.44999999999999996">1,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="-0.44999999999999996">1,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="-0.44999999999999996">1,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="-0.1499999999999999">2,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="-0.1499999999999999">2,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="-0.1499999999999999">2,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="-0.1499999999999999">2,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="-0.1499999999999999">2,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="-0.1499999999999999">2,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="0.15000000000000013">3,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="0.15000000000000013">3,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="0.15000000000000013">3,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="0.15000000000000013">3,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="0.15000000000000013">3,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="0.15000000000000013">3,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="0.4500000000000002">4,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="0.4500000000000002">4,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="0.4500000000000002">4,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="0.4500000000000002">4,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="0.4500000000000002">4,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="0.4500000000000002">4,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="0.75">5,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="0.75">5,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="0.75">5,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="0.75">5,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="0.75">5,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="0.75">5,5</text></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846146" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846146" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846146" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846146" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846146" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846146" width="1.0000000000000009e-2" x="0.745"/></g></svg>
diff --git a/other/line.svg b/other/line.svg
--- a/other/line.svg
+++ b/other/line.svg
@@ -1,44 +1,65 @@
-<svg height="300.0" width="441.21648345456595" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.8759951587651147 -0.594 1.6769903175302294 1.14025"><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.3752423510316214" transform="rotate(-0.0, 0.3752423510316214, 0.5)">An example from chart-svg</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="-0.22980689995525283" transform="rotate(-0.0, -0.22980689995525283, -0.5)">Line Chart</text></g><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.7704160246533129" y="-0.444722650231125" width="1.0772198435402474" x="-0.728907988597132"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,0.32569337442218793
-0.34831185494311523,0.32569337442218793"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,0.24865177195685662
-0.34831185494311523,0.24865177195685662"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,0.17161016949152536
-0.34831185494311523,0.17161016949152536"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,9.456856702619398e-2
-0.34831185494311523,9.456856702619398e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,1.7526964560862723e-2
-0.34831185494311523,1.7526964560862723e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,-5.951463790446854e-2
-0.34831185494311523,-5.951463790446854e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,-0.13655624036979985
-0.34831185494311523,-0.13655624036979985"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,-0.21359784283513117
-0.34831185494311523,-0.21359784283513117"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,-0.2906394453004625
-0.34831185494311523,-0.2906394453004625"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,-0.3676810477657938
-0.34831185494311523,-0.3676810477657938"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,-0.444722650231125
-0.34831185494311523,-0.444722650231125"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.3368644067796609" x="-0.7809951587651147">0.0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.2598228043143297" x="-0.7809951587651147">0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.18278120184899838" x="-0.7809951587651147">1.0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.105739599383667" x="-0.7809951587651147">1.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.869799691833569e-2" x="-0.7809951587651147">2.0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-4.834360554699557e-2" x="-0.7809951587651147">2.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.1253852080123269" x="-0.7809951587651147">3.0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.20242681047765798" x="-0.7809951587651147">3.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.2794684129429895" x="-0.7809951587651147">4.0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.3565100154083205" x="-0.7809951587651147">4.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.43355161787365204" x="-0.7809951587651147">5.0</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.7587110709350788, 0.32569337442218793)"><polyline points="-0.7587110709350788,0.34069337442218794
--0.7587110709350788,0.3106933744221879"/></g><g transform="rotate(-90.0, -0.7587110709350788, 0.24865177195685662)"><polyline points="-0.7587110709350788,0.26365177195685663
--0.7587110709350788,0.2336517719568566"/></g><g transform="rotate(-90.0, -0.7587110709350788, 0.17161016949152536)"><polyline points="-0.7587110709350788,0.18661016949152537
--0.7587110709350788,0.15661016949152534"/></g><g transform="rotate(-90.0, -0.7587110709350788, 9.456856702619398e-2)"><polyline points="-0.7587110709350788,0.10956856702619398
--0.7587110709350788,7.956856702619398e-2"/></g><g transform="rotate(-90.0, -0.7587110709350788, 1.7526964560862723e-2)"><polyline points="-0.7587110709350788,3.252696456086272e-2
--0.7587110709350788,2.526964560862724e-3"/></g><g transform="rotate(-90.0, -0.7587110709350788, -5.951463790446854e-2)"><polyline points="-0.7587110709350788,-4.451463790446854e-2
--0.7587110709350788,-7.451463790446854e-2"/></g><g transform="rotate(-90.0, -0.7587110709350788, -0.13655624036979985)"><polyline points="-0.7587110709350788,-0.12155624036979985
--0.7587110709350788,-0.15155624036979987"/></g><g transform="rotate(-90.0, -0.7587110709350788, -0.21359784283513117)"><polyline points="-0.7587110709350788,-0.19859784283513116
--0.7587110709350788,-0.22859784283513118"/></g><g transform="rotate(-90.0, -0.7587110709350788, -0.2906394453004625)"><polyline points="-0.7587110709350788,-0.27563944530046247
--0.7587110709350788,-0.3056394453004625"/></g><g transform="rotate(-90.0, -0.7587110709350788, -0.3676810477657938)"><polyline points="-0.7587110709350788,-0.3526810477657938
--0.7587110709350788,-0.3826810477657938"/></g><g transform="rotate(-90.0, -0.7587110709350788, -0.444722650231125)"><polyline points="-0.7587110709350788,-0.429722650231125
--0.7587110709350788,-0.459722650231125"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.7704160246533129" y="-0.444722650231125" width="2.872586249440645e-3" x="-0.7497342389055768"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,0.32569337442218793
--0.728907988597132,-0.444722650231125"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.5493713480070908,0.32569337442218793
--0.5493713480070908,-0.444722650231125"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.36983470741704955,0.32569337442218793
--0.36983470741704955,-0.444722650231125"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.19029806682700834,0.32569337442218793
--0.19029806682700834,-0.444722650231125"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.0761426236967186e-2,0.32569337442218793
--1.0761426236967186e-2,-0.444722650231125"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.16877521435307408,0.32569337442218793
-0.16877521435307408,-0.444722650231125"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.34831185494311523,0.32569337442218793
-0.34831185494311523,-0.444722650231125"/></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4210323574730354" x="-0.728907988597132">0.0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4210323574730354" x="-0.5493713480070908">0.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4210323574730354" x="-0.36983470741704955">1.0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4210323574730354" x="-0.19029806682700834">1.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4210323574730354" x="-1.0761426236967186e-2">2.0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4210323574730354" x="0.16877521435307408">2.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4210323574730354" x="0.34831185494311523">3.0</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,0.3726656394453004
--0.728907988597132,0.3426656394453004"/><polyline points="-0.5493713480070908,0.3726656394453004
--0.5493713480070908,0.3426656394453004"/><polyline points="-0.36983470741704955,0.3726656394453004
--0.36983470741704955,0.3426656394453004"/><polyline points="-0.19029806682700834,0.3726656394453004
--0.19029806682700834,0.3426656394453004"/><polyline points="-1.0761426236967186e-2,0.3726656394453004
--1.0761426236967186e-2,0.3426656394453004"/><polyline points="0.16877521435307408,0.3726656394453004
-0.16877521435307408,0.3426656394453004"/><polyline points="0.34831185494311523,0.3726656394453004
-0.34831185494311523,0.3426656394453004"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.0816640986132127e-3" y="0.34495377503852076" width="1.0772198435402474" x="-0.728907988597132"/></g><g stroke-opacity="1.0" fill="none" stroke-width="1.5e-2" stroke="#b05929"><polyline points="-0.728907988597132,0.17161016949152536
--0.36983470741704955,0.17161016949152536
--1.0761426236967186e-2,-0.444722650231125"/></g><g stroke-opacity="1.0" fill="none" stroke-width="3.0e-2" stroke="#a6cfe3"><polyline points="-0.728907988597132,0.32569337442218793
-0.27649719870709877,-0.13655624036979985"/></g><g stroke-opacity="1.0" fill="none" stroke-width="1.0e-2" stroke="#1f78b5"><polyline points="-0.5493713480070908,-0.2906394453004625
--0.5493713480070908,0.32569337442218793"/></g><g></g><g fill-opacity="0.0" stroke-opacity="1.0" fill="#0d0d0d" stroke-width="2.5e-3" stroke="#0d0d0d"><rect height="0.17758089368258856" y="-0.15995762711864414" width="0.2764864265086635" x="0.5000203162417001"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.0e-2"><text y="-1.3771186440677985e-2" x="0.5179739803007044">vertical</text></g><g stroke-opacity="1.0" fill="none" stroke-width="1.0e-2" stroke="#1f78b5"><polyline points="0.6400588959019324,-1.839368258859786e-2
-0.7477808802559571,-1.839368258859786e-2"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.0e-2"><text y="-6.654468412942993e-2" x="0.5179739803007044">line</text></g><g stroke-opacity="1.0" fill="none" stroke-width="3.0e-2" stroke="#a6cfe3"><polyline points="0.6400588959019324,-7.11671802773498e-2
-0.7477808802559571,-7.11671802773498e-2"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.0e-2"><text y="-0.11931818181818199" x="0.5179739803007044">hockey</text></g><g stroke-opacity="1.0" fill="none" stroke-width="1.5e-2" stroke="#b05929"><polyline points="0.6400588959019324,-0.12394067796610186
-0.7477808802559571,-0.12394067796610186"/></g><g></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="446.753163625545" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7380894953982863 -0.49743338195719966 1.4823989209774675 0.995448297856914" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"><g class="line"><g fill="none" stroke="rgb(2%, 73%, 80%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.5962269120913996,0.2226262967974741
+-0.16239638210092033,0.2226262967974741
+0.271434147889559,-0.47471244925575107"/></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.5962269120913996,0.39696098331078034
+0.6184985718819421,-0.12604307622913857"/></g><g fill="none" stroke="rgb(66%, 7%, 55%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.37931164709615994,-0.30037776274244476
+-0.37931164709615994,0.39696098331078034"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.6027343700412567" width="1.3079990479212948" y="-0.48124999999999996" height="0.8847485340550292"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6287642018406855, 0.39696098331078034)"><polyline points="-0.6287642018406855,0.41196098331078035
+-0.6287642018406855,0.3819609833107803"/></g><g transform="rotate(-90.0, -0.6287642018406855, 0.30979364005412724)"><polyline points="-0.6287642018406855,0.32479364005412725
+-0.6287642018406855,0.2947936400541272"/></g><g transform="rotate(-90.0, -0.6287642018406855, 0.2226262967974741)"><polyline points="-0.6287642018406855,0.2376262967974741
+-0.6287642018406855,0.20762629679747407"/></g><g transform="rotate(-90.0, -0.6287642018406855, 0.13545895354082088)"><polyline points="-0.6287642018406855,0.1504589535408209
+-0.6287642018406855,0.12045895354082088"/></g><g transform="rotate(-90.0, -0.6287642018406855, 4.829161028416773e-2)"><polyline points="-0.6287642018406855,6.329161028416773e-2
+-0.6287642018406855,3.329161028416773e-2"/></g><g transform="rotate(-90.0, -0.6287642018406855, -3.8875732972485366e-2)"><polyline points="-0.6287642018406855,-2.3875732972485367e-2
+-0.6287642018406855,-5.3875732972485366e-2"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.12604307622913857)"><polyline points="-0.6287642018406855,-0.11104307622913857
+-0.6287642018406855,-0.1410430762291386"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.21321041948579178)"><polyline points="-0.6287642018406855,-0.19821041948579177
+-0.6287642018406855,-0.2282104194857918"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.30037776274244476)"><polyline points="-0.6287642018406855,-0.28537776274244475
+-0.6287642018406855,-0.3153777627424448"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.38754510599909786)"><polyline points="-0.6287642018406855,-0.37254510599909785
+-0.6287642018406855,-0.4025451059990979"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.47471244925575107)"><polyline points="-0.6287642018406855,-0.45971244925575105
+-0.6287642018406855,-0.4897124492557511"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.3383052999047926e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.66" y="0.40894649300857017">0.00</text><text x="-0.66" y="0.321779149751917">0.50</text><text x="-0.66" y="0.2346118064952638">1.00</text><text x="-0.66" y="0.14744446323861077">1.50</text><text x="-0.66" y="6.027711998195756e-2">2.00</text><text x="-0.66" y="-2.689022327469548e-2">2.50</text><text x="-0.66" y="-0.11405756653134869">3.00</text><text x="-0.66" y="-0.2012249097880019">3.50</text><text x="-0.66" y="-0.2883922530446551">4.00</text><text x="-0.66" y="-0.3755595963013081">4.50</text><text x="-0.66" y="-0.4627269395579613">5.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5962269120913996,0.39696098331078034
+0.7052646778800381,0.39696098331078034"/><polyline points="-0.5962269120913996,0.30979364005412724
+0.7052646778800381,0.30979364005412724"/><polyline points="-0.5962269120913996,0.2226262967974741
+0.7052646778800381,0.2226262967974741"/><polyline points="-0.5962269120913996,0.13545895354082088
+0.7052646778800381,0.13545895354082088"/><polyline points="-0.5962269120913996,4.829161028416773e-2
+0.7052646778800381,4.829161028416773e-2"/><polyline points="-0.5962269120913996,-3.8875732972485366e-2
+0.7052646778800381,-3.8875732972485366e-2"/><polyline points="-0.5962269120913996,-0.12604307622913857
+0.7052646778800381,-0.12604307622913857"/><polyline points="-0.5962269120913996,-0.21321041948579178
+0.7052646778800381,-0.21321041948579178"/><polyline points="-0.5962269120913996,-0.30037776274244476
+0.7052646778800381,-0.30037776274244476"/><polyline points="-0.5962269120913996,-0.38754510599909786
+0.7052646778800381,-0.38754510599909786"/><polyline points="-0.5962269120913996,-0.47471244925575107
+0.7052646778800381,-0.47471244925575107"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.6148816248809902" width="3.4706442399238258e-3" y="-0.4764557961208842" height="0.8751601262967976"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5962269120913996,0.44464873703202523
+-0.5962269120913996,0.4146487370320252"/><polyline points="-0.37931164709615994,0.44464873703202523
+-0.37931164709615994,0.4146487370320252"/><polyline points="-0.16239638210092033,0.44464873703202523
+-0.16239638210092033,0.4146487370320252"/><polyline points="5.4518882894319276e-2,0.44464873703202523
+5.4518882894319276e-2,0.4146487370320252"/><polyline points="0.271434147889559,0.44464873703202523
+0.271434147889559,0.4146487370320252"/><polyline points="0.4883494128847986,0.44464873703202523
+0.4883494128847986,0.4146487370320252"/><polyline points="0.7052646778800381,0.44464873703202523
+0.7052646778800381,0.4146487370320252"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.3383052999047926e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5962269120913996" y="0.485">0.00</text><text x="-0.37931164709615994" y="0.485">0.50</text><text x="-0.16239638210092033" y="0.485">1.00</text><text x="5.4518882894319276e-2" y="0.485">1.50</text><text x="0.271434147889559" y="0.485">2.00</text><text x="0.4883494128847986" y="0.485">2.50</text><text x="0.7052646778800381" y="0.485">3.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5962269120913996,0.39696098331078034
+-0.5962269120913996,-0.47471244925575107"/><polyline points="-0.37931164709615994,0.39696098331078034
+-0.37931164709615994,-0.47471244925575107"/><polyline points="-0.16239638210092033,0.39696098331078034
+-0.16239638210092033,-0.47471244925575107"/><polyline points="5.4518882894319276e-2,0.39696098331078034
+5.4518882894319276e-2,-0.47471244925575107"/><polyline points="0.271434147889559,0.39696098331078034
+0.271434147889559,-0.47471244925575107"/><polyline points="0.4883494128847986,0.39696098331078034
+0.4883494128847986,-0.47471244925575107"/><polyline points="0.7052646778800381,0.39696098331078034
+0.7052646778800381,-0.47471244925575107"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5979622342113615" width="1.3049622342113616" y="0.4122152683806946" height="3.4866937302661105e-3"/></g></g></g></g></svg>
diff --git a/other/path.svg b/other/path.svg
--- a/other/path.svg
+++ b/other/path.svg
@@ -1,35 +1,68 @@
-<svg height="300.0" width="264.1756768643528" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.6012842749868601 -0.6332546448113643 1.1440685499737202 1.29921334570234"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.8962313923197105" y="-0.5" width="0.8000434283917985" x="-0.3737591534049384"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,0.3962313923197103
-0.4262842749868601,0.3962313923197103"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,0.2842024682797465
-0.4262842749868601,0.2842024682797465"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,0.1721735442397827
-0.4262842749868601,0.1721735442397827"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,6.014462019981892e-2
-0.4262842749868601,6.014462019981892e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,-5.188430384014486e-2
-0.4262842749868601,-5.188430384014486e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,-0.16391322788010854
-0.4262842749868601,-0.16391322788010854"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,-0.27594215192007243
-0.4262842749868601,-0.27594215192007243"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,-0.3879710759600362
-0.4262842749868601,-0.3879710759600362"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,-0.5
-0.4262842749868601,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4092267475083461" x="-0.4262842749868601">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.2971978234683823" x="-0.4262842749868601">0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.18516889942841852" x="-0.4262842749868601">0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="7.313997538845474e-2" x="-0.4262842749868601">0.6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-3.888894865150905e-2" x="-0.4262842749868601">0.8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.15091787269147272" x="-0.4262842749868601">1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.2629467967314366" x="-0.4262842749868601">1.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.3749757207714005" x="-0.4262842749868601">1.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4870046448113643" x="-0.4262842749868601">1.6</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.3979537600783423, 0.3962313923197103)"><polyline points="-0.3979537600783423,0.4112313923197103
--0.3979537600783423,0.38123139231971026"/></g><g transform="rotate(-90.0, -0.3979537600783423, 0.2842024682797465)"><polyline points="-0.3979537600783423,0.2992024682797465
--0.3979537600783423,0.2692024682797465"/></g><g transform="rotate(-90.0, -0.3979537600783423, 0.1721735442397827)"><polyline points="-0.3979537600783423,0.18717354423978272
--0.3979537600783423,0.1571735442397827"/></g><g transform="rotate(-90.0, -0.3979537600783423, 6.014462019981892e-2)"><polyline points="-0.3979537600783423,7.514462019981892e-2
--0.3979537600783423,4.514462019981892e-2"/></g><g transform="rotate(-90.0, -0.3979537600783423, -5.188430384014486e-2)"><polyline points="-0.3979537600783423,-3.6884303840144864e-2
--0.3979537600783423,-6.688430384014486e-2"/></g><g transform="rotate(-90.0, -0.3979537600783423, -0.16391322788010854)"><polyline points="-0.3979537600783423,-0.14891322788010852
--0.3979537600783423,-0.17891322788010855"/></g><g transform="rotate(-90.0, -0.3979537600783423, -0.27594215192007243)"><polyline points="-0.3979537600783423,-0.2609421519200724
--0.3979537600783423,-0.29094215192007244"/></g><g transform="rotate(-90.0, -0.3979537600783423, -0.3879710759600362)"><polyline points="-0.3979537600783423,-0.3729710759600362
--0.3979537600783423,-0.40297107596003623"/></g><g transform="rotate(-90.0, -0.3979537600783423, -0.5)"><polyline points="-0.3979537600783423,-0.485
--0.3979537600783423,-0.515"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.8962313923197105" y="-0.5" width="3.652016101645894e-3" x="-0.386541209760699"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,0.3962313923197105
--0.3737591534049384,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.25946723506325287,0.3962313923197105
--0.25946723506325287,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.14517531672156742,0.3962313923197105
--0.14517531672156742,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-3.0883398379881855e-2,0.3962313923197105
--3.0883398379881855e-2,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="8.34085199618036e-2,0.3962313923197105
-8.34085199618036e-2,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.197700438303489,0.3962313923197105
-0.197700438303489,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.3119923566451746,0.3962313923197105
-0.3119923566451746,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.4262842749868601,0.3962313923197105
-0.4262842749868601,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.694245123030814e-2"><text y="0.5" x="-0.3737591534049384" transform="rotate(-45.0, -0.3737591534049384, 0.5)">-0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.694245123030814e-2"><text y="0.5" x="-0.25946723506325287" transform="rotate(-45.0, -0.25946723506325287, 0.5)">-0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.694245123030814e-2"><text y="0.5" x="-0.14517531672156742" transform="rotate(-45.0, -0.14517531672156742, 0.5)">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.694245123030814e-2"><text y="0.5" x="-3.0883398379881855e-2" transform="rotate(-45.0, -3.0883398379881855e-2, 0.5)">0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.694245123030814e-2"><text y="0.5" x="8.34085199618036e-2" transform="rotate(-45.0, 8.34085199618036e-2, 0.5)">0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.694245123030814e-2"><text y="0.5" x="0.197700438303489" transform="rotate(-45.0, 0.197700438303489, 0.5)">0.6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.694245123030814e-2"><text y="0.5" x="0.3119923566451746" transform="rotate(-45.0, 0.3119923566451746, 0.5)">0.8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.694245123030814e-2"><text y="0.5" x="0.4262842749868601" transform="rotate(-45.0, 0.4262842749868601, 0.5)">1</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,0.4497693421894578
--0.3737591534049384,0.4197693421894578"/><polyline points="-0.25946723506325287,0.4497693421894578
--0.25946723506325287,0.4197693421894578"/><polyline points="-0.14517531672156742,0.4497693421894578
--0.14517531672156742,0.4197693421894578"/><polyline points="-3.0883398379881855e-2,0.4497693421894578
--3.0883398379881855e-2,0.4197693421894578"/><polyline points="8.34085199618036e-2,0.4497693421894578
-8.34085199618036e-2,0.4197693421894578"/><polyline points="0.197700438303489,0.4497693421894578
-0.197700438303489,0.4197693421894578"/><polyline points="0.3119923566451746,0.4497693421894578
-0.3119923566451746,0.4197693421894578"/><polyline points="0.4262842749868601,0.4497693421894578
-0.4262842749868601,0.4197693421894578"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.584925569278752e-3" y="0.4199815242161827" width="0.8000434283917985" x="-0.3737591534049384"/></g><g fill-opacity="0.1" stroke-opacity="0.3" fill="#1f78b5" stroke-width="1.0e-2" stroke="#33cc66"><path d="M -0.1452,0.3962 L 0.4263,0.3962 C -0.0309,0.3962 -0.0023,-0.1639 0.4263,-0.1639 Q -0.7166,-0.7241 -0.1452,-0.1639 A 0.5686281102556423 0.5629706236631298 30.0 0 0 -0.1452,0.3962"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="3.0e-3" stroke="#1f78b5"><rect height="3.0000000000000027e-2" y="0.38123139231971026" width="3.0000000000000027e-2" x="-0.16017531672156743"/><rect height="3.0000000000000027e-2" y="0.38123139231971026" width="3.0000000000000027e-2" x="0.4112842749868601"/><rect height="3.0000000000000027e-2" y="-0.17891322788010855" width="3.0000000000000027e-2" x="0.4112842749868601"/><rect height="3.0000000000000027e-2" y="-0.17891322788010855" width="3.0000000000000027e-2" x="-0.16017531672156743"/><rect height="3.0000000000000027e-2" y="0.38123139231971026" width="3.0000000000000027e-2" x="-0.16017531672156743"/></g><g></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="375.0492051476155" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7512380952380954 -1.52625 2.0643333333333342 1.6512500000000006" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}{
+  .pathtext g {
+    fill: #0d0d0d;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .pathtext g {
+    fill: #f0f0f0;
+  }
+}</style><g class="chart"><g class="path"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.1" stroke-opacity="1.0"><path d="M 0.0476,0 L 1.0,0 C 0.2381,0 0.2857,-0.9375 1.0,-0.9375 Q -0.9048,-1.875 0.0476,-0.9375 A 0.9486825977868139 0.9412422945844034 30.0 0 0 0.0476,0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="3.261904761904767e-2" width="3.0e-2" y="-1.4999999999999555e-2" height="3.0e-2"/><rect x="0.985" width="2.9999999999999916e-2" y="-1.4999999999999555e-2" height="3.0e-2"/><rect x="0.985" width="2.9999999999999916e-2" y="-0.9524999999999998" height="3.0000000000000027e-2"/><rect x="3.261904761904767e-2" width="3.0e-2" y="-0.9524999999999998" height="3.0000000000000027e-2"/><rect x="3.261904761904767e-2" width="3.0e-2" y="-1.4999999999999555e-2" height="3.0e-2"/></g></g><g class="pathtext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.761904761904763e-2" fill-opacity="1.0" text-anchor="middle"><text x="4.761904761904767e-2" y="-4.687499999999957e-2">StartP (Point 0 0)</text><text x="0.523809523809524" y="4.440892098500626e-16">LineP (Point 1 0)</text><text x="0.8095238095238099" y="-0.46874999999999967">CubicP (Point 0.2 0) (Point 0.25 1) (Point 1 1)</text><text x="0.4285714285714287" y="-1.0312499999999998">QuadP (Point (-1) 2) (Point 0 1)</text><text x="4.761904761904767e-2" y="-0.37499999999999967">ArcP (ArcInfo (Point 1 1) (-pi / 6) False False) (Point 0 0)</text></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5952380952380953" width="1.908333333333334" y="-1.5" height="1.5165000000000004"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6252380952380954, 6.661338147750939e-16)"><polyline points="-0.6252380952380954,1.5000000000000666e-2
+-0.6252380952380954,-1.4999999999999333e-2"/></g><g transform="rotate(-90.0, -0.6252380952380954, -0.18749999999999942)"><polyline points="-0.6252380952380954,-0.17249999999999943
+-0.6252380952380954,-0.2024999999999994"/></g><g transform="rotate(-90.0, -0.6252380952380954, -0.3749999999999995)"><polyline points="-0.6252380952380954,-0.3599999999999995
+-0.6252380952380954,-0.3899999999999995"/></g><g transform="rotate(-90.0, -0.6252380952380954, -0.5624999999999997)"><polyline points="-0.6252380952380954,-0.5474999999999997
+-0.6252380952380954,-0.5774999999999997"/></g><g transform="rotate(-90.0, -0.6252380952380954, -0.7499999999999997)"><polyline points="-0.6252380952380954,-0.7349999999999997
+-0.6252380952380954,-0.7649999999999997"/></g><g transform="rotate(-90.0, -0.6252380952380954, -0.9374999999999998)"><polyline points="-0.6252380952380954,-0.9224999999999998
+-0.6252380952380954,-0.9524999999999998"/></g><g transform="rotate(-90.0, -0.6252380952380954, -1.125)"><polyline points="-0.6252380952380954,-1.11
+-0.6252380952380954,-1.14"/></g><g transform="rotate(-90.0, -0.6252380952380954, -1.3125)"><polyline points="-0.6252380952380954,-1.2975
+-0.6252380952380954,-1.3275"/></g><g transform="rotate(-90.0, -0.6252380952380954, -1.5)"><polyline points="-0.6252380952380954,-1.485
+-0.6252380952380954,-1.515"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="5.0e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.6612380952380954" y="1.3750000000000668e-2">0.00</text><text x="-0.6612380952380954" y="-0.1737499999999994">0.20</text><text x="-0.6612380952380954" y="-0.3612499999999995">0.40</text><text x="-0.6612380952380954" y="-0.5487499999999996">0.60</text><text x="-0.6612380952380954" y="-0.7362499999999996">0.80</text><text x="-0.6612380952380954" y="-0.9237499999999997">1.00</text><text x="-0.6612380952380954" y="-1.11125">1.20</text><text x="-0.6612380952380954" y="-1.29875">1.40</text><text x="-0.6612380952380954" y="-1.48625">1.60</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.33333333333333337,6.661338147750939e-16
+1.0,6.661338147750939e-16"/><polyline points="-0.33333333333333337,-0.18749999999999942
+1.0,-0.18749999999999942"/><polyline points="-0.33333333333333337,-0.3749999999999995
+1.0,-0.3749999999999995"/><polyline points="-0.33333333333333337,-0.5624999999999997
+1.0,-0.5624999999999997"/><polyline points="-0.33333333333333337,-0.7499999999999997
+1.0,-0.7499999999999997"/><polyline points="-0.33333333333333337,-0.9374999999999998
+1.0,-0.9374999999999998"/><polyline points="-0.33333333333333337,-1.125
+1.0,-1.125"/><polyline points="-0.33333333333333337,-1.3125
+1.0,-1.3125"/><polyline points="-0.33333333333333337,-1.5
+1.0,-1.5"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.6092380952380954" width="4.0000000000000036e-3" y="-1.502" height="1.5040000000000007"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.33333333333333337,6.150000000000044e-2
+-0.33333333333333337,3.1500000000000444e-2"/><polyline points="-0.14285714285714285,6.150000000000044e-2
+-0.14285714285714285,3.1500000000000444e-2"/><polyline points="4.761904761904767e-2,6.150000000000044e-2
+4.761904761904767e-2,3.1500000000000444e-2"/><polyline points="0.23809523809523825,6.150000000000044e-2
+0.23809523809523825,3.1500000000000444e-2"/><polyline points="0.4285714285714287,6.150000000000044e-2
+0.4285714285714287,3.1500000000000444e-2"/><polyline points="0.6190476190476192,6.150000000000044e-2
+0.6190476190476192,3.1500000000000444e-2"/><polyline points="0.8095238095238099,6.150000000000044e-2
+0.8095238095238099,3.1500000000000444e-2"/><polyline points="1.0,6.150000000000044e-2
+1.0,3.1500000000000444e-2"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="5.0e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.33333333333333337" y="0.11000000000000046">-0.40</text><text x="-0.14285714285714285" y="0.11000000000000046">-0.20</text><text x="4.761904761904767e-2" y="0.11000000000000046"> 0.00</text><text x="0.23809523809523825" y="0.11000000000000046"> 0.20</text><text x="0.4285714285714287" y="0.11000000000000046"> 0.40</text><text x="0.6190476190476192" y="0.11000000000000046"> 0.60</text><text x="0.8095238095238099" y="0.11000000000000046"> 0.80</text><text x="1.0" y="0.11000000000000046"> 1.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.33333333333333337,6.661338147750939e-16
+-0.33333333333333337,-1.5"/><polyline points="-0.14285714285714285,6.661338147750939e-16
+-0.14285714285714285,-1.5"/><polyline points="4.761904761904767e-2,6.661338147750939e-16
+4.761904761904767e-2,-1.5"/><polyline points="0.23809523809523825,6.661338147750939e-16
+0.23809523809523825,-1.5"/><polyline points="0.4285714285714287,6.661338147750939e-16
+0.4285714285714287,-1.5"/><polyline points="0.6190476190476192,6.661338147750939e-16
+0.6190476190476192,-1.5"/><polyline points="0.8095238095238099,6.661338147750939e-16
+0.8095238095238099,-1.5"/><polyline points="1.0,6.661338147750939e-16
+1.0,-1.5"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.33533333333333337" width="1.3373333333333335" y="2.6500000000000447e-2" height="3.999999999999997e-3"/></g></g></g></g></svg>
diff --git a/other/quad.svg b/other/quad.svg
--- a/other/quad.svg
+++ b/other/quad.svg
@@ -1,145 +1,170 @@
-<svg height="300.0" width="332.5498942989464" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.6823211801526162 -0.5833034558344269 1.2811423603052323 1.1557444903171854"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.8928651148670972" y="-0.5" width="0.9912594250674862" x="-0.45893824491487023"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,0.39286511486709713
-0.532321180152616,0.39286511486709713"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,0.30357860338038745
-0.532321180152616,0.30357860338038745"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,0.2142920918936777
-0.532321180152616,0.2142920918936777"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,0.12500558040696802
-0.532321180152616,0.12500558040696802"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,3.5719068920258334e-2
-0.532321180152616,3.5719068920258334e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,-5.3567442566451406e-2
-0.532321180152616,-5.3567442566451406e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,-0.14285395405316115
-0.532321180152616,-0.14285395405316115"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,-0.2321404655398709
-0.532321180152616,-0.2321404655398709"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,-0.3214269770265804
-0.532321180152616,-0.3214269770265804"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,-0.41071348851329004
-0.532321180152616,-0.41071348851329004"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,-0.5
-0.532321180152616,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4058116590326699" x="-0.5323211801526162">-1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.31652514754596034" x="-0.5323211801526162">-0.8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.2272386360592506" x="-0.5323211801526162">-0.6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.1379521245725409" x="-0.5323211801526162">-0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="4.866561308583123e-2" x="-0.5323211801526162">-0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-4.062089840087857e-2" x="-0.5323211801526162">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.1299074098875883" x="-0.5323211801526162">0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.21919392137429783" x="-0.5323211801526162">0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.30848043286100757" x="-0.5323211801526162">0.6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.3977669443477173" x="-0.5323211801526162">0.8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.48705345583442683" x="-0.5323211801526162">1</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.5015624001927721, 0.39286511486709713)"><polyline points="-0.5015624001927721,0.40786511486709714
--0.5015624001927721,0.3778651148670971"/></g><g transform="rotate(-90.0, -0.5015624001927721, 0.30357860338038745)"><polyline points="-0.5015624001927721,0.31857860338038746
--0.5015624001927721,0.28857860338038743"/></g><g transform="rotate(-90.0, -0.5015624001927721, 0.2142920918936777)"><polyline points="-0.5015624001927721,0.22929209189367772
--0.5015624001927721,0.1992920918936777"/></g><g transform="rotate(-90.0, -0.5015624001927721, 0.12500558040696802)"><polyline points="-0.5015624001927721,0.14000558040696803
--0.5015624001927721,0.11000558040696802"/></g><g transform="rotate(-90.0, -0.5015624001927721, 3.5719068920258334e-2)"><polyline points="-0.5015624001927721,5.0719068920258334e-2
--0.5015624001927721,2.0719068920258335e-2"/></g><g transform="rotate(-90.0, -0.5015624001927721, -5.3567442566451406e-2)"><polyline points="-0.5015624001927721,-3.856744256645141e-2
--0.5015624001927721,-6.85674425664514e-2"/></g><g transform="rotate(-90.0, -0.5015624001927721, -0.14285395405316115)"><polyline points="-0.5015624001927721,-0.12785395405316113
--0.5015624001927721,-0.15785395405316116"/></g><g transform="rotate(-90.0, -0.5015624001927721, -0.2321404655398709)"><polyline points="-0.5015624001927721,-0.21714046553987087
--0.5015624001927721,-0.2471404655398709"/></g><g transform="rotate(-90.0, -0.5015624001927721, -0.3214269770265804)"><polyline points="-0.5015624001927721,-0.3064269770265804
--0.5015624001927721,-0.3364269770265804"/></g><g transform="rotate(-90.0, -0.5015624001927721, -0.41071348851329004)"><polyline points="-0.5015624001927721,-0.39571348851329
--0.5015624001927721,-0.42571348851329005"/></g><g transform="rotate(-90.0, -0.5015624001927721, -0.5)"><polyline points="-0.5015624001927721,-0.485
--0.5015624001927721,-0.515"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.8928651148670972" y="-0.5" width="3.965037700269958e-3" x="-0.4891716573794286"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,0.39286511486709713
--0.45893824491487023,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.35981230240812156,0.39286511486709713
--0.35981230240812156,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.26068635990137295,0.39286511486709713
--0.26068635990137295,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.16156041739462423,0.39286511486709713
--0.16156041739462423,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-6.2434474887875624e-2,0.39286511486709713
--6.2434474887875624e-2,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="3.6691467618872986e-2,0.39286511486709713
-3.6691467618872986e-2,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.13581741012562165,0.39286511486709713
-0.13581741012562165,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.23494335263237032,0.39286511486709713
-0.23494335263237032,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.334069295139119,0.39286511486709713
-0.334069295139119,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.43319523764586754,0.39286511486709713
-0.43319523764586754,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.532321180152616,0.39286511486709713
-0.532321180152616,-0.5"/></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="-0.45893824491487023">0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="-0.35981230240812156">0.2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="-0.26068635990137295">0.4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="-0.16156041739462423">0.6</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="-6.2434474887875624e-2">0.8</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="3.6691467618872986e-2">1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="0.13581741012562165">1.2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="0.23494335263237032">1.4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="0.334069295139119">1.6</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="0.43319523764586754">1.8</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="0.532321180152616">2</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,0.44625831480638223
--0.45893824491487023,0.4162583148063822"/><polyline points="-0.35981230240812156,0.44625831480638223
--0.35981230240812156,0.4162583148063822"/><polyline points="-0.26068635990137295,0.44625831480638223
--0.26068635990137295,0.4162583148063822"/><polyline points="-0.16156041739462423,0.44625831480638223
--0.16156041739462423,0.4162583148063822"/><polyline points="-6.2434474887875624e-2,0.44625831480638223
--6.2434474887875624e-2,0.4162583148063822"/><polyline points="3.6691467618872986e-2,0.44625831480638223
-3.6691467618872986e-2,0.4162583148063822"/><polyline points="0.13581741012562165,0.44625831480638223
-0.13581741012562165,0.4162583148063822"/><polyline points="0.23494335263237032,0.44625831480638223
-0.23494335263237032,0.4162583148063822"/><polyline points="0.334069295139119,0.44625831480638223
-0.334069295139119,0.4162583148063822"/><polyline points="0.43319523764586754,0.44625831480638223
-0.43319523764586754,0.4162583148063822"/><polyline points="0.532321180152616,0.44625831480638223
-0.532321180152616,0.4162583148063822"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.5714604594683785e-3" y="0.41652604041107516" width="0.9912594250674862" x="-0.45893824491487023"/></g><g fill-opacity="0.1" stroke-opacity="0.0" fill="#1f78b5" stroke-width="1.0e-2" stroke="#000000"><path d="M -0.4589,-0.0536 Q 0.5323,0.3929 0.0367,-0.5"/></g><g stroke-opacity="1.0" fill="none" stroke-width="2.0e-3" stroke="#a6cfe3"><polyline points="-0.45893824491487023,-5.3567442566451406e-2
--0.43926174532728063,-4.477272118501041e-2
--0.41988262356721123,-3.624585933802971e-2
--0.40080087963466215,-2.798685702550907e-2
--0.3820165135296333,-1.9995714247448615e-2
--0.3635295252521247,-1.2272431003848006e-2
--0.3453399148021363,-4.817007294707909e-3
--0.32744768217966813,2.3705568799722854e-3
--0.3098528273847203,9.2902615201923e-3
--0.29255535041729264,1.5942106625952135e-2
--0.2755552512773852,2.23260921972519e-2
--0.2588525299649981,2.8442218234091488e-2
--0.2424471864801313,3.4290484736470894e-2
--0.22633922082278457,3.98708917043904e-2
--0.2105286329929581,4.518343913784956e-2
--0.195015422990652,5.022812703684876e-2
--0.17979959081586616,5.500495540138767e-2
--0.16488113646860036,5.9513924231466564e-2
--0.15026005994885494,6.375503352708523e-2
--0.13593636125662983,6.772828328824382e-2
--0.12191004039192482,7.143367351494223e-2
--0.10818109735474019,7.487120420718058e-2
--9.474953214507575e-2,7.804087536495868e-2
--8.161534476293142e-2,8.094268698827678e-2
--6.877853520830757e-2,8.35766390771347e-2
--5.623910348120387e-2,8.59427316315326e-2
--4.399704958162032e-2,8.804096465147021e-2
--3.205237350955725e-2,8.98713381369477e-2
--2.0405075265014228e-2,9.143385208796523e-2
--9.055154847991576e-3,9.272850650452247e-2
-1.9973877415109254e-3,9.375530138661958e-2
-1.2752552503493053e-2,9.451423673425657e-2
-2.321033943795514e-2,9.50053125474336e-2
-3.3370748544896855e-2,9.52285288261503e-2
-4.323377982431842e-2,9.518388557040697e-2
-5.279943327621961e-2,9.487138278020352e-2
-6.206770890060065e-2,9.429102045553983e-2
-7.103860669746143e-2,9.344279859641613e-2
-7.971212666680183e-2,9.232671720283225e-2
-8.80882688086222e-2,9.094277627478825e-2
-9.616703312292219e-2,8.929097581228418e-2
-0.10394841960970191,8.737131581531987e-2
-0.11143242826896149,8.51837962838955e-2
-0.1186190591007007,8.2728417218011e-2
-0.12550831210491997,8.000517861766637e-2
-0.13210018728161854,7.701408048286157e-2
-0.13839468463079718,7.37551228135967e-2
-0.14439180415245545,7.022830560987159e-2
-0.15009154584659323,6.643362887168641e-2
-0.1554939097132113,6.237109259904122e-2
-0.1605988957523089,5.804069679193574e-2
-0.16540650396388623,5.344244145037025e-2
-0.1699167343479432,4.8576326574344464e-2
-0.17412958690448,4.344235216385878e-2
-0.17804506163349665,3.80405182189128e-2
-0.18166315853499282,3.23708247395067e-2
-0.18498387760896895,2.6433271725640528e-2
-0.1880072188554247,2.0227859177314234e-2
-0.19073318227436042,1.375458709452776e-2
-0.19316176786577566,7.013455477281272e-3
-0.19529297562967074,4.464325574382588e-6
-0.19712680556604556,-7.272386360592353e-3
-0.19866325767490034,-1.4817096581219436e-2
-0.19990233195623452,-2.2629666336306475e-2
-0.20084402841004867,-3.0710095625853695e-2
-0.20148834703634255,-3.9058384449861094e-2
-0.20183528783511606,-4.767453280832845e-2
-0.20188485080636953,-5.655854070125621e-2
-0.20163703595010274,-6.571040812864393e-2
-0.20109184326631557,-7.513013509049193e-2
-0.20024927275500815,-8.48177215867999e-2
-0.19910932441618068,-9.477316761756782e-2
-0.19767199824983284,-0.10499647318279604
-0.19593729425596462,-0.11548763828248454
-0.19390521243457637,-0.126246662916633
-0.19157575278566785,-0.13727354708524175
-0.18894891530923896,-0.14856829078831058
-0.1860247000052898,-0.16013089402583935
-0.1828031068738204,-0.17196135679782854
-0.17928413591483094,-0.18405967910427745
-0.17546778712832112,-0.196425860945187
-0.17135406051429092,-0.2090599023205565
-0.16694295607274057,-0.22196180323038595
-0.16223447380367007,-0.23513156367467558
-0.1572286137070792,-0.24856918365342529
-0.15192537578296827,-0.26227466316663517
-0.1463247600313371,-0.27624800221430523
-0.14042676645218544,-0.2904892007964356
-0.13423139504551374,-0.3049982589130259
-0.12773864581132155,-0.3197751765640764
-0.12094851874960932,-0.33481995374958695
-0.11386101386037684,-0.3501325904695577
-0.10647613114362398,-0.3657130867239884
-9.879387059935085e-2,-0.3815614425128795
-9.08142322275578e-2,-0.39767765783623066
-8.253721602824415e-2,-0.4140617326940419
-7.396282200141058e-2,-0.430713667086313
-6.509105014705663e-2,-0.4476334610130446
-5.5921900465182195e-2,-0.46482111447423624
-4.645537295578761e-2,-0.482276627469888
-3.6691467618872986e-2,-0.5"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="3.0e-3" stroke="#1f78b5"><rect height="3.0e-2" y="-6.85674425664514e-2" width="3.0000000000000027e-2" x="-0.47393824491487024"/><rect height="3.0000000000000027e-2" y="-0.515" width="3.0e-2" x="2.1691467618872987e-2"/><rect height="3.0000000000000027e-2" y="0.3778651148670971" width="3.0000000000000027e-2" x="0.517321180152616"/></g><g fill-opacity="0.1" stroke-opacity="1.0" fill="#6666cc" stroke-width="2.0e-3" stroke="#808080"><rect height="0.5952434099113981" y="-0.5" width="0.6608396167116576" x="-0.45893824491487023"/></g><g></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="450.74399222262986" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7049708234277069 -0.47438340177220667 1.4549708234277068 0.9683795115625675" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"><g class="quad"><g fill="rgb(66%, 7%, 55%)" stroke="rgb(0%, 0%, 0%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="0.0"><path d="M -0.5880,0.0169 Q 0.3116,0.4006 -0.1382,-0.3667"/></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="2.0e-3" stroke-opacity="1.0"><polyline points="-0.5880213961530149,1.6922516142470367e-2
+-0.5701641182191485,2.448081649656314e-2
+-0.5525767235789928,3.180891480941461e-2
+-0.535259212232548,3.890681108102473e-2
+-0.5182115841798142,4.577450531139343e-2
+-0.501433839420791,5.2411997500520724e-2
+-0.4849259779554787,5.881928764840655e-2
+-0.4686879997838772,6.499637575505102e-2
+-0.45271990490598657,7.094326182045407e-2
+-0.4370216933218068,7.665994584461566e-2
+-0.42159336503133776,8.214642782753595e-2
+-0.4064349200345796,8.740270776921472e-2
+-0.3915463583315323,9.242878566965207e-2
+-0.3769276799221958,9.722466152884812e-2
+-0.36257888480657013,0.10179033534680276
+-0.3484999729846553,0.10612580712351594
+-0.3346909444564513,0.1102310768589877
+-0.3211517992219581,0.1141061445532181
+-0.30788253728117565,0.11775101020620704
+-0.29488315863410414,0.12116567381795462
+-0.2821536632807434,0.12435013538846074
+-0.2696940512210936,0.1273043949177255
+-0.2575043224551545,0.13002845240574873
+-0.24558447698292635,0.13252230785253072
+-0.2339345148044089,0.13478596125807119
+-0.22255443591960233,0.1368194126223703
+-0.21144424032850662,0.138622661945428
+-0.2006039280311217,0.14019570922724428
+-0.19003349902744765,0.14153855446781916
+-0.1797329533174844,0.14265119766715262
+-0.1697022909012319,0.14353363882524467
+-0.15994151177869037,0.1441858779420953
+-0.15045061594985953,0.14460791501770465
+-0.1412296034147396,0.14479975005207246
+-0.1322784741733306,0.14476138304519887
+-0.12359722822563213,0.1444928139970839
+-0.11518586557164479,0.14399404290772755
+-0.10704438621136814,0.14326506977712977
+-9.917279014480229e-2,0.14230589460529053
+-9.157107737194736e-2,0.14111651739220993
+-8.423924789280313e-2,0.13969693813788792
+-7.71773017073697e-2,0.1380471568423245
+-7.038523881564729e-2,0.1361671735055197
+-6.386305921763569e-2,0.13405698812747346
+-5.761076291333467e-2,0.13171660070818586
+-5.1628349902744786e-2,0.12914601124765668
+-4.59158201858656e-2,0.1263452197458863
+-4.047317376269732e-2,0.12331422620287436
+-3.530041063323974e-2,0.12005303061862105
+-3.0397530797492966e-2,0.11656163299312644
+-2.5764534255457106e-2,0.11284003332639037
+-2.140142100713216e-2,0.10888823161841282
+-1.7308191052517907e-2,0.10470622786919387
+-1.348484439161457e-2,0.10029402207873361
+-9.931381024421815e-3,9.565161424703189e-2
+-6.647800950940197e-3,9.077900437408865e-2
+-3.6341041711692723e-3,8.567619245990415e-2
+-8.902906851092629e-4,8.034317850447825e-2
+1.5836395072399423e-3,7.477996250781088e-2
+3.7876864058786763e-3,6.898654446990216e-2
+5.72185001080594e-3,6.29629243907519e-2
+7.386130322022844e-3,5.6709102270360356e-2
+8.780527339528721e-3,5.022507810872734e-2
+9.905041063323905e-3,4.3510851905852854e-2
+1.0759671493408174e-2,3.6566423661737124e-2
+1.134441862978175e-2,2.939179337637987e-2
+1.1659282472444299e-2,2.1986961049781262e-2
+1.1704263021396155e-2,1.435192668194113e-2
+1.1479360276637096e-2,6.4866902728596965e-3
+1.0984574238167233e-2,-1.6087481774630374e-3
+1.0219904905986565e-2,-9.934388669027239e-3
+9.185352280095094e-3,-1.8490231201832907e-2
+7.880916360492707e-3,-2.7276275775879988e-2
+6.306597147179516e-3,-3.6292522391168536e-2
+4.462394640155742e-3,-4.553897104769833e-2
+2.3483088394207208e-3,-5.50156217454697e-2
+-3.5660255024883014e-5,-6.472247448448254e-2
+-2.689512643181402e-3,-7.465952926473662e-2
+-5.613248325048725e-3,-8.482678608623206e-2
+-8.806867300626742e-3,-9.522424494896897e-2
+-1.2270369569915784e-2,-0.10585190585294746
+-1.600375513291552e-2,-0.11670976879816719
+-2.0007023989626282e-2,-0.12779783378462806
+-2.4280176140047627e-2,-0.13911610081233072
+-2.8823211584179886e-2,-0.15066456988127463
+-3.363613032202306e-2,-0.16244324099146012
+-3.871893235357682e-2,-0.17445211414288686
+-4.40716176788416e-2,-0.18669118933555506
+-4.969418629781719e-2,-0.19916046656946473
+-5.558663821050358e-2,-0.21185994584461576
+-6.174897341690089e-2,-0.22478962716100825
+-6.8181191917009e-2,-0.237949510518642
+-7.48832937108278e-2,-0.2513395959175173
+-8.185527879835752e-2,-0.2649598833576339
+-8.909714717959794e-2,-0.2788103728389919
+-9.660889885454937e-2,-0.2928910643615913
+-0.10439053382321162,-0.30720195792543226
+-0.11244205208558455,-0.32174305353051436
+-0.12076345364166852,-0.33651435117683803
+-0.12935473849146317,-0.3515158508644033
+-0.13821590663496874,-0.3667475525932098"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="-0.6030213961530149" width="3.0000000000000027e-2" y="1.922516142470368e-3" height="3.0e-2"/><rect x="-0.15321590663496876" width="3.0000000000000013e-2" y="-0.3817475525932098" height="3.0000000000000027e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.40059258487815036" cx="0.3115895828830775" r="1.5e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(40%, 40%, 40%)" stroke-width="2.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.5880213961530149" width="0.5997406526907282" y="-0.3667475525932098" height="0.5115600916475735"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5979171169224119" width="0.9194024205748864" y="-0.3794086648614873" height="0.7926623620079151"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6159093365031337, 0.40059258487815036)"><polyline points="-0.6159093365031337,0.4155925848781504
+-0.6159093365031337,0.38559258487815035"/></g><g transform="rotate(-90.0, -0.6159093365031337, 0.32385857113101435)"><polyline points="-0.6159093365031337,0.33885857113101436
+-0.6159093365031337,0.30885857113101434"/></g><g transform="rotate(-90.0, -0.6159093365031337, 0.24712455738387834)"><polyline points="-0.6159093365031337,0.26212455738387835
+-0.6159093365031337,0.23212455738387833"/></g><g transform="rotate(-90.0, -0.6159093365031337, 0.17039054363674233)"><polyline points="-0.6159093365031337,0.18539054363674234
+-0.6159093365031337,0.15539054363674232"/></g><g transform="rotate(-90.0, -0.6159093365031337, 9.365652988960627e-2)"><polyline points="-0.6159093365031337,0.10865652988960627
+-0.6159093365031337,7.865652988960627e-2"/></g><g transform="rotate(-90.0, -0.6159093365031337, 1.6922516142470367e-2)"><polyline points="-0.6159093365031337,3.192251614247037e-2
+-0.6159093365031337,1.922516142470368e-3"/></g><g transform="rotate(-90.0, -0.6159093365031337, -5.981149760466575e-2)"><polyline points="-0.6159093365031337,-4.4811497604665754e-2
+-0.6159093365031337,-7.481149760466575e-2"/></g><g transform="rotate(-90.0, -0.6159093365031337, -0.13654551135180182)"><polyline points="-0.6159093365031337,-0.12154551135180182
+-0.6159093365031337,-0.15154551135180183"/></g><g transform="rotate(-90.0, -0.6159093365031337, -0.21327952509893777)"><polyline points="-0.6159093365031337,-0.19827952509893776
+-0.6159093365031337,-0.22827952509893779"/></g><g transform="rotate(-90.0, -0.6159093365031337, -0.29001353884607384)"><polyline points="-0.6159093365031337,-0.2750135388460738
+-0.6159093365031337,-0.30501353884607385"/></g><g transform="rotate(-90.0, -0.6159093365031337, -0.3667475525932098)"><polyline points="-0.6159093365031337,-0.3517475525932098
+-0.6159093365031337,-0.3817475525932098"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.998703263453641e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.6375" y="0.4111435117683816">-1.00</text><text x="-0.6375" y="0.33440949802124553">-0.80</text><text x="-0.6375" y="0.2576754842741095">-0.60</text><text x="-0.6375" y="0.18094147052697357">-0.40</text><text x="-0.6375" y="0.10420745677983745">-0.20</text><text x="-0.6375" y="2.747344303270155e-2"> 0.00</text><text x="-0.6375" y="-4.926057071443457e-2"> 0.20</text><text x="-0.6375" y="-0.12599458446157064"> 0.40</text><text x="-0.6375" y="-0.20272859820870648"> 0.60</text><text x="-0.6375" y="-0.27946261195584265"> 0.80</text><text x="-0.6375" y="-0.3561966257029785"> 1.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5880213961530149,0.40059258487815036
+0.3115895828830775,0.40059258487815036"/><polyline points="-0.5880213961530149,0.32385857113101435
+0.3115895828830775,0.32385857113101435"/><polyline points="-0.5880213961530149,0.24712455738387834
+0.3115895828830775,0.24712455738387834"/><polyline points="-0.5880213961530149,0.17039054363674233
+0.3115895828830775,0.17039054363674233"/><polyline points="-0.5880213961530149,9.365652988960627e-2
+0.3115895828830775,9.365652988960627e-2"/><polyline points="-0.5880213961530149,1.6922516142470367e-2
+0.3115895828830775,1.6922516142470367e-2"/><polyline points="-0.5880213961530149,-5.981149760466575e-2
+0.3115895828830775,-5.981149760466575e-2"/><polyline points="-0.5880213961530149,-0.13654551135180182
+0.3115895828830775,-0.13654551135180182"/><polyline points="-0.5880213961530149,-0.21327952509893777
+0.3115895828830775,-0.21327952509893777"/><polyline points="-0.5880213961530149,-0.29001353884607384
+0.3115895828830775,-0.29001353884607384"/><polyline points="-0.5880213961530149,-0.3667475525932098
+0.3115895828830775,-0.3667475525932098"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.6063134860600821" width="2.398962610762889e-3" y="-0.36828223286815254" height="0.7704094980212457"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5880213961530149,0.45127390127056866
+-0.5880213961530149,0.42127390127056863"/><polyline points="-0.4980602982494056,0.45127390127056866
+-0.4980602982494056,0.42127390127056863"/><polyline points="-0.4080992003457964,0.45127390127056866
+-0.4080992003457964,0.42127390127056863"/><polyline points="-0.3181381024421871,0.45127390127056866
+-0.3181381024421871,0.42127390127056863"/><polyline points="-0.22817700453857787,0.45127390127056866
+-0.22817700453857787,0.42127390127056863"/><polyline points="-0.13821590663496874,0.45127390127056866
+-0.13821590663496874,0.42127390127056863"/><polyline points="-4.8254808731359344e-2,0.45127390127056866
+-4.8254808731359344e-2,0.42127390127056863"/><polyline points="4.170628917224983e-2,0.45127390127056866
+4.170628917224983e-2,0.42127390127056863"/><polyline points="0.131667387075859,0.45127390127056866
+0.131667387075859,0.42127390127056863"/><polyline points="0.2216284849794684,0.45127390127056866
+0.2216284849794684,0.42127390127056863"/><polyline points="0.3115895828830775,0.45127390127056866
+0.3115895828830775,0.42127390127056863"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.998703263453641e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5880213961530149" y="0.485">0.00</text><text x="-0.4980602982494056" y="0.485">0.20</text><text x="-0.4080992003457964" y="0.485">0.40</text><text x="-0.3181381024421871" y="0.485">0.60</text><text x="-0.22817700453857787" y="0.485">0.80</text><text x="-0.13821590663496874" y="0.485">1.00</text><text x="-4.8254808731359344e-2" y="0.485">1.20</text><text x="4.170628917224983e-2" y="0.485">1.40</text><text x="0.131667387075859" y="0.485">1.60</text><text x="0.2216284849794684" y="0.485">1.80</text><text x="0.3115895828830775" y="0.485">2.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5880213961530149,0.40059258487815036
+-0.5880213961530149,-0.3667475525932098"/><polyline points="-0.4980602982494056,0.40059258487815036
+-0.4980602982494056,-0.3667475525932098"/><polyline points="-0.4080992003457964,0.40059258487815036
+-0.4080992003457964,-0.3667475525932098"/><polyline points="-0.3181381024421871,0.40059258487815036
+-0.3181381024421871,-0.3667475525932098"/><polyline points="-0.22817700453857787,0.40059258487815036
+-0.22817700453857787,-0.3667475525932098"/><polyline points="-0.13821590663496874,0.40059258487815036
+-0.13821590663496874,-0.3667475525932098"/><polyline points="-4.8254808731359344e-2,0.40059258487815036
+-4.8254808731359344e-2,-0.3667475525932098"/><polyline points="4.170628917224983e-2,0.40059258487815036
+4.170628917224983e-2,-0.3667475525932098"/><polyline points="0.131667387075859,0.40059258487815036
+0.131667387075859,-0.3667475525932098"/><polyline points="0.2216284849794684,0.40059258487815036
+0.2216284849794684,-0.3667475525932098"/><polyline points="0.3115895828830775,0.40059258487815036
+0.3115895828830775,-0.3667475525932098"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5892208774583964" width="0.9020099416468553" y="0.4209270985211414" height="3.069360549885436e-3"/></g></g></g><g class="legend"><g class="legendBorder"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="2.5e-3" fill-opacity="0.0" stroke-opacity="1.0"><rect x="0.38355846120596504" width="0.3634428355305812" y="-0.2546839200166634" height="0.34977921266402856"/></g></g><g class="legendContent"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.998703263453641e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3985519775232331" y="6.440168714851074e-2">Bounding Box</text></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(40%, 40%, 40%)" stroke-width="2.5e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.6714339744975144" width="2.9987032634536392e-2" y="3.562643199333476e-2" height="3.836700687356792e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.998703263453641e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3985519775232331" y="3.0144761508018036e-3">Path Control Point</text></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-6.577275567590135e-3" cx="0.6864274908147825" r="2.5e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.998703263453641e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3985519775232331" y="-5.837273484690686e-2">Path Endpoints</text></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="0.6614274908147825" width="5.0000000000000044e-2" y="-9.296448656529907e-2" height="4.9999999999999996e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.998703263453641e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3985519775232331" y="-0.11975994584461569">Path Chord</text></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="2.0e-3" stroke-opacity="1.0"><polyline points="0.6714339744975144,-0.1293516975630078
+0.7314080397665872,-0.1293516975630078"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.998703263453641e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3985519775232331" y="-0.18114715684232452">Path Fill</text></g><g fill="rgb(66%, 7%, 55%)" stroke="rgb(0%, 0%, 0%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="0.0"><path d="M 0.6714,-0.1779 Q 0.7314,-0.1396 0.7014,-0.2163"/></g></g></g><g class="title"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.7979252215258256e-2" fill-opacity="1.0" text-anchor="middle"><text x="2.2514588286146497e-2" y="-0.43600000000000005">QuadPosition (Point 0 0) (Point 1 1) (Point 2 (-1))</text></g></g></g></svg>
diff --git a/other/rect.svg b/other/rect.svg
--- a/other/rect.svg
+++ b/other/rect.svg
@@ -1,23 +1,36 @@
-<svg height="300.0" width="442.8070175438596" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.795 -0.5225 1.5775000000000001 1.06875"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9019165727170236" y="-0.5" width="1.5" x="-0.75"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.75,0.40191657271702363
--0.75,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6,0.40191657271702363
--0.6,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.44999999999999996,0.40191657271702363
--0.44999999999999996,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.29999999999999993,0.40191657271702363
--0.29999999999999993,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.1499999999999999,0.40191657271702363
--0.1499999999999999,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.0,0.40191657271702363
-0.0,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.15000000000000013,0.40191657271702363
-0.15000000000000013,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.2999999999999998,0.40191657271702363
-0.2999999999999998,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.4500000000000002,0.40191657271702363
-0.4500000000000002,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.6000000000000001,0.40191657271702363
-0.6000000000000001,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.75,0.40191657271702363
-0.75,-0.5"/></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.75">-5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.6">-4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.44999999999999996">-3</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.29999999999999993">-2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.1499999999999999">-1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.0">0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.15000000000000013">1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.2999999999999998">2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.4500000000000002">3</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.6000000000000001">4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.75">5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.75,0.44081736189402476
--0.75,0.41081736189402474"/><polyline points="-0.6,0.44081736189402476
--0.6,0.41081736189402474"/><polyline points="-0.44999999999999996,0.44081736189402476
--0.44999999999999996,0.41081736189402474"/><polyline points="-0.29999999999999993,0.44081736189402476
--0.29999999999999993,0.41081736189402474"/><polyline points="-0.1499999999999999,0.44081736189402476
--0.1499999999999999,0.41081736189402474"/><polyline points="0.0,0.44081736189402476
-0.0,0.41081736189402474"/><polyline points="0.15000000000000013,0.44081736189402476
-0.15000000000000013,0.41081736189402474"/><polyline points="0.2999999999999998,0.44081736189402476
-0.2999999999999998,0.41081736189402474"/><polyline points="0.4500000000000002,0.44081736189402476
-0.4500000000000002,0.41081736189402474"/><polyline points="0.6000000000000001,0.44081736189402476
-0.6000000000000001,0.41081736189402474"/><polyline points="0.75,0.44081736189402476
-0.75,0.41081736189402474"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.6076662908680057e-3" y="0.41093573844419395" width="1.5" x="-0.75"/></g><g fill-opacity="1.0" stroke-opacity="0.0" fill="#a6cfe3" stroke-width="0.0" stroke="#000000"><rect height="5.541566947764309e-6" y="0.40191103115007587" width="2.9999999999999916e-2" x="-0.75"/><rect height="1.447289085471093e-5" y="0.4019020998261689" width="3.0000000000000027e-2" x="-0.72"/><rect height="3.631668593628845e-5" y="0.40188025603108735" width="2.9999999999999916e-2" x="-0.69"/><rect height="8.755588746184317e-5" y="0.4018290168295618" width="2.9999999999999916e-2" x="-0.66"/><rect height="2.0281156633938924e-4" y="0.40171376115068425" width="2.9999999999999916e-2" x="-0.63"/><rect height="4.5136544166002324e-4" y="0.4014652072753636" width="2.9999999999999916e-2" x="-0.6"/><rect height="9.651439906557258e-4" y="0.4009514287263679" width="3.0000000000000138e-2" x="-0.5700000000000001"/><rect height="1.982823867456629e-3" y="0.399933748849567" width="3.0000000000000027e-2" x="-0.5399999999999999"/><rect height="3.913851878907693e-3" y="0.39800272083811594" width="3.0000000000000138e-2" x="-0.51"/><rect height="7.422545252780133e-3" y="0.3944940274642435" width="3.0000000000000027e-2" x="-0.48"/><rect height="1.3524759251840046e-2" y="0.3883918134651836" width="3.0000000000000027e-2" x="-0.44999999999999996"/><rect height="2.3677424095321753e-2" y="0.3782391486217019" width="3.0000000000000027e-2" x="-0.41999999999999993"/><rect height="3.982608200197779e-2" y="0.36209049071504584" width="3.0000000000000027e-2" x="-0.3899999999999999"/><rect height="6.43619116630314e-2" y="0.33755466105399223" width="3.0000000000000027e-2" x="-0.36"/><rect height="9.993520483637786e-2" y="0.3019813678806458" width="3.0000000000000027e-2" x="-0.32999999999999996"/><rect height="0.14908580673874772" y="0.2528307659782759" width="3.0000000000000027e-2" x="-0.29999999999999993"/><rect height="0.21368907209210536" y="0.18822750062491828" width="3.0000000000000027e-2" x="-0.2699999999999999"/><rect height="0.29427715411322636" y="0.10763941860379728" width="3.0000000000000138e-2" x="-0.23999999999999988"/><rect height="0.389366875697028" y="1.2549697019995643e-2" width="3.0000000000000027e-2" x="-0.20999999999999996"/><rect height="0.49498230989314684" y="-9.306573717612321e-2" width="3.0000000000000027e-2" x="-0.17999999999999994"/><rect height="0.6045727585439812" y="-0.20265618582695755" width="3.0000000000000027e-2" x="-0.1499999999999999"/><rect height="0.7094727044568689" y="-0.3075561317398453" width="3.0000000000000027e-2" x="-0.11999999999999988"/><rect height="0.7999282405566247" y="-0.39801166783960107" width="3.0000000000000027e-2" x="-8.999999999999986e-2"/><rect height="0.8665519180629746" y="-0.46463534534595097" width="3.0000000000000027e-2" x="-5.999999999999983e-2"/><rect height="0.9019165727170236" y="-0.5" width="3.0000000000000027e-2" x="-2.9999999999999805e-2"/><rect height="0.9019165727170236" y="-0.5" width="3.0000000000000027e-2" x="0.0"/><rect height="0.8665519180629746" y="-0.46463534534595097" width="3.0000000000000027e-2" x="3.0000000000000027e-2"/><rect height="0.7999282405566244" y="-0.39801166783960074" width="3.0000000000000027e-2" x="6.000000000000005e-2"/><rect height="0.7094727044568686" y="-0.307556131739845" width="3.0000000000000027e-2" x="9.000000000000008e-2"/><rect height="0.604572758543981" y="-0.20265618582695732" width="3.0000000000000027e-2" x="0.1200000000000001"/><rect height="0.4949823098931466" y="-9.306573717612299e-2" width="3.0000000000000027e-2" x="0.15000000000000013"/><rect height="0.38936687569702777" y="1.2549697019995865e-2" width="3.0000000000000027e-2" x="0.18000000000000016"/><rect height="0.2942771541132259" y="0.10763941860379772" width="3.0000000000000027e-2" x="0.2100000000000002"/><rect height="0.21368907209210503" y="0.1882275006249186" width="3.0000000000000027e-2" x="0.2400000000000002"/><rect height="0.1490858067387475" y="0.25283076597827614" width="3.0000000000000027e-2" x="0.27000000000000024"/><rect height="9.993520483637774e-2" y="0.3019813678806459" width="3.000000000000025e-2" x="0.2999999999999998"/><rect height="6.436191166303129e-2" y="0.33755466105399234" width="2.9999999999999805e-2" x="0.33000000000000007"/><rect height="3.982608200197768e-2" y="0.36209049071504595" width="3.000000000000025e-2" x="0.3599999999999999"/><rect height="2.3677424095321642e-2" y="0.378239148621702" width="2.9999999999999805e-2" x="0.3900000000000001"/><rect height="1.3524759251840046e-2" y="0.3883918134651836" width="3.000000000000025e-2" x="0.41999999999999993"/><rect height="7.422545252780133e-3" y="0.3944940274642435" width="2.9999999999999805e-2" x="0.4500000000000002"/><rect height="3.913851878907637e-3" y="0.398002720838116" width="3.000000000000025e-2" x="0.4800000000000002"/><rect height="1.982823867456629e-3" y="0.399933748849567" width="2.9999999999999805e-2" x="0.5100000000000002"/><rect height="9.651439906557258e-4" y="0.4009514287263679" width="3.000000000000025e-2" x="0.54"/><rect height="4.5136544166002324e-4" y="0.4014652072753636" width="2.9999999999999805e-2" x="0.5700000000000003"/><rect height="2.0281156633938924e-4" y="0.40171376115068425" width="2.9999999999999805e-2" x="0.6000000000000001"/><rect height="8.755588746184317e-5" y="0.4018290168295618" width="2.9999999999999805e-2" x="0.6300000000000003"/><rect height="3.631668593628845e-5" y="0.40188025603108735" width="2.9999999999999805e-2" x="0.6600000000000001"/><rect height="1.447289085471093e-5" y="0.4019020998261689" width="2.9999999999999805e-2" x="0.6900000000000004"/><rect height="5.541566947764309e-6" y="0.40191103115007587" width="2.9999999999999805e-2" x="0.7200000000000002"/></g><g fill-opacity="1.0" stroke-opacity="0.0" fill="#1f78b5" stroke-width="0.0" stroke="#000000"><rect height="2.253624368773849e-2" y="0.37938032902928515" width="2.9999999999999916e-2" x="-0.75"/><rect height="2.8649180639473637e-2" y="0.37326739207755" width="3.0000000000000027e-2" x="-0.72"/><rect height="3.60578590373129e-2" y="0.36585871367971073" width="2.9999999999999916e-2" x="-0.69"/><rect height="4.493085910119554e-2" y="0.3569857136158281" width="2.9999999999999916e-2" x="-0.66"/><rect height="5.543021508815271e-2" y="0.3464863576288709" width="2.9999999999999916e-2" x="-0.63"/><rect height="6.77026175940812e-2" y="0.33421395512294244" width="2.9999999999999916e-2" x="-0.6"/><rect height="8.186936308598547e-2" y="0.32004720963103817" width="3.0000000000000138e-2" x="-0.5700000000000001"/><rect height="9.801542299426558e-2" y="0.30390114972275806" width="3.0000000000000027e-2" x="-0.5399999999999999"/><rect height="0.11617815637932072" y="0.2857384163377029" width="3.0000000000000138e-2" x="-0.51"/><rect height="0.1363363294829193" y="0.26558024323410434" width="3.0000000000000027e-2" x="-0.48"/><rect height="0.1584002161211413" y="0.24351635659588233" width="3.0000000000000027e-2" x="-0.44999999999999996"/><rect height="0.18220361833747106" y="0.21971295437955257" width="3.0000000000000027e-2" x="-0.41999999999999993"/><rect height="0.20749865210715862" y="0.194417920609865" width="3.0000000000000027e-2" x="-0.3899999999999999"/><rect height="0.23395407695778547" y="0.16796249575923816" width="3.0000000000000027e-2" x="-0.36"/><rect height="0.26115780560242313" y="0.1407587671146005" width="3.0000000000000027e-2" x="-0.32999999999999996"/><rect height="0.28862401178025143" y="0.1132925609367722" width="3.0000000000000027e-2" x="-0.29999999999999993"/><rect height="0.31580497134978075" y="8.611160136724288e-2" width="3.0000000000000027e-2" x="-0.2699999999999999"/><rect height="0.3421074413706784" y="5.9809131346345246e-2" width="3.0000000000000138e-2" x="-0.23999999999999988"/><rect height="0.3669130297379998" y="3.500354297902386e-2" width="3.0000000000000027e-2" x="-0.20999999999999996"/><rect height="0.3896016643794924" y="1.2314908337531238e-2" width="3.0000000000000027e-2" x="-0.17999999999999994"/><rect height="0.4095769688621528" y="-7.660396145129145e-3" width="3.0000000000000027e-2" x="-0.1499999999999999"/><rect height="0.426292122052789" y="-2.4375549335765356e-2" width="3.0000000000000027e-2" x="-0.11999999999999988"/><rect height="0.4392746499579623" y="-3.735807724093865e-2" width="3.0000000000000027e-2" x="-8.999999999999986e-2"/><rect height="0.44814858652689726" y="-4.623201380987363e-2" width="3.0000000000000027e-2" x="-5.999999999999983e-2"/><rect height="0.4526525547000263" y="-5.0735981983002665e-2" width="3.0000000000000027e-2" x="-2.9999999999999805e-2"/><rect height="0.4526525547000263" y="-5.0735981983002665e-2" width="3.0000000000000027e-2" x="0.0"/><rect height="0.44814858652689726" y="-4.623201380987363e-2" width="3.0000000000000027e-2" x="3.0000000000000027e-2"/><rect height="0.4392746499579623" y="-3.735807724093865e-2" width="3.0000000000000027e-2" x="6.000000000000005e-2"/><rect height="0.4262921220527889" y="-2.4375549335765245e-2" width="3.0000000000000027e-2" x="9.000000000000008e-2"/><rect height="0.4095769688621528" y="-7.660396145129145e-3" width="3.0000000000000027e-2" x="0.1200000000000001"/><rect height="0.3896016643794923" y="1.231490833753135e-2" width="3.0000000000000027e-2" x="0.15000000000000013"/><rect height="0.3669130297379998" y="3.500354297902386e-2" width="3.0000000000000027e-2" x="0.18000000000000016"/><rect height="0.3421074413706783" y="5.980913134634536e-2" width="3.0000000000000027e-2" x="0.2100000000000002"/><rect height="0.31580497134978064" y="8.6111601367243e-2" width="3.0000000000000027e-2" x="0.2400000000000002"/><rect height="0.2886240117802512" y="0.11329256093677242" width="3.0000000000000027e-2" x="0.27000000000000024"/><rect height="0.261157805602423" y="0.1407587671146006" width="3.000000000000025e-2" x="0.2999999999999998"/><rect height="0.23395407695778542" y="0.16796249575923822" width="2.9999999999999805e-2" x="0.33000000000000007"/><rect height="0.2074986521071585" y="0.19441792060986512" width="3.000000000000025e-2" x="0.3599999999999999"/><rect height="0.18220361833747095" y="0.21971295437955268" width="2.9999999999999805e-2" x="0.3900000000000001"/><rect height="0.1584002161211412" y="0.24351635659588244" width="3.000000000000025e-2" x="0.41999999999999993"/><rect height="0.1363363294829193" y="0.26558024323410434" width="2.9999999999999805e-2" x="0.4500000000000002"/><rect height="0.11617815637932061" y="0.285738416337703" width="3.000000000000025e-2" x="0.4800000000000002"/><rect height="9.801542299426558e-2" y="0.30390114972275806" width="2.9999999999999805e-2" x="0.5100000000000002"/><rect height="8.186936308598547e-2" y="0.32004720963103817" width="3.000000000000025e-2" x="0.54"/><rect height="6.770261759408114e-2" y="0.3342139551229425" width="2.9999999999999805e-2" x="0.5700000000000003"/><rect height="5.543021508815277e-2" y="0.34648635762887087" width="2.9999999999999805e-2" x="0.6000000000000001"/><rect height="4.493085910119554e-2" y="0.3569857136158281" width="2.9999999999999805e-2" x="0.6300000000000003"/><rect height="3.60578590373129e-2" y="0.36585871367971073" width="2.9999999999999805e-2" x="0.6600000000000001"/><rect height="2.8649180639473526e-2" y="0.3732673920775501" width="2.9999999999999805e-2" x="0.6900000000000004"/><rect height="2.253624368773849e-2" y="0.37938032902928515" width="2.9999999999999805e-2" x="0.7200000000000002"/></g><g></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="448.85901573886144" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7474268617021277 -0.5 1.4948537234042556 0.9991023936170212" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"><g class="rect"><g fill="rgb(2%, 29%, 48%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.7051196808510638" width="2.8204787234042517e-2" y="0.4007717859632665" height="5.534567140419444e-6"/><rect x="-0.6769148936170212" width="2.8204787234042406e-2" y="0.4007628659209244" height="1.4454609482517089e-5"/><rect x="-0.6487101063829787" width="2.8204787234042517e-2" y="0.40074104971774216" height="3.627081266477372e-5"/><rect x="-0.6205053191489361" width="2.8204787234042406e-2" y="0.40068987523880195" height="8.744529160498171e-5"/><rect x="-0.5923005319148936" width="2.8204787234042517e-2" y="0.40057476514465823" height="2.025553857487039e-4"/><rect x="-0.564095744680851" width="2.8204787234042517e-2" y="0.4003265252291367" height="4.507953012702348e-4"/><rect x="-0.5358909574468085" width="2.8204787234042628e-2" y="0.3998133956573891" height="9.639248730178296e-4"/><rect x="-0.5076861702127659" width="2.8204787234042572e-2" y="0.39879700125871337" height="1.9803192716935647e-3"/><rect x="-0.4794813829787234" width="2.8204787234042628e-2" y="0.3968684124173042" height="3.908908113102738e-3"/><rect x="-0.4512765957446808" width="2.8204787234042572e-2" y="0.39336415103494765" height="7.413169495459282e-3"/><rect x="-0.42307180851063825" width="2.8204787234042628e-2" y="0.38726964502224914" height="1.350767550815779e-2"/><rect x="-0.3948670212765956" width="2.8204787234042517e-2" y="0.37712980447535194" height="2.3647516055054996e-2"/><rect x="-0.3666622340425531" width="2.8204787234042572e-2" y="0.36100154467910606" height="3.9775775851300876e-2"/><rect x="-0.3384574468085106" width="2.8204787234042517e-2" y="0.33649670734975734" height="6.428061318064959e-2"/><rect x="-0.31025265957446807" width="2.8204787234042628e-2" y="0.3009683484344774" height="9.980897209592954e-2"/><rect x="-0.28204787234042544" width="2.8204787234042572e-2" y="0.25187983091151095" height="0.14889748961889598"/><rect x="-0.25384308510638287" width="2.8204787234042517e-2" y="0.18735816890545037" height="0.21341915162495656"/><rect x="-0.22563829787234035" width="2.8204787234042628e-2" y="0.10687188138665377" height="0.29390543914375317"/><rect x="-0.19743351063829784" width="2.8204787234042628e-2" y="1.1902271991181046e-2" height="0.3888750485392259"/><rect x="-0.1692287234042552" width="2.8204787234042517e-2" y="-9.357975450627909e-2" height="0.494357075036686"/><rect x="-0.1410239361702127" width="2.8204787234042628e-2" y="-0.2030317744353951" height="0.603809094965802"/><rect x="-0.11281914893617007" width="2.8204787234042517e-2" y="-0.3077992164156882" height="0.7085765369460951"/><rect x="-8.461436170212755e-2" width="2.8204787234042628e-2" y="-0.3981404939793325" height="0.7989178145097394"/><rect x="-5.640957446808492e-2" width="2.8204787234042517e-2" y="-0.46468001606313514" height="0.8654573365935421"/><rect x="-2.8204787234042406e-2" width="2.8204787234042517e-2" y="-0.5" height="0.9007773205304069"/><rect x="0.0" width="2.8204787234042628e-2" y="-0.4999999999999998" height="0.9007773205304067"/><rect x="2.8204787234042628e-2" width="2.8204787234042406e-2" y="-0.46468001606313514" height="0.8654573365935421"/><rect x="5.640957446808503e-2" width="2.8204787234042628e-2" y="-0.39814049397933216" height="0.7989178145097391"/><rect x="8.461436170212766e-2" width="2.8204787234042628e-2" y="-0.30779921641568786" height="0.7085765369460948"/><rect x="0.11281914893617029" width="2.8204787234042517e-2" y="-0.20303177443539466" height="0.6038090949658016"/><rect x="0.1410239361702128" width="2.8204787234042628e-2" y="-9.357975450627887e-2" height="0.4943570750366858"/><rect x="0.16922872340425543" width="2.8204787234042628e-2" y="1.1902271991181268e-2" height="0.38887504853922567"/><rect x="0.19743351063829806" width="2.8204787234042628e-2" y="0.10687188138665421" height="0.2939054391437527"/><rect x="0.2256382978723407" width="2.8204787234042406e-2" y="0.1873581689054507" height="0.21341915162495623"/><rect x="0.2538430851063831" width="2.8204787234042628e-2" y="0.2518798309115112" height="0.1488974896188957"/><rect x="0.2820478723404256" width="2.8204787234042406e-2" y="0.3009683484344775" height="9.980897209592943e-2"/><rect x="0.310252659574468" width="2.820478723404274e-2" y="0.33649670734975745" height="6.428061318064948e-2"/><rect x="0.33845744680851075" width="2.8204787234042517e-2" y="0.36100154467910617" height="3.9775775851300765e-2"/><rect x="0.36666223404255327" width="2.820478723404274e-2" y="0.37712980447535194" height="2.3647516055054996e-2"/><rect x="0.394867021276596" width="2.8204787234042294e-2" y="0.3872696450222492" height="1.3507675508157735e-2"/><rect x="0.4230718085106383" width="2.8204787234042517e-2" y="0.39336415103494765" height="7.413169495459282e-3"/><rect x="0.45127659574468104" width="2.820478723404274e-2" y="0.39686841241730425" height="3.908908113102683e-3"/><rect x="0.47948138297872356" width="2.8204787234042517e-2" y="0.39879700125871337" height="1.9803192716935647e-3"/><rect x="0.5076861702127659" width="2.820478723404296e-2" y="0.3998133956573891" height="9.639248730178296e-4"/><rect x="0.5358909574468088" width="2.8204787234042294e-2" y="0.4003265252291367" height="4.507953012702348e-4"/><rect x="0.5640957446808511" width="2.8204787234042294e-2" y="0.40057476514465823" height="2.025553857487039e-4"/><rect x="0.5923005319148941" width="2.8204787234042294e-2" y="0.40068987523880195" height="8.744529160498171e-5"/><rect x="0.6205053191489364" width="2.8204787234042294e-2" y="0.40074104971774216" height="3.627081266477372e-5"/><rect x="0.6487101063829791" width="2.8204787234042294e-2" y="0.4007628659209244" height="1.4454609482517089e-5"/><rect x="0.6769148936170214" width="2.8204787234042517e-2" y="0.4007717859632665" height="5.534567140419444e-6"/></g><g fill="rgb(66%, 7%, 55%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.7051196808510638" width="2.8204787234042517e-2" y="0.37826954340562563" height="2.2507777124781303e-2"/><rect x="-0.6769148936170212" width="2.8204787234042406e-2" y="0.3721643279849052" height="2.861299254550176e-2"/><rect x="-0.6487101063829787" width="2.8204787234042517e-2" y="0.36476500782852633" height="3.60123127018806e-2"/><rect x="-0.6205053191489361" width="2.8204787234042406e-2" y="0.3559032156579572" height="4.487410487244975e-2"/><rect x="-0.5923005319148936" width="2.8204787234042517e-2" y="0.3454171218890677" height="5.536019864133923e-2"/><rect x="-0.564095744680851" width="2.8204787234042517e-2" y="0.33316022121758027" height="6.761709931282667e-2"/><rect x="-0.5358909574468085" width="2.8204787234042628e-2" y="0.3190113703916208" height="8.176595013878613e-2"/><rect x="-0.5076861702127659" width="2.8204787234042572e-2" y="0.3028857053121" height="9.789161521830692e-2"/><rect x="-0.4794813829787234" width="2.8204787234042628e-2" y="0.2847459141085612" height="0.11603140642184573"/><rect x="-0.4512765957446808" width="2.8204787234042572e-2" y="0.2646132037179021" height="0.13616411681250484"/><rect x="-0.42307180851063825" width="2.8204787234042628e-2" y="0.24257718698678488" height="0.15820013354362206"/><rect x="-0.3948670212765956" width="2.8204787234042517e-2" y="0.2188038519394641" height="0.18197346859094282"/><rect x="-0.3666622340425531" width="2.8204787234042572e-2" y="0.19354076948700966" height="0.20723655104339728"/><rect x="-0.3384574468085106" width="2.8204787234042517e-2" y="0.167118761696808" height="0.23365855883359893"/><rect x="-0.31025265957446807" width="2.8204787234042628e-2" y="0.13994939532943634" height="0.2608279252009706"/><rect x="-0.28204787234042544" width="2.8204787234042572e-2" y="0.11251788297628401" height="0.2882594375541229"/><rect x="-0.25384308510638287" width="2.8204787234042517e-2" y="8.537125692335767e-2" height="0.31540606360704926"/><rect x="-0.22563829787234035" width="2.8204787234042628e-2" y="5.9102010758625034e-2" height="0.3416753097717819"/><rect x="-0.19743351063829784" width="2.8204787234042628e-2" y="3.4327755467602084e-2" height="0.36644956506280485"/><rect x="-0.1692287234042552" width="2.8204787234042517e-2" y="1.1667779881069262e-2" height="0.38910954064933767"/><rect x="-0.1410239361702127" width="2.8204787234042628e-2" y="-8.282292878393327e-3" height="0.40905961340880026"/><rect x="-0.11281914893617007" width="2.8204787234042517e-2" y="-2.4976332392445677e-2" height="0.4257536529228526"/><rect x="-8.461436170212755e-2" width="2.8204787234042628e-2" y="-3.794246147121838e-2" height="0.4387197820016253"/><rect x="-5.640957446808492e-2" width="2.8204787234042517e-2" y="-4.6805188963897404e-2" height="0.44758250949430434"/><rect x="-2.8204787234042406e-2" width="2.8204787234042517e-2" y="-5.130346796826635e-2" height="0.4520807884986733"/><rect x="0.0" width="2.8204787234042628e-2" y="-5.130346796826635e-2" height="0.4520807884986733"/><rect x="2.8204787234042628e-2" width="2.8204787234042406e-2" y="-4.6805188963897404e-2" height="0.44758250949430434"/><rect x="5.640957446808503e-2" width="2.8204787234042628e-2" y="-3.794246147121838e-2" height="0.4387197820016253"/><rect x="8.461436170212766e-2" width="2.8204787234042628e-2" y="-2.4976332392445566e-2" height="0.4257536529228525"/><rect x="0.11281914893617029" width="2.8204787234042517e-2" y="-8.282292878393327e-3" height="0.40905961340880026"/><rect x="0.1410239361702128" width="2.8204787234042628e-2" y="1.1667779881069373e-2" height="0.38910954064933756"/><rect x="0.16922872340425543" width="2.8204787234042628e-2" y="3.4327755467602084e-2" height="0.36644956506280485"/><rect x="0.19743351063829806" width="2.8204787234042628e-2" y="5.9102010758625145e-2" height="0.3416753097717818"/><rect x="0.2256382978723407" width="2.8204787234042406e-2" y="8.537125692335779e-2" height="0.31540606360704915"/><rect x="0.2538430851063831" width="2.8204787234042628e-2" y="0.11251788297628418" height="0.28825943755412275"/><rect x="0.2820478723404256" width="2.8204787234042406e-2" y="0.13994939532943645" height="0.2608279252009705"/><rect x="0.310252659574468" width="2.820478723404274e-2" y="0.167118761696808" height="0.23365855883359893"/><rect x="0.33845744680851075" width="2.8204787234042517e-2" y="0.1935407694870097" height="0.20723655104339722"/><rect x="0.36666223404255327" width="2.820478723404274e-2" y="0.21880385193946422" height="0.1819734685909427"/><rect x="0.394867021276596" width="2.8204787234042294e-2" y="0.242577186986785" height="0.15820013354362195"/><rect x="0.4230718085106383" width="2.8204787234042517e-2" y="0.2646132037179021" height="0.13616411681250484"/><rect x="0.45127659574468104" width="2.820478723404274e-2" y="0.28474591410856137" height="0.11603140642184556"/><rect x="0.47948138297872356" width="2.8204787234042517e-2" y="0.3028857053121001" height="9.789161521830686e-2"/><rect x="0.5076861702127659" width="2.820478723404296e-2" y="0.3190113703916208" height="8.176595013878613e-2"/><rect x="0.5358909574468088" width="2.8204787234042294e-2" y="0.33316022121758027" height="6.761709931282667e-2"/><rect x="0.5640957446808511" width="2.8204787234042294e-2" y="0.3454171218890676" height="5.536019864133934e-2"/><rect x="0.5923005319148941" width="2.8204787234042294e-2" y="0.3559032156579572" height="4.487410487244975e-2"/><rect x="0.6205053191489364" width="2.8204787234042294e-2" y="0.36476500782852633" height="3.60123127018806e-2"/><rect x="0.6487101063829791" width="2.8204787234042294e-2" y="0.37216432798490523" height="2.8612992545501703e-2"/><rect x="0.6769148936170214" width="2.8204787234042517e-2" y="0.37826954340562563" height="2.2507777124781303e-2"/></g></g></g><g class="hud"><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.7051196808510638,0.44280064014631915
+-0.7051196808510638,0.4128006401463191"/><polyline points="-0.564095744680851,0.44280064014631915
+-0.564095744680851,0.4128006401463191"/><polyline points="-0.42307180851063825,0.44280064014631915
+-0.42307180851063825,0.4128006401463191"/><polyline points="-0.28204787234042544,0.44280064014631915
+-0.28204787234042544,0.4128006401463191"/><polyline points="-0.1410239361702127,0.44280064014631915
+-0.1410239361702127,0.4128006401463191"/><polyline points="0.0,0.44280064014631915
+0.0,0.4128006401463191"/><polyline points="0.1410239361702128,0.44280064014631915
+0.1410239361702128,0.4128006401463191"/><polyline points="0.2820478723404256,0.44280064014631915
+0.2820478723404256,0.4128006401463191"/><polyline points="0.4230718085106383,0.44280064014631915
+0.4230718085106383,0.4128006401463191"/><polyline points="0.5640957446808511,0.44280064014631915
+0.5640957446808511,0.4128006401463191"/><polyline points="0.7051196808510639,0.44280064014631915
+0.7051196808510639,0.4128006401463191"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.700797872340426e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.7051196808510638" y="0.485">-5.0</text><text x="-0.564095744680851" y="0.485">-4.0</text><text x="-0.42307180851063825" y="0.485">-3.0</text><text x="-0.28204787234042544" y="0.485">-2.0</text><text x="-0.1410239361702127" y="0.485">-1.0</text><text x="0.0" y="0.485"> 0.0</text><text x="0.1410239361702128" y="0.485"> 1.0</text><text x="0.2820478723404256" y="0.485"> 2.0</text><text x="0.4230718085106383" y="0.485"> 3.0</text><text x="0.5640957446808511" y="0.485"> 4.0</text><text x="0.7051196808510639" y="0.485"> 5.0</text></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.707" width="1.414" y="0.409785093735711" height="3.6031092821216526e-3"/></g></g></g></g></svg>
diff --git a/other/surface.svg b/other/surface.svg
# file too large to diff: other/surface.svg
diff --git a/other/svgoptions.svg b/other/svgoptions.svg
deleted file mode 100644
--- a/other/svgoptions.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg height="300.0" width="217.41176470588235" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.385 -0.5275 0.7699999999999999 1.0625"><g stroke-opacity="1.0" fill="none" stroke-width="1.5e-2" stroke="#b05929"><polyline points="-0.35,0.29999999999999993
--9.999999999999998e-2,0.29999999999999993
-0.15000000000000002,-0.5"/></g><g stroke-opacity="1.0" fill="none" stroke-width="3.0e-2" stroke="#a6cfe3"><polyline points="-0.35,0.5
-0.34999999999999987,-0.10000000000000009"/></g><g stroke-opacity="1.0" fill="none" stroke-width="1.0e-2" stroke="#1f78b5"><polyline points="-0.22499999999999998,-0.30000000000000016
--0.22499999999999998,0.5"/></g></svg>
diff --git a/other/text.svg b/other/text.svg
--- a/other/text.svg
+++ b/other/text.svg
@@ -1,1 +1,68 @@
-<svg height="300.0" width="422.02247191011236" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.7825 -0.56625 1.565 1.1125"><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.75">a</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.45833333333333337" x="-0.6001859947935977">b</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4166666666666667" x="-0.451868881605292">c</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.375" x="-0.3065305960029406">d</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.33333333333333337" x="-0.1656233100938329">e</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.29166666666666674" x="-3.0554922901016246e-2">f</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.25" x="9.732500689835166e-2">g</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.20833333333333343" x="0.2167387453171994">h</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.16666666666666669" x="0.32649314975417987">i</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.125" x="0.4254915904801422">j</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="8.333333333333337e-2" x="0.5127449077998856">k</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="4.166666666666674e-2" x="0.5873812954088635">l</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.0" x="0.6486550111935965">m</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-4.166666666666663e-2" x="0.6959538284403606">n</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-8.333333333333315e-2" x="0.7288051530021376">o</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.125" x="0.7468807453031088">p</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.16666666666666663" x="0.75">q</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.20833333333333326" x="0.738131750530969">r</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.25" x="0.7113945805215882">s</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.29166666666666663" x="0.6700556389364578">t</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.33333333333333326" x="0.6145279708150595">u</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.375" x="0.5453663902622552">v</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4166666666666665" x="0.4632619369291495">w</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.45833333333333326" x="0.369034971373323">x</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.5" x="0.2636269782873162">y</text></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="445.5752551155162" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.737737713453645 -0.5010794026798592 1.4838186055464497 0.9990356882554667" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}{
+  .text g {
+    fill: #0d0d0d;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .text g {
+    fill: #f0f0f0;
+  }
+}</style><g class="chart"><g class="text"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="6.478142787803755e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5884165221947686" y="0.37213541666666666">a</text><text x="-0.4590694965882771" y="0.3386320153061224">b</text><text x="-0.3310148637052037" y="0.3051286139455782">c</text><text x="-0.20553210310808218" y="0.271625212585034">d</text><text x="-8.387499706171309e-2" y="0.23812181122448978">e</text><text x="3.274089684478099e-2" y="0.20461840986394558">f</text><text x="0.14315039114757588" y="0.1711150085034014">g</text><text x="0.24625031067612413" y="0.13761160714285714">h</text><text x="0.3410105151147992" y="0.10410820578231295">i</text><text x="0.4264841918244081" y="7.060480442176875e-2">j</text><text x="0.5018173160811107" y="3.71014030612245e-2">k</text><text x="0.5662571842091536" y="3.5980017006802534e-3">l</text><text x="0.6191599343471895" y="-2.990539965986394e-2">m</text><text x="0.6599969797031636" y="-6.340880102040813e-2">n</text><text x="0.6883602900188116" y="-9.691220238095244e-2">o</text><text x="0.7039664684731229" y="-0.13041560374149652">p</text><text x="0.7066595832896992" y="-0.16391900510204072">q</text><text x="0.6964127257555185" y="-0.1974224064625849">r</text><text x="0.6733282790839018" y="-0.2309258078231291">s</text><text x="0.6376368954352881" y="-0.2644292091836733">t</text><text x="0.5896951913170917" y="-0.2979326105442176">u</text><text x="0.5299821843894411" y="-0.3314360119047618">v</text><text x="0.4590945072790612" y="-0.364939413265306">w</text><text x="0.37774044622328884" y="-0.3984428146258503">x</text><text x="0.2867328641081157" y="-0.43194621598639427">y</text><text x="0.18698107861093038" y="-0.46544961734693857">z</text></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.602992343467327" width="1.3242277480295845" y="-0.4999999999999999" height="0.9066857993197277"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.628904914618542, 0.37213541666666666)"><polyline points="-0.628904914618542,0.3871354166666667
+-0.628904914618542,0.35713541666666665"/></g><g transform="rotate(-90.0, -0.628904914618542, 0.20461840986394558)"><polyline points="-0.628904914618542,0.2196184098639456
+-0.628904914618542,0.18961840986394557"/></g><g transform="rotate(-90.0, -0.628904914618542, 3.71014030612245e-2)"><polyline points="-0.628904914618542,5.21014030612245e-2
+-0.628904914618542,2.2101403061224503e-2"/></g><g transform="rotate(-90.0, -0.628904914618542, -0.13041560374149652)"><polyline points="-0.628904914618542,-0.11541560374149652
+-0.628904914618542,-0.14541560374149654"/></g><g transform="rotate(-90.0, -0.628904914618542, -0.2979326105442176)"><polyline points="-0.628904914618542,-0.2829326105442176
+-0.628904914618542,-0.3129326105442176"/></g><g transform="rotate(-90.0, -0.628904914618542, -0.46544961734693857)"><polyline points="-0.628904914618542,-0.45044961734693856
+-0.628904914618542,-0.4804496173469386"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.3187618585358356e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.66" y="0.38365221088435375"> 0.0</text><text x="-0.66" y="0.21613520408163267"> 5.0</text><text x="-0.66" y="4.8618197278911646e-2">10.0</text><text x="-0.66" y="-0.11889880952380938">15.0</text><text x="-0.66" y="-0.28641581632653057">20.0</text><text x="-0.66" y="-0.45393282312925154">25.0</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5884165221947686,0.37213541666666666
+0.7072120353659822,0.37213541666666666"/><polyline points="-0.5884165221947686,0.20461840986394558
+0.7072120353659822,0.20461840986394558"/><polyline points="-0.5884165221947686,3.71014030612245e-2
+0.7072120353659822,3.71014030612245e-2"/><polyline points="-0.5884165221947686,-0.13041560374149652
+0.7072120353659822,-0.13041560374149652"/><polyline points="-0.5884165221947686,-0.2979326105442176
+0.7072120353659822,-0.2979326105442176"/><polyline points="-0.5884165221947686,-0.46544961734693857
+0.7072120353659822,-0.46544961734693857"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.6150848766712274" width="3.455009486828753e-3" y="-0.4671247874149659" height="0.8409353741496597"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5884165221947686,0.4468133503401361
+-0.5884165221947686,0.41681335034013606"/><polyline points="-0.4588536664386934,0.4468133503401361
+-0.4588536664386934,0.41681335034013606"/><polyline points="-0.32929081068261834,0.4468133503401361
+-0.32929081068261834,0.41681335034013606"/><polyline points="-0.19972795492654322,0.4468133503401361
+-0.19972795492654322,0.41681335034013606"/><polyline points="-7.016509917046809e-2,0.4468133503401361
+-7.016509917046809e-2,0.41681335034013606"/><polyline points="5.9397756585606865e-2,0.4468133503401361
+5.9397756585606865e-2,0.41681335034013606"/><polyline points="0.18896061234168204,0.4468133503401361
+0.18896061234168204,0.41681335034013606"/><polyline points="0.318523468097757,0.4468133503401361
+0.318523468097757,0.41681335034013606"/><polyline points="0.4480863238538323,0.4468133503401361
+0.4480863238538323,0.41681335034013606"/><polyline points="0.5776491796099071,0.4468133503401361
+0.5776491796099071,0.41681335034013606"/><polyline points="0.7072120353659822,0.4468133503401361
+0.7072120353659822,0.41681335034013606"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.3187618585358356e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5884165221947686" y="0.485">0.00</text><text x="-0.4588536664386934" y="0.485">0.10</text><text x="-0.32929081068261834" y="0.485">0.20</text><text x="-0.19972795492654322" y="0.485">0.30</text><text x="-7.016509917046809e-2" y="0.485">0.40</text><text x="5.9397756585606865e-2" y="0.485">0.50</text><text x="0.18896061234168204" y="0.485">0.60</text><text x="0.318523468097757" y="0.485">0.70</text><text x="0.4480863238538323" y="0.485">0.80</text><text x="0.5776491796099071" y="0.485">0.90</text><text x="0.7072120353659822" y="0.485">1.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5884165221947686,0.37213541666666666
+-0.5884165221947686,-0.46544961734693857"/><polyline points="-0.4588536664386934,0.37213541666666666
+-0.4588536664386934,-0.46544961734693857"/><polyline points="-0.32929081068261834,0.37213541666666666
+-0.32929081068261834,-0.46544961734693857"/><polyline points="-0.19972795492654322,0.37213541666666666
+-0.19972795492654322,-0.46544961734693857"/><polyline points="-7.016509917046809e-2,0.37213541666666666
+-7.016509917046809e-2,-0.46544961734693857"/><polyline points="5.9397756585606865e-2,0.37213541666666666
+5.9397756585606865e-2,-0.46544961734693857"/><polyline points="0.18896061234168204,0.37213541666666666
+0.18896061234168204,-0.46544961734693857"/><polyline points="0.318523468097757,0.37213541666666666
+0.318523468097757,-0.46544961734693857"/><polyline points="0.4480863238538323,0.37213541666666666
+0.4480863238538323,-0.46544961734693857"/><polyline points="0.5776491796099071,0.37213541666666666
+0.5776491796099071,-0.46544961734693857"/><polyline points="0.7072120353659822,0.37213541666666666
+0.7072120353659822,-0.46544961734693857"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5901440269381829" width="1.2990835670475795" y="0.4150616496598639" height="3.350340136054397e-3"/></g></g></g></g></svg>
diff --git a/other/textlocal.svg b/other/textlocal.svg
deleted file mode 100644
--- a/other/textlocal.svg
+++ /dev/null
@@ -1,1 +0,0 @@
-<svg height="300.0" width="573.2594690189848" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.775 -0.5276917562724014 2.0115517241379313 1.0526917562724014"><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.4623655913978495" x="-0.75">a pretty long piece of text</text></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.4336917562724014" x="-0.10344827586206895">another pretty long piece of text</text></g><g fill-opacity="0.1" stroke-opacity="1.0" fill="#1f78b5" stroke-width="1.0e-2" stroke="#a6cfe3"><rect height="0.10394265232974909" y="0.3960573476702509" width="0.6982758620689655" x="-0.75"/></g><g fill-opacity="0.1" stroke-opacity="1.0" fill="#1f78b5" stroke-width="1.0e-2" stroke="#a6cfe3"><rect height="0.1039426523297492" y="-0.5" width="0.853448275862069" x="-0.10344827586206895"/></g></svg>
diff --git a/other/unit.svg b/other/unit.svg
--- a/other/unit.svg
+++ b/other/unit.svg
@@ -1,1 +1,69 @@
-<svg height="300.0" width="442.8571428571429" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.775 -0.525 1.55 1.05"><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="1.0e-2" stroke="#a6cfe3"><rect height="1.0" y="-0.5" width="1.5" x="-0.75"/></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="445.19459582915766" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7328858661167512 -0.4962895215155287 1.475089427347716 0.9940076369977622" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"><g class="unit"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.1" stroke-opacity="1.0"><rect x="-0.5773009200507613" width="1.2718115482233503" y="-0.47438321250566384" height="0.8733574988672406"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5815402918781725" width="1.2802902918781724" y="-0.47875" height="0.8820910738559129"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6069765228426395, 0.3989742863615767)"><polyline points="-0.6069765228426395,0.41397428636157674
+-0.6069765228426395,0.3839742863615767"/></g><g transform="rotate(-90.0, -0.6069765228426395, 0.31163853647485273)"><polyline points="-0.6069765228426395,0.32663853647485275
+-0.6069765228426395,0.2966385364748527"/></g><g transform="rotate(-90.0, -0.6069765228426395, 0.22430278658812863)"><polyline points="-0.6069765228426395,0.23930278658812865
+-0.6069765228426395,0.20930278658812862"/></g><g transform="rotate(-90.0, -0.6069765228426395, 0.13696703670140453)"><polyline points="-0.6069765228426395,0.15196703670140455
+-0.6069765228426395,0.12196703670140453"/></g><g transform="rotate(-90.0, -0.6069765228426395, 4.9631286814680486e-2)"><polyline points="-0.6069765228426395,6.463128681468049e-2
+-0.6069765228426395,3.463128681468049e-2"/></g><g transform="rotate(-90.0, -0.6069765228426395, -3.770446307204356e-2)"><polyline points="-0.6069765228426395,-2.270446307204356e-2
+-0.6069765228426395,-5.270446307204356e-2"/></g><g transform="rotate(-90.0, -0.6069765228426395, -0.12504021295876766)"><polyline points="-0.6069765228426395,-0.11004021295876766
+-0.6069765228426395,-0.14004021295876767"/></g><g transform="rotate(-90.0, -0.6069765228426395, -0.21237596284549165)"><polyline points="-0.6069765228426395,-0.19737596284549164
+-0.6069765228426395,-0.22737596284549166"/></g><g transform="rotate(-90.0, -0.6069765228426395, -0.29971171273221575)"><polyline points="-0.6069765228426395,-0.28471171273221574
+-0.6069765228426395,-0.31471171273221576"/></g><g transform="rotate(-90.0, -0.6069765228426395, -0.38704746261893985)"><polyline points="-0.6069765228426395,-0.37204746261893984
+-0.6069765228426395,-0.40204746261893987"/></g><g transform="rotate(-90.0, -0.6069765228426395, -0.47438321250566384)"><polyline points="-0.6069765228426395,-0.45938321250566383
+-0.6069765228426395,-0.48938321250566386"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.2393718274111675e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.6375" y="0.4109829519710013">-0.50</text><text x="-0.6375" y="0.3236472020842772">-0.40</text><text x="-0.6375" y="0.23631145219755315">-0.30</text><text x="-0.6375" y="0.14897570231082913">-0.20</text><text x="-0.6375" y="6.163995242410503e-2">-0.10</text><text x="-0.6375" y="-2.5695797462618963e-2"> 0.00</text><text x="-0.6375" y="-0.11303154734934306"> 0.10</text><text x="-0.6375" y="-0.20036729723606705"> 0.20</text><text x="-0.6375" y="-0.28770304712279127"> 0.30</text><text x="-0.6375" y="-0.37503879700951526"> 0.40</text><text x="-0.6375" y="-0.46237454689623936"> 0.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5773009200507613,0.3989742863615767
+0.694510628172589,0.3989742863615767"/><polyline points="-0.5773009200507613,0.31163853647485273
+0.694510628172589,0.31163853647485273"/><polyline points="-0.5773009200507613,0.22430278658812863
+0.694510628172589,0.22430278658812863"/><polyline points="-0.5773009200507613,0.13696703670140453
+0.694510628172589,0.13696703670140453"/><polyline points="-0.5773009200507613,4.9631286814680486e-2
+0.694510628172589,4.9631286814680486e-2"/><polyline points="-0.5773009200507613,-3.770446307204356e-2
+0.694510628172589,-3.770446307204356e-2"/><polyline points="-0.5773009200507613,-0.12504021295876766
+0.694510628172589,-0.12504021295876766"/><polyline points="-0.5773009200507613,-0.21237596284549165
+0.694510628172589,-0.21237596284549165"/><polyline points="-0.5773009200507613,-0.29971171273221575
+0.694510628172589,-0.29971171273221575"/><polyline points="-0.5773009200507613,-0.38704746261893985
+0.694510628172589,-0.38704746261893985"/><polyline points="-0.5773009200507613,-0.47438321250566384
+0.694510628172589,-0.47438321250566384"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5934105329949237" width="3.391497461928905e-3" y="-0.47612992750339833" height="0.8768509288627095"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5773009200507613,0.44454179882193023
+-0.5773009200507613,0.4145417988219302"/><polyline points="-0.45011976522842634,0.44454179882193023
+-0.45011976522842634,0.4145417988219302"/><polyline points="-0.32293861040609123,0.44454179882193023
+-0.32293861040609123,0.4145417988219302"/><polyline points="-0.19575745558375618,0.44454179882193023
+-0.19575745558375618,0.4145417988219302"/><polyline points="-6.857630076142118e-2,0.44454179882193023
+-6.857630076142118e-2,0.4145417988219302"/><polyline points="5.860485406091387e-2,0.44454179882193023
+5.860485406091387e-2,0.4145417988219302"/><polyline points="0.18578600888324892,0.44454179882193023
+0.18578600888324892,0.4145417988219302"/><polyline points="0.31296716370558375,0.44454179882193023
+0.31296716370558375,0.4145417988219302"/><polyline points="0.44014831852791914,0.44454179882193023
+0.44014831852791914,0.4145417988219302"/><polyline points="0.5673294733502541,0.44454179882193023
+0.5673294733502541,0.4145417988219302"/><polyline points="0.694510628172589,0.44454179882193023
+0.694510628172589,0.4145417988219302"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.2393718274111675e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5773009200507613" y="0.485">-0.50</text><text x="-0.45011976522842634" y="0.485">-0.40</text><text x="-0.32293861040609123" y="0.485">-0.30</text><text x="-0.19575745558375618" y="0.485">-0.20</text><text x="-6.857630076142118e-2" y="0.485">-0.10</text><text x="5.860485406091387e-2" y="0.485"> 0.00</text><text x="0.18578600888324892" y="0.485"> 0.10</text><text x="0.31296716370558375" y="0.485"> 0.20</text><text x="0.44014831852791914" y="0.485"> 0.30</text><text x="0.5673294733502541" y="0.485"> 0.40</text><text x="0.694510628172589" y="0.485"> 0.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5773009200507613,0.3989742863615767
+-0.5773009200507613,-0.47438321250566384"/><polyline points="-0.45011976522842634,0.3989742863615767
+-0.45011976522842634,-0.47438321250566384"/><polyline points="-0.32293861040609123,0.3989742863615767
+-0.32293861040609123,-0.47438321250566384"/><polyline points="-0.19575745558375618,0.3989742863615767
+-0.19575745558375618,-0.47438321250566384"/><polyline points="-6.857630076142118e-2,0.3989742863615767
+-6.857630076142118e-2,-0.47438321250566384"/><polyline points="5.860485406091387e-2,0.3989742863615767
+5.860485406091387e-2,-0.47438321250566384"/><polyline points="0.18578600888324892,0.3989742863615767
+0.18578600888324892,-0.47438321250566384"/><polyline points="0.31296716370558375,0.3989742863615767
+0.31296716370558375,-0.47438321250566384"/><polyline points="0.44014831852791914,0.3989742863615767
+0.44014831852791914,-0.47438321250566384"/><polyline points="0.5673294733502541,0.3989742863615767
+0.5673294733502541,-0.47438321250566384"/><polyline points="0.694510628172589,0.3989742863615767
+0.694510628172589,-0.47438321250566384"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5789966687817258" width="1.275203045685279" y="0.4120746488445854" height="3.493429995468922e-3"/></g></g></g></g></svg>
diff --git a/other/usage.svg b/other/usage.svg
new file mode 100644
--- /dev/null
+++ b/other/usage.svg
@@ -0,0 +1,65 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="446.753163625545" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7380894953982863 -0.49743338195719966 1.4823989209774675 0.995448297856914" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"><g class="line"><g fill="none" stroke="rgb(2%, 73%, 80%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.5962269120913996,0.2226262967974741
+-0.16239638210092033,0.2226262967974741
+0.271434147889559,-0.47471244925575107"/></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.5962269120913996,0.39696098331078034
+0.6184985718819421,-0.12604307622913857"/></g><g fill="none" stroke="rgb(66%, 7%, 55%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.37931164709615994,-0.30037776274244476
+-0.37931164709615994,0.39696098331078034"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.6027343700412567" width="1.3079990479212948" y="-0.48124999999999996" height="0.8847485340550292"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6287642018406855, 0.39696098331078034)"><polyline points="-0.6287642018406855,0.41196098331078035
+-0.6287642018406855,0.3819609833107803"/></g><g transform="rotate(-90.0, -0.6287642018406855, 0.30979364005412724)"><polyline points="-0.6287642018406855,0.32479364005412725
+-0.6287642018406855,0.2947936400541272"/></g><g transform="rotate(-90.0, -0.6287642018406855, 0.2226262967974741)"><polyline points="-0.6287642018406855,0.2376262967974741
+-0.6287642018406855,0.20762629679747407"/></g><g transform="rotate(-90.0, -0.6287642018406855, 0.13545895354082088)"><polyline points="-0.6287642018406855,0.1504589535408209
+-0.6287642018406855,0.12045895354082088"/></g><g transform="rotate(-90.0, -0.6287642018406855, 4.829161028416773e-2)"><polyline points="-0.6287642018406855,6.329161028416773e-2
+-0.6287642018406855,3.329161028416773e-2"/></g><g transform="rotate(-90.0, -0.6287642018406855, -3.8875732972485366e-2)"><polyline points="-0.6287642018406855,-2.3875732972485367e-2
+-0.6287642018406855,-5.3875732972485366e-2"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.12604307622913857)"><polyline points="-0.6287642018406855,-0.11104307622913857
+-0.6287642018406855,-0.1410430762291386"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.21321041948579178)"><polyline points="-0.6287642018406855,-0.19821041948579177
+-0.6287642018406855,-0.2282104194857918"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.30037776274244476)"><polyline points="-0.6287642018406855,-0.28537776274244475
+-0.6287642018406855,-0.3153777627424448"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.38754510599909786)"><polyline points="-0.6287642018406855,-0.37254510599909785
+-0.6287642018406855,-0.4025451059990979"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.47471244925575107)"><polyline points="-0.6287642018406855,-0.45971244925575105
+-0.6287642018406855,-0.4897124492557511"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.3383052999047926e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.66" y="0.40894649300857017">0.00</text><text x="-0.66" y="0.321779149751917">0.50</text><text x="-0.66" y="0.2346118064952638">1.00</text><text x="-0.66" y="0.14744446323861077">1.50</text><text x="-0.66" y="6.027711998195756e-2">2.00</text><text x="-0.66" y="-2.689022327469548e-2">2.50</text><text x="-0.66" y="-0.11405756653134869">3.00</text><text x="-0.66" y="-0.2012249097880019">3.50</text><text x="-0.66" y="-0.2883922530446551">4.00</text><text x="-0.66" y="-0.3755595963013081">4.50</text><text x="-0.66" y="-0.4627269395579613">5.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5962269120913996,0.39696098331078034
+0.7052646778800381,0.39696098331078034"/><polyline points="-0.5962269120913996,0.30979364005412724
+0.7052646778800381,0.30979364005412724"/><polyline points="-0.5962269120913996,0.2226262967974741
+0.7052646778800381,0.2226262967974741"/><polyline points="-0.5962269120913996,0.13545895354082088
+0.7052646778800381,0.13545895354082088"/><polyline points="-0.5962269120913996,4.829161028416773e-2
+0.7052646778800381,4.829161028416773e-2"/><polyline points="-0.5962269120913996,-3.8875732972485366e-2
+0.7052646778800381,-3.8875732972485366e-2"/><polyline points="-0.5962269120913996,-0.12604307622913857
+0.7052646778800381,-0.12604307622913857"/><polyline points="-0.5962269120913996,-0.21321041948579178
+0.7052646778800381,-0.21321041948579178"/><polyline points="-0.5962269120913996,-0.30037776274244476
+0.7052646778800381,-0.30037776274244476"/><polyline points="-0.5962269120913996,-0.38754510599909786
+0.7052646778800381,-0.38754510599909786"/><polyline points="-0.5962269120913996,-0.47471244925575107
+0.7052646778800381,-0.47471244925575107"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.6148816248809902" width="3.4706442399238258e-3" y="-0.4764557961208842" height="0.8751601262967976"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5962269120913996,0.44464873703202523
+-0.5962269120913996,0.4146487370320252"/><polyline points="-0.37931164709615994,0.44464873703202523
+-0.37931164709615994,0.4146487370320252"/><polyline points="-0.16239638210092033,0.44464873703202523
+-0.16239638210092033,0.4146487370320252"/><polyline points="5.4518882894319276e-2,0.44464873703202523
+5.4518882894319276e-2,0.4146487370320252"/><polyline points="0.271434147889559,0.44464873703202523
+0.271434147889559,0.4146487370320252"/><polyline points="0.4883494128847986,0.44464873703202523
+0.4883494128847986,0.4146487370320252"/><polyline points="0.7052646778800381,0.44464873703202523
+0.7052646778800381,0.4146487370320252"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.3383052999047926e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5962269120913996" y="0.485">0.00</text><text x="-0.37931164709615994" y="0.485">0.50</text><text x="-0.16239638210092033" y="0.485">1.00</text><text x="5.4518882894319276e-2" y="0.485">1.50</text><text x="0.271434147889559" y="0.485">2.00</text><text x="0.4883494128847986" y="0.485">2.50</text><text x="0.7052646778800381" y="0.485">3.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5962269120913996,0.39696098331078034
+-0.5962269120913996,-0.47471244925575107"/><polyline points="-0.37931164709615994,0.39696098331078034
+-0.37931164709615994,-0.47471244925575107"/><polyline points="-0.16239638210092033,0.39696098331078034
+-0.16239638210092033,-0.47471244925575107"/><polyline points="5.4518882894319276e-2,0.39696098331078034
+5.4518882894319276e-2,-0.47471244925575107"/><polyline points="0.271434147889559,0.39696098331078034
+0.271434147889559,-0.47471244925575107"/><polyline points="0.4883494128847986,0.39696098331078034
+0.4883494128847986,-0.47471244925575107"/><polyline points="0.7052646778800381,0.39696098331078034
+0.7052646778800381,-0.47471244925575107"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5979622342113615" width="1.3049622342113616" y="0.4122152683806946" height="3.4866937302661105e-3"/></g></g></g></g></svg>
diff --git a/other/venn.svg b/other/venn.svg
--- a/other/venn.svg
+++ b/other/venn.svg
@@ -1,29 +1,53 @@
-<svg height="300.0" width="302.02163212349313" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.62 -0.5531609947643978 1.155514898098931 1.1477802665735424"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9026900162484203" y="-0.5" width="0.9411498969440864" x="-0.4411498969440863"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,0.40269001624842027
-0.5,0.40269001624842027"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,0.252241680207017
-0.5,0.252241680207017"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,0.10179334416561353
-0.5,0.10179334416561353"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,-4.865499187578981e-2
-0.5,-4.865499187578981e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,-0.1991033279171931
-0.5,-0.1991033279171931"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,-0.3495516639585964
-0.5,-0.3495516639585964"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,-0.5
-0.5,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.41577902148402235" x="-0.5">-1.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.26533068544261906" x="-0.5">-1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.11488234940121572" x="-0.5">-0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-3.556598664018773e-2" x="-0.5">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.18601432268159102" x="-0.5">0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.3364626587229943" x="-0.5">1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4869109947643978" x="-0.5">1.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.470796118697825, 0.40269001624842027)"><polyline points="-0.470796118697825,0.4176900162484203
--0.470796118697825,0.38769001624842025"/></g><g transform="rotate(-90.0, -0.470796118697825, 0.252241680207017)"><polyline points="-0.470796118697825,0.267241680207017
--0.470796118697825,0.23724168020701697"/></g><g transform="rotate(-90.0, -0.470796118697825, 0.10179334416561353)"><polyline points="-0.470796118697825,0.11679334416561353
--0.470796118697825,8.679334416561353e-2"/></g><g transform="rotate(-90.0, -0.470796118697825, -4.865499187578981e-2)"><polyline points="-0.470796118697825,-3.365499187578981e-2
--0.470796118697825,-6.365499187578981e-2"/></g><g transform="rotate(-90.0, -0.470796118697825, -0.1991033279171931)"><polyline points="-0.470796118697825,-0.18410332791719308
--0.470796118697825,-0.2141033279171931"/></g><g transform="rotate(-90.0, -0.470796118697825, -0.3495516639585964)"><polyline points="-0.470796118697825,-0.33455166395859637
--0.470796118697825,-0.3645516639585964"/></g><g transform="rotate(-90.0, -0.470796118697825, -0.5)"><polyline points="-0.470796118697825,-0.485
--0.470796118697825,-0.515"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9026900162484203" y="-0.5" width="3.7645995877763627e-3" x="-0.45903174498602395"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,0.40269001624842027
--0.4411498969440863,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.2842915807867386,0.40269001624842027
--0.2842915807867386,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.12743326462939086,0.40269001624842027
--0.12743326462939086,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="2.9425051527956825e-2,0.40269001624842027
-2.9425051527956825e-2,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.1862833676853045,0.40269001624842027
-0.1862833676853045,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.3431416838426522,0.40269001624842027
-0.3431416838426522,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.5,0.40269001624842027
-0.5,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.179310344827586e-2"><text y="0.5" x="-0.4411498969440863" transform="rotate(-45.0, -0.4411498969440863, 0.5)">-1.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.179310344827586e-2"><text y="0.5" x="-0.2842915807867386" transform="rotate(-45.0, -0.2842915807867386, 0.5)">-1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.179310344827586e-2"><text y="0.5" x="-0.12743326462939086" transform="rotate(-45.0, -0.12743326462939086, 0.5)">-0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.179310344827586e-2"><text y="0.5" x="2.9425051527956825e-2" transform="rotate(-45.0, 2.9425051527956825e-2, 0.5)">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.179310344827586e-2"><text y="0.5" x="0.1862833676853045" transform="rotate(-45.0, 0.1862833676853045, 0.5)">0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.179310344827586e-2"><text y="0.5" x="0.3431416838426522" transform="rotate(-45.0, 0.3431416838426522, 0.5)">1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.179310344827586e-2"><text y="0.5" x="0.5" transform="rotate(-45.0, 0.5, 0.5)">1.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,0.4461247517602456
--0.4411498969440863,0.41612475176024555"/><polyline points="-0.2842915807867386,0.4461247517602456
--0.2842915807867386,0.41612475176024555"/><polyline points="-0.12743326462939086,0.4461247517602456
--0.12743326462939086,0.41612475176024555"/><polyline points="2.9425051527956825e-2,0.4461247517602456
-2.9425051527956825e-2,0.41612475176024555"/><polyline points="0.1862833676853045,0.4461247517602456
-0.1862833676853045,0.41612475176024555"/><polyline points="0.3431416838426522,0.4461247517602456
-0.3431416838426522,0.41612475176024555"/><polyline points="0.5,0.4461247517602456
-0.5,0.41612475176024555"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.6107600649936678e-3" y="0.4162303664921466" width="0.9411498969440864" x="-0.4411498969440863"/></g><g fill-opacity="0.2" stroke-opacity="1.0" fill="#b05929" stroke-width="1.0e-2" stroke="#a6cfe3"><path d="M 0.0294,-0.4194 A 0.15685831615734772 0.15044833604140337 -0.0 1 1 0.3431,0.1018 A 0.31371663231469543 0.30089667208280674 -0.0 0 0 0.1863,-0.1588 A 0.31371663231469543 0.30089667208280674 -0.0 0 0 0.0294,-0.4194 L 0.0294,-0.4194"/></g><g fill-opacity="0.2" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#a6cfe3"><path d="M -0.2843,0.1018 A 0.15685831615734772 0.15044833604140337 -0.0 1 0 0.3431,0.1018 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 0.0294,0.1018 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 -0.2843,0.1018 L -0.2843,0.1018"/></g><g fill-opacity="0.2" stroke-opacity="1.0" fill="#1f78b5" stroke-width="1.0e-2" stroke="#a6cfe3"><path d="M -0.2843,0.1018 A 0.15685831615734772 0.15044833604140337 -0.0 1 1 0.0294,-0.4194 A 0.31371663231469543 0.30089667208280674 -0.0 0 0 -0.1274,-0.1588 A 0.31371663231469543 0.30089667208280674 -0.0 0 0 -0.2843,0.1018 L -0.2843,0.1018"/></g><g fill-opacity="0.2" stroke-opacity="1.0" fill="#e31a1c" stroke-width="1.0e-2" stroke="#a6cfe3"><path d="M 0.1863,-0.1588 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 0.3431,0.1018 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 0.0294,0.1018 A 0.31371663231469543 0.30089667208280674 -0.0 0 0 0.1863,-0.1588 L 0.1863,-0.1588"/></g><g fill-opacity="0.2" stroke-opacity="1.0" fill="#b2de8a" stroke-width="1.0e-2" stroke="#a6cfe3"><path d="M 0.0294,0.1018 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 -0.2843,0.1018 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 -0.1274,-0.1588 A 0.31371663231469543 0.30089667208280674 -0.0 0 0 0.0294,0.1018 L 0.0294,0.1018"/></g><g fill-opacity="0.2" stroke-opacity="1.0" fill="#33a12b" stroke-width="1.0e-2" stroke="#a6cfe3"><path d="M 0.0294,-0.4194 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 0.1863,-0.1588 A 0.31371663231469543 0.30089667208280674 -0.0 0 0 -0.1274,-0.1588 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 0.0294,-0.4194 L 0.0294,-0.4194"/></g><g fill-opacity="0.2" stroke-opacity="1.0" fill="#fa9999" stroke-width="1.0e-2" stroke="#a6cfe3"><path d="M 0.1863,-0.1588 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 0.0294,0.1018 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 -0.1274,-0.1588 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 0.1863,-0.1588 L 0.1863,-0.1588"/></g><g></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="299.59019837846336" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.47987325612208 -0.4958906334198819 0.9784229494865739 0.9797613087300289" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"><g class="venn"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="5.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><path d="M 0.0793,-0.4021 A 0.13684926832900743 0.1344253013659252 -0.0 1 1 0.3530,0.0636 A 0.27369853665801486 0.2688506027318504 -0.0 0 0 0.2161,-0.1693 A 0.27369853665801486 0.2688506027318504 -0.0 0 0 0.0793,-0.4021 L 0.0793,-0.4021"/></g><g fill="rgb(2%, 29%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="5.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><path d="M -0.1944,0.0636 A 0.13684926832900743 0.1344253013659252 -0.0 1 0 0.3530,0.0636 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 0.0793,0.0636 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 -0.1944,0.0636 L -0.1944,0.0636"/></g><g fill="rgb(66%, 7%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="5.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><path d="M -0.1944,0.0636 A 0.13684926832900743 0.1344253013659252 -0.0 1 1 0.0793,-0.4021 A 0.27369853665801486 0.2688506027318504 -0.0 0 0 -0.0576,-0.1693 A 0.27369853665801486 0.2688506027318504 -0.0 0 0 -0.1944,0.0636 L -0.1944,0.0636"/></g><g fill="rgb(96%, 60%, 92%)" stroke="rgb(2%, 29%, 48%)" stroke-width="5.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><path d="M 0.2161,-0.1693 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 0.3530,0.0636 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 0.0793,0.0636 A 0.27369853665801486 0.2688506027318504 -0.0 0 0 0.2161,-0.1693 L 0.2161,-0.1693"/></g><g fill="rgb(100%, 71%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="5.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><path d="M 0.0793,0.0636 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 -0.1944,0.0636 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 -0.0576,-0.1693 A 0.27369853665801486 0.2688506027318504 -0.0 0 0 0.0793,0.0636 L 0.0793,0.0636"/></g><g fill="rgb(73%, 34%, 1%)" stroke="rgb(2%, 29%, 48%)" stroke-width="5.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><path d="M 0.0793,-0.4021 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 0.2161,-0.1693 A 0.27369853665801486 0.2688506027318504 -0.0 0 0 -0.0576,-0.1693 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 0.0793,-0.4021 L 0.0793,-0.4021"/></g><g fill="rgb(21%, 29%, 7%)" stroke="rgb(2%, 29%, 48%)" stroke-width="5.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><path d="M 0.2161,-0.1693 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 0.0793,0.0636 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 -0.0576,-0.1693 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 0.2161,-0.1693 L 0.2161,-0.1693"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.333307689741713" width="0.8252010880239147" y="-0.4741368963836091" height="0.8085681877160402"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.35794055804093433, 0.33241491181194227)"><polyline points="-0.35794055804093433,0.3474149118119423
+-0.35794055804093433,0.31741491181194226"/></g><g transform="rotate(-90.0, -0.35794055804093433, 0.1979896104460171)"><polyline points="-0.35794055804093433,0.2129896104460171
+-0.35794055804093433,0.18298961044601708"/></g><g transform="rotate(-90.0, -0.35794055804093433, 6.356430908009186e-2)"><polyline points="-0.35794055804093433,7.856430908009186e-2
+-0.35794055804093433,4.8564309080091864e-2"/></g><g transform="rotate(-90.0, -0.35794055804093433, -7.086099228583331e-2)"><polyline points="-0.35794055804093433,-5.5860992285833314e-2
+-0.35794055804093433,-8.586099228583331e-2"/></g><g transform="rotate(-90.0, -0.35794055804093433, -0.20528629365175854)"><polyline points="-0.35794055804093433,-0.19028629365175853
+-0.35794055804093433,-0.22028629365175856"/></g><g transform="rotate(-90.0, -0.35794055804093433, -0.33971159501768367)"><polyline points="-0.35794055804093433,-0.32471159501768365
+-0.35794055804093433,-0.3547115950176837"/></g><g transform="rotate(-90.0, -0.35794055804093433, -0.4741368963836091)"><polyline points="-0.35794055804093433,-0.4591368963836091
+-0.35794055804093433,-0.48913689638360913"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.105478049870223e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.38749999999999996" y="0.3435049991746312">-1.50</text><text x="-0.38749999999999996" y="0.20907969780870594">-1.00</text><text x="-0.38749999999999996" y="7.465439644278071e-2">-0.50</text><text x="-0.38749999999999996" y="-5.977090492314446e-2"> 0.00</text><text x="-0.38749999999999996" y="-0.19419620628906964"> 0.50</text><text x="-0.38749999999999996" y="-0.32862150765499487"> 1.00</text><text x="-0.38749999999999996" y="-0.4630468090209201"> 1.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.3312549507167779,0.33241491181194227
+0.4898406592572666,0.33241491181194227"/><polyline points="-0.3312549507167779,0.1979896104460171
+0.4898406592572666,0.1979896104460171"/><polyline points="-0.3312549507167779,6.356430908009186e-2
+0.4898406592572666,6.356430908009186e-2"/><polyline points="-0.3312549507167779,-7.086099228583331e-2
+0.4898406592572666,-7.086099228583331e-2"/><polyline points="-0.3312549507167779,-0.20528629365175854
+0.4898406592572666,-0.20528629365175854"/><polyline points="-0.3312549507167779,-0.33971159501768367
+0.4898406592572666,-0.33971159501768367"/><polyline points="-0.3312549507167779,-0.4741368963836091
+0.4898406592572666,-0.4741368963836091"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.3448030282813496" width="3.284382439896205e-3" y="-0.47575" height="0.8097780154283334"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.3312549507167779,0.3736278455782977
+-0.3312549507167779,0.3436278455782977"/><polyline points="-0.19440568238777053,0.3736278455782977
+-0.19440568238777053,0.3436278455782977"/><polyline points="-5.7556414058763106e-2,0.3736278455782977
+-5.7556414058763106e-2,0.3436278455782977"/><polyline points="7.929285427024435e-2,0.3736278455782977
+7.929285427024435e-2,0.3436278455782977"/><polyline points="0.2161421225992517,0.3736278455782977
+0.2161421225992517,0.3436278455782977"/><polyline points="0.35299139092825915,0.3736278455782977
+0.35299139092825915,0.3436278455782977"/><polyline points="0.4898406592572666,0.3736278455782977
+0.4898406592572666,0.3436278455782977"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.105478049870223e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.3312549507167779" y="0.4098438853987152" transform="rotate(-45.0, -0.3312549507167779, 0.4098438853987152)">-1.50</text><text x="-0.19440568238777053" y="0.4098438853987152" transform="rotate(-45.0, -0.19440568238777053, 0.4098438853987152)">-1.00</text><text x="-5.7556414058763106e-2" y="0.4098438853987152" transform="rotate(-45.0, -5.7556414058763106e-2, 0.4098438853987152)">-0.50</text><text x="7.929285427024435e-2" y="0.4098438853987152" transform="rotate(-45.0, 7.929285427024435e-2, 0.4098438853987152)"> 0.00</text><text x="0.2161421225992517" y="0.4098438853987152" transform="rotate(-45.0, 0.2161421225992517, 0.4098438853987152)"> 0.50</text><text x="0.35299139092825915" y="0.4098438853987152" transform="rotate(-45.0, 0.35299139092825915, 0.4098438853987152)"> 1.00</text><text x="0.4898406592572666" y="0.4098438853987152" transform="rotate(-45.0, 0.4898406592572666, 0.4098438853987152)"> 1.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.3312549507167779,0.33241491181194227
+-0.3312549507167779,-0.4741368963836091"/><polyline points="-0.19440568238777053,0.33241491181194227
+-0.19440568238777053,-0.4741368963836091"/><polyline points="-5.7556414058763106e-2,0.33241491181194227
+-5.7556414058763106e-2,-0.4741368963836091"/><polyline points="7.929285427024435e-2,0.33241491181194227
+7.929285427024435e-2,-0.4741368963836091"/><polyline points="0.2161421225992517,0.33241491181194227
+0.2161421225992517,-0.4741368963836091"/><polyline points="0.35299139092825915,0.33241491181194227
+0.35299139092825915,-0.4741368963836091"/><polyline points="0.4898406592572666,0.33241491181194227
+0.4898406592572666,-0.4741368963836091"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.332897141936726" width="0.8243799924139406" y="0.34249680941438665" height="3.226207232782219e-3"/></g></g></g></g></svg>
diff --git a/other/wave.svg b/other/wave.svg
--- a/other/wave.svg
+++ b/other/wave.svg
@@ -1,1 +1,63 @@
-<svg height="300.0" width="439.7949673811743" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.7865 -0.5365 1.573 1.073"><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="3.0e-3" stroke="#1f78b5"><rect height="3.0e-2" y="-1.5e-2" width="3.0000000000000027e-2" x="-0.765"/><rect height="3.0e-2" y="-0.11952846326765364" width="3.0000000000000027e-2" x="-0.715"/><rect height="3.0000000000000027e-2" y="-0.21948853110729405" width="3.0000000000000027e-2" x="-0.665"/><rect height="3.0000000000000027e-2" y="-0.3105114688927061" width="3.0000000000000027e-2" x="-0.615"/><rect height="3.0000000000000027e-2" y="-0.3886191374661522" width="3.0000000000000027e-2" x="-0.5650000000000001"/><rect height="3.0000000000000027e-2" y="-0.4503978569087953" width="3.0000000000000027e-2" x="-0.515"/><rect height="3.0000000000000027e-2" y="-0.4931476007338057" width="3.0000000000000027e-2" x="-0.46499999999999997"/><rect height="3.0000000000000027e-2" y="-0.515" width="3.0000000000000027e-2" x="-0.41500000000000004"/><rect height="3.0000000000000027e-2" y="-0.515" width="3.0000000000000027e-2" x="-0.36499999999999994"/><rect height="3.0000000000000027e-2" y="-0.4931476007338059" width="3.0000000000000027e-2" x="-0.3150000000000001"/><rect height="3.0000000000000027e-2" y="-0.4503978569087955" width="3.0000000000000027e-2" x="-0.265"/><rect height="3.0000000000000027e-2" y="-0.3886191374661524" width="3.0000000000000027e-2" x="-0.2150000000000002"/><rect height="3.0000000000000027e-2" y="-0.3105114688927062" width="3.0000000000000027e-2" x="-0.16499999999999992"/><rect height="3.0000000000000027e-2" y="-0.21948853110729416" width="3.0e-2" x="-0.11500000000000009"/><rect height="3.0e-2" y="-0.11952846326765375" width="3.0e-2" x="-6.500000000000004e-2"/><rect height="3.0e-2" y="-1.500000000000011e-2" width="3.0e-2" x="-1.5e-2"/><rect height="3.0e-2" y="8.952846326765325e-2" width="3.0e-2" x="3.5000000000000156e-2"/><rect height="3.0000000000000027e-2" y="0.1894885311072937" width="3.0e-2" x="8.499999999999998e-2"/><rect height="3.0000000000000027e-2" y="0.28051146889270595" width="3.0000000000000027e-2" x="0.1349999999999998"/><rect height="3.0000000000000027e-2" y="0.35861913746615204" width="3.0000000000000027e-2" x="0.18499999999999994"/><rect height="3.0000000000000027e-2" y="0.42039785690879505" width="3.0000000000000027e-2" x="0.235"/><rect height="3.0000000000000027e-2" y="0.46314760073380556" width="3.0000000000000027e-2" x="0.28500000000000003"/><rect height="3.0000000000000027e-2" y="0.4849999999999999" width="3.0000000000000027e-2" x="0.33499999999999963"/><rect height="3.0000000000000027e-2" y="0.485" width="3.0000000000000027e-2" x="0.3849999999999999"/><rect height="3.0000000000000027e-2" y="0.4631476007338056" width="3.0000000000000027e-2" x="0.43500000000000016"/><rect height="3.0000000000000027e-2" y="0.4203978569087954" width="3.0000000000000027e-2" x="0.485"/><rect height="3.0000000000000027e-2" y="0.35861913746615237" width="3.0000000000000027e-2" x="0.5349999999999998"/><rect height="3.0000000000000027e-2" y="0.28051146889270606" width="3.0000000000000027e-2" x="0.5850000000000001"/><rect height="3.0000000000000027e-2" y="0.18948853110729424" width="3.0000000000000027e-2" x="0.6349999999999999"/><rect height="3.0e-2" y="8.95284632676537e-2" width="3.0000000000000027e-2" x="0.6849999999999999"/><rect height="3.0e-2" y="-1.4999999999999888e-2" width="3.0000000000000027e-2" x="0.735"/></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="445.66691218957544" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7337586778163459 -0.49786990812511744 1.479175015777848 0.9957043985006302" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"><g class="wave"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="-0.5819103029346796" width="3.0000000000000027e-2" y="-5.681211862490497e-2" height="3.0e-2"/><rect x="-0.5435095975286989" width="3.0000000000000027e-2" y="-0.1469960821617482" height="3.0000000000000013e-2"/><rect x="-0.505108892122718" width="3.0000000000000027e-2" y="-0.23323857374136125" height="3.0000000000000027e-2"/><rect x="-0.4667081867167372" width="3.0000000000000027e-2" y="-0.3117703826443262" height="3.0000000000000027e-2"/><rect x="-0.4283074813107564" width="3.0000000000000027e-2" y="-0.37915929198415466" height="3.0000000000000027e-2"/><rect x="-0.38990677590477557" width="3.0000000000000027e-2" y="-0.4324600830548322" height="3.0000000000000027e-2"/><rect x="-0.3515060704987948" width="3.0000000000000027e-2" y="-0.46934325552099776" height="3.0000000000000027e-2"/><rect x="-0.31310536509281395" width="3.0000000000000027e-2" y="-0.4881968377607824" height="3.0000000000000027e-2"/><rect x="-0.27470465968683316" width="3.0000000000000027e-2" y="-0.4881968377607824" height="3.0000000000000027e-2"/><rect x="-0.23630395428085232" width="3.0000000000000027e-2" y="-0.46934325552099776" height="3.0000000000000027e-2"/><rect x="-0.19790324887487148" width="3.0000000000000027e-2" y="-0.4324600830548324" height="3.0000000000000027e-2"/><rect x="-0.15950254346889076" width="3.0000000000000027e-2" y="-0.3791592919841549" height="3.0000000000000027e-2"/><rect x="-0.12110183806290985" width="3.0e-2" y="-0.3117703826443262" height="3.0000000000000027e-2"/><rect x="-8.270113265692901e-2" width="3.0e-2" y="-0.23323857374136137" height="3.0000000000000027e-2"/><rect x="-4.430042725094839e-2" width="3.0e-2" y="-0.1469960821617482" height="3.0000000000000013e-2"/><rect x="-5.899721844967329e-3" width="3.0e-2" y="-5.681211862490508e-2" height="3.0e-2"/><rect x="3.25009835610134e-2" width="3.0e-2" y="3.337184491193797e-2" height="3.0e-2"/><rect x="7.090168896699424e-2" width="3.0e-2" y="0.11961433649155113" height="3.0000000000000013e-2"/><rect x="0.10930239437297508" width="3.0000000000000013e-2" y="0.19814614539451608" height="3.0000000000000027e-2"/><rect x="0.1477030997789558" width="3.0000000000000027e-2" y="0.2655350547343446" height="3.0000000000000027e-2"/><rect x="0.18610380518493652" width="3.0000000000000027e-2" y="0.31883584580502206" height="3.0000000000000027e-2"/><rect x="0.22450451059091747" width="3.0000000000000027e-2" y="0.3557190182711878" height="3.0000000000000027e-2"/><rect x="0.2629052159968982" width="3.0000000000000027e-2" y="0.3745726005109724" height="3.0000000000000027e-2"/><rect x="0.30130592140287915" width="3.0000000000000027e-2" y="0.3745726005109724" height="3.0000000000000027e-2"/><rect x="0.33970662680886" width="3.0000000000000027e-2" y="0.3557190182711878" height="3.0000000000000027e-2"/><rect x="0.3781073322148404" width="3.0000000000000027e-2" y="0.31883584580502233" height="3.0000000000000027e-2"/><rect x="0.41650803762082156" width="3.0000000000000027e-2" y="0.26553505473434486" height="3.0000000000000027e-2"/><rect x="0.4549087430268025" width="3.0000000000000027e-2" y="0.19814614539451614" height="3.0000000000000027e-2"/><rect x="0.493309448432783" width="3.0000000000000027e-2" y="0.11961433649155158" height="3.0000000000000013e-2"/><rect x="0.5317101538387642" width="3.0000000000000027e-2" y="3.3371844911938356e-2" height="3.0e-2"/><rect x="0.5701108592447447" width="3.0000000000000027e-2" y="-5.681211862490497e-2" height="3.0e-2"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5810282423477436" width="1.297566976964342" y="-0.4875109476841367" height="0.8913976581184633"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6066972230987693, 0.39194878814340184)"><polyline points="-0.6066972230987693,0.40694878814340185
+-0.6066972230987693,0.3769487881434018"/></g><g transform="rotate(-90.0, -0.6066972230987693, 0.3051966067897405)"><polyline points="-0.6066972230987693,0.3201966067897405
+-0.6066972230987693,0.29019660678974046"/></g><g transform="rotate(-90.0, -0.6066972230987693, 0.21844442543607906)"><polyline points="-0.6066972230987693,0.23344442543607907
+-0.6066972230987693,0.20344442543607905"/></g><g transform="rotate(-90.0, -0.6066972230987693, 0.1316922440824177)"><polyline points="-0.6066972230987693,0.1466922440824177
+-0.6066972230987693,0.1166922440824177"/></g><g transform="rotate(-90.0, -0.6066972230987693, 4.4940062728756336e-2)"><polyline points="-0.6066972230987693,5.9940062728756335e-2
+-0.6066972230987693,2.9940062728756336e-2"/></g><g transform="rotate(-90.0, -0.6066972230987693, -4.181211862490497e-2)"><polyline points="-0.6066972230987693,-2.681211862490497e-2
+-0.6066972230987693,-5.681211862490497e-2"/></g><g transform="rotate(-90.0, -0.6066972230987693, -0.12856429997856655)"><polyline points="-0.6066972230987693,-0.11356429997856655
+-0.6066972230987693,-0.14356429997856657"/></g><g transform="rotate(-90.0, -0.6066972230987693, -0.2153164813322278)"><polyline points="-0.6066972230987693,-0.2003164813322278
+-0.6066972230987693,-0.23031648133222782"/></g><g transform="rotate(-90.0, -0.6066972230987693, -0.30206866268588917)"><polyline points="-0.6066972230987693,-0.28706866268588915
+-0.6066972230987693,-0.3170686626858892"/></g><g transform="rotate(-90.0, -0.6066972230987693, -0.38882084403955053)"><polyline points="-0.6066972230987693,-0.3738208440395505
+-0.6066972230987693,-0.40382084403955054"/></g><g transform="rotate(-90.0, -0.6066972230987693, -0.4755730253932118)"><polyline points="-0.6066972230987693,-0.46057302539321177
+-0.6066972230987693,-0.4905730253932118"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.2781634585042604e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.6375" y="0.4038772130795303">-1.00</text><text x="-0.6375" y="0.3171250317258689">-0.80</text><text x="-0.6375" y="0.2303728503722075">-0.60</text><text x="-0.6375" y="0.14362066901854614">-0.40</text><text x="-0.6375" y="5.686848766488478e-2">-0.20</text><text x="-0.6375" y="-2.9883693688776525e-2"> 0.00</text><text x="-0.6375" y="-0.116635875042438"> 0.20</text><text x="-0.6375" y="-0.20338805639609936"> 0.40</text><text x="-0.6375" y="-0.2901402377497606"> 0.60</text><text x="-0.6375" y="-0.3768924191034221"> 0.80</text><text x="-0.6375" y="-0.46364460045708333"> 1.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5669103029346796,0.39194878814340184
+0.7165387346165986,0.39194878814340184"/><polyline points="-0.5669103029346796,0.3051966067897405
+0.7165387346165986,0.3051966067897405"/><polyline points="-0.5669103029346796,0.21844442543607906
+0.7165387346165986,0.21844442543607906"/><polyline points="-0.5669103029346796,0.1316922440824177
+0.7165387346165986,0.1316922440824177"/><polyline points="-0.5669103029346796,4.4940062728756336e-2
+0.7165387346165986,4.4940062728756336e-2"/><polyline points="-0.5669103029346796,-4.181211862490497e-2
+0.7165387346165986,-4.181211862490497e-2"/><polyline points="-0.5669103029346796,-0.12856429997856655
+0.7165387346165986,-0.12856429997856655"/><polyline points="-0.5669103029346796,-0.2153164813322278
+0.7165387346165986,-0.2153164813322278"/><polyline points="-0.5669103029346796,-0.30206866268588917
+0.7165387346165986,-0.30206866268588917"/><polyline points="-0.5669103029346796,-0.38882084403955053
+0.7165387346165986,-0.38882084403955053"/><polyline points="-0.5669103029346796,-0.4755730253932118
+0.7165387346165986,-0.4755730253932118"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5930071000315557" width="3.4225307668034333e-3" y="-0.4773080690202852" height="0.8709919007907603"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5669103029346796,0.444912364840425
+-0.5669103029346796,0.414912364840425"/><polyline points="-0.3835604404273542,0.444912364840425
+-0.3835604404273542,0.414912364840425"/><polyline points="-0.20021057792002872,0.444912364840425
+-0.20021057792002872,0.414912364840425"/><polyline points="-1.6860715412703398e-2,0.444912364840425
+-1.6860715412703398e-2,0.414912364840425"/><polyline points="0.16648914709462204,0.444912364840425
+0.16648914709462204,0.414912364840425"/><polyline points="0.34983900960194736,0.444912364840425
+0.34983900960194736,0.414912364840425"/><polyline points="0.533188872109273,0.444912364840425
+0.533188872109273,0.414912364840425"/><polyline points="0.7165387346165986,0.444912364840425
+0.7165387346165986,0.414912364840425"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.2781634585042604e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5669103029346796" y="0.485">0.0</text><text x="-0.3835604404273542" y="0.485">1.0</text><text x="-0.20021057792002872" y="0.485">2.0</text><text x="-1.6860715412703398e-2" y="0.485">3.0</text><text x="0.16648914709462204" y="0.485">4.0</text><text x="0.34983900960194736" y="0.485">5.0</text><text x="0.533188872109273" y="0.485">6.0</text><text x="0.7165387346165986" y="0.485">7.0</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5669103029346796,0.39194878814340184
+-0.5669103029346796,-0.4755730253932118"/><polyline points="-0.3835604404273542,0.39194878814340184
+-0.3835604404273542,-0.4755730253932118"/><polyline points="-0.20021057792002872,0.39194878814340184
+-0.20021057792002872,-0.4755730253932118"/><polyline points="-1.6860715412703398e-2,0.39194878814340184
+-1.6860715412703398e-2,-0.4755730253932118"/><polyline points="0.16648914709462204,0.39194878814340184
+0.16648914709462204,-0.4755730253932118"/><polyline points="0.34983900960194736,0.39194878814340184
+0.34983900960194736,-0.4755730253932118"/><polyline points="0.533188872109273,0.39194878814340184
+0.533188872109273,-0.4755730253932118"/><polyline points="0.7165387346165986,0.39194878814340184
+0.7165387346165986,-0.4755730253932118"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5686215683180813" width="1.2868715683180814" y="0.4125619285696927" height="3.4700872541464922e-3"/></g></g></g></g></svg>
diff --git a/other/wheel.svg b/other/wheel.svg
new file mode 100644
--- /dev/null
+++ b/other/wheel.svg
@@ -0,0 +1,63 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="451.62214217250556" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.731781319367409 -0.4978484285626692 1.4806198310116425 0.9835344812075835" height="300.0"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #0d0d0d;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #0d0d0d;
+  }
+  .legendBorder g {
+    fill: #f0f0f0;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: #f0f0f0;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: #f0f0f0;
+  }
+  .legendBorder g {
+    fill: #0d0d0d;
+  }
+}</style><g class="chart"><g class="dots"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(50%, 50%, 50%)" stroke-width="3.0e-3" fill-opacity="1.0" stroke-opacity="1.0"><circle cy="-0.11103193242994913" cx="-0.4268236784626688" r="4.0e-2"/></g><g fill="rgb(2%, 29%, 48%)" stroke="rgb(50%, 50%, 50%)" stroke-width="3.0e-3" fill-opacity="1.0" stroke-opacity="1.0"><circle cy="-4.8378389925234244e-2" cx="-0.2032463170209744" r="4.0e-2"/></g><g fill="rgb(66%, 7%, 55%)" stroke="rgb(50%, 50%, 50%)" stroke-width="3.0e-3" fill-opacity="1.0" stroke-opacity="1.0"><circle cy="-7.076416935012897e-2" cx="0.5602804899549139" r="4.0e-2"/></g><g fill="rgb(96%, 60%, 92%)" stroke="rgb(50%, 50%, 50%)" stroke-width="3.0e-3" fill-opacity="1.0" stroke-opacity="1.0"><circle cy="-8.125519588584867e-2" cx="0.35424081534968144" r="4.0e-2"/></g><g fill="rgb(100%, 71%, 35%)" stroke="rgb(50%, 50%, 50%)" stroke-width="3.0e-3" fill-opacity="1.0" stroke-opacity="1.0"><circle cy="-0.4386167023784807" cx="8.061815034747388e-2" r="4.0e-2"/></g><g fill="rgb(73%, 34%, 1%)" stroke="rgb(50%, 50%, 50%)" stroke-width="3.0e-3" fill-opacity="1.0" stroke-opacity="1.0"><circle cy="-0.4122535289466883" cx="0.24142247085194224" r="4.0e-2"/></g><g fill="rgb(21%, 29%, 7%)" stroke="rgb(50%, 50%, 50%)" stroke-width="3.0e-3" fill-opacity="1.0" stroke-opacity="1.0"><circle cy="-0.32770362452141577" cx="-0.24108410000700525" r="4.0e-2"/></g><g fill="rgb(53%, 51%, 28%)" stroke="rgb(50%, 50%, 50%)" stroke-width="3.0e-3" fill-opacity="1.0" stroke-opacity="1.0"><circle cy="-0.34648111450405095" cx="-0.1341177220743705" r="4.0e-2"/></g></g><g class="wheel"><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.387882445411583e-2" width="9.999999999999995e-3" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.413461767192172e-2" width="9.999999999999995e-3" y="-0.21675018266569146" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.489796331349127e-2" width="9.999999999999995e-3" y="-0.2189263844165089" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.615682296205636e-2" width="9.999999999999995e-3" y="-0.2210333962446197" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.789134364895253e-2" width="9.999999999999995e-3" y="-0.22303798931482688" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.007417094679555e-2" width="9.999999999999995e-3" y="-0.22490854999692722" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.267088036514e-2" width="9.999999999999995e-3" y="-0.22661557843154534" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.564052024526e-2" width="9.999999999999995e-3" y="-0.22813215376053797" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.893625759226894e-2" width="9.999999999999995e-3" y="-0.2294343586850084" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.250611665942662e-2" width="1.0000000000000002e-2" y="-0.23050165665539857" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 39%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.629379863671336e-2" width="1.0000000000000002e-2" y="-0.2313172157451424" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 39%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.023956951669597e-2" width="1.0000000000000002e-2" y="-0.23186817410020322" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 39%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.42812021355077e-2" width="1.0000000000000009e-2" y="-0.2321458427781954" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 39%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.835495753239552e-2" width="1.0000000000000009e-2" y="-0.2321458427781954" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.239659015120726e-2" width="1.0000000000000009e-2" y="-0.23186817410020322" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.634236103118975e-2" width="1.0000000000000009e-2" y="-0.2313172157451424" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.01300430084766e-2" width="1.0000000000000009e-2" y="-0.23050165665539857" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 39%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.369990207563428e-2" width="1.0000000000000009e-2" y="-0.2294343586850084" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 39%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.699563942264322e-2" width="1.0000000000000009e-2" y="-0.22813215376053797" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 39%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.996527930276311e-2" width="1.0000000000000009e-2" y="-0.22661557843154534" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 40%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10256198872110767" width="1.0000000000000009e-2" y="-0.22490854999692722" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10474481601895058" width="1.0000000000000009e-2" y="-0.22303798931482688" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10647933670584686" width="1.0000000000000009e-2" y="-0.2210333962446197" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10773819635441184" width="1.0000000000000009e-2" y="-0.2189263844165089" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1085015419959815" width="1.0000000000000009e-2" y="-0.21675018266569146" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10875733521378739" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1085015419959815" width="1.0000000000000009e-2" y="-0.21232803932186395" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 40%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10773819635441184" width="1.0000000000000009e-2" y="-0.2101518375710466" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 40%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10647933670584686" width="1.0000000000000009e-2" y="-0.2080448257429357" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 40%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10474481601895058" width="1.0000000000000009e-2" y="-0.20604023267272864" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10256198872110767" width="1.0000000000000009e-2" y="-0.2041696719906283" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.996527930276311e-2" width="1.0000000000000009e-2" y="-0.20246264355601018" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.699563942264322e-2" width="1.0000000000000009e-2" y="-0.20094606822701766" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.369990207563428e-2" width="1.0000000000000009e-2" y="-0.19964386330254702" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.01300430084766e-2" width="1.0000000000000009e-2" y="-0.19857656533215695" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.634236103118975e-2" width="1.0000000000000009e-2" y="-0.197761006242413" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.239659015120726e-2" width="1.0000000000000009e-2" y="-0.1972100478873522" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.835495753239552e-2" width="1.0000000000000009e-2" y="-0.19693237920936013" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.42812021355077e-2" width="1.0000000000000009e-2" y="-0.19693237920936013" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.023956951669597e-2" width="1.0000000000000002e-2" y="-0.1972100478873522" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.629379863671336e-2" width="1.0000000000000002e-2" y="-0.197761006242413" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 38%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.250611665942662e-2" width="1.0000000000000002e-2" y="-0.19857656533215695" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 38%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.893625759226894e-2" width="9.999999999999995e-3" y="-0.19964386330254702" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 38%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.564052024526e-2" width="9.999999999999995e-3" y="-0.20094606822701766" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 38%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.267088036514e-2" width="9.999999999999995e-3" y="-0.20246264355601018" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 38%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.007417094679555e-2" width="9.999999999999995e-3" y="-0.2041696719906283" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 38%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.789134364895253e-2" width="9.999999999999995e-3" y="-0.20604023267272864" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.615682296205636e-2" width="9.999999999999995e-3" y="-0.2080448257429357" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.489796331349127e-2" width="9.999999999999995e-3" y="-0.2101518375710466" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.413461767192172e-2" width="9.999999999999995e-3" y="-0.21232803932186395" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 37%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.1439569074280006e-2" width="1.0000000000000002e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 37%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.1951155509891783e-2" width="1.0000000000000002e-2" y="-0.21896125433760516" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 37%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.3477846793030986e-2" width="1.0000000000000002e-2" y="-0.22331365783924007" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 37%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.599556609016106e-2" width="1.0000000000000002e-2" y="-0.22752768149546176" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 37%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.9464607463953617e-2" width="1.0000000000000002e-2" y="-0.231536867635876" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 37%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.3830262059639336e-2" width="1.0000000000000002e-2" y="-0.2352779890000768" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 38%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.902368089632845e-2" width="1.0000000000000002e-2" y="-0.23869204586931303" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 38%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.4962960656568336e-2" width="9.999999999999998e-3" y="-0.24172519652729796" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 38%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.155443535058633e-2" width="9.999999999999995e-3" y="-0.24432960637623913" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 38%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.8694153484901685e-2" width="9.999999999999995e-3" y="-0.2464642023170196" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 38%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.626951743947505e-2" width="9.999999999999995e-3" y="-0.2480953204965073" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.416105919944026e-2" width="1.0000000000000002e-2" y="-0.2491972372066289" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 39%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.224432443706363e-2" width="1.0000000000000002e-2" y="-0.24975257456261302" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 39%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.039183523083959e-2" width="1.0000000000000009e-2" y="-0.24975257456261302" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 39%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.847510046846296e-2" width="1.0000000000000009e-2" y="-0.2491972372066289" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.636664222842806e-2" width="1.0000000000000009e-2" y="-0.2480953204965073" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 40%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10394200618300165" width="1.0000000000000009e-2" y="-0.2464642023170196" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 40%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11108172431731689" width="1.0000000000000009e-2" y="-0.24432960637623913" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11767319901133488" width="1.0000000000000009e-2" y="-0.24172519652729796" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12361247877157472" width="1.0000000000000009e-2" y="-0.23869204586931292" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 40%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12880589760826394" width="1.0000000000000009e-2" y="-0.2352779890000768" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 40%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1331715522039495" width="1.0000000000000009e-2" y="-0.231536867635876" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 40%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13664059357774222" width="1.0000000000000009e-2" y="-0.22752768149546176" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 40%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13915831287487218" width="1.0000000000000009e-2" y="-0.22331365783924007" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 40%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14068500415801133" width="1.0000000000000009e-2" y="-0.21896125433760516" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 40%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14119659059362327" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 40%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14068500415801133" width="1.0000000000000009e-2" y="-0.21011696764995036" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 40%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13915831287487218" width="1.0000000000000009e-2" y="-0.20576456414831545" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 40%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13664059357774222" width="1.0000000000000009e-2" y="-0.20155054049209364" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 40%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1331715522039495" width="1.0000000000000009e-2" y="-0.19754135435167952" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 40%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12880589760826394" width="1.0000000000000009e-2" y="-0.19380023298747873" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 40%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12361247877157472" width="1.0000000000000009e-2" y="-0.1903861761182426" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 40%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11767319901133488" width="1.0000000000000009e-2" y="-0.18735302546025745" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 40%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11108172431731689" width="1.0000000000000009e-2" y="-0.1847486156113164" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 39%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10394200618300142" width="1.0000000000000009e-2" y="-0.18261401967053603" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 39%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.636664222842806e-2" width="1.0000000000000009e-2" y="-0.18098290149104823" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 39%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.847510046846296e-2" width="1.0000000000000009e-2" y="-0.17988098478092662" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 39%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.039183523083959e-2" width="1.0000000000000009e-2" y="-0.1793256474249425" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 39%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.224432443706363e-2" width="1.0000000000000002e-2" y="-0.1793256474249425" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 38%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.416105919944026e-2" width="1.0000000000000002e-2" y="-0.17988098478092662" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 38%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.626951743947505e-2" width="9.999999999999995e-3" y="-0.18098290149104823" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 38%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.8694153484901685e-2" width="9.999999999999995e-3" y="-0.18261401967053603" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 38%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.155443535058633e-2" width="9.999999999999995e-3" y="-0.1847486156113164" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 38%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.4962960656568336e-2" width="9.999999999999998e-3" y="-0.18735302546025745" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.902368089632845e-2" width="1.0000000000000002e-2" y="-0.1903861761182426" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 37%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.3830262059639336e-2" width="1.0000000000000002e-2" y="-0.19380023298747873" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 37%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.9464607463953617e-2" width="1.0000000000000002e-2" y="-0.19754135435167952" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 37%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.5995566090160947e-2" width="1.0000000000000002e-2" y="-0.20155054049209364" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 37%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.3477846793030986e-2" width="1.0000000000000002e-2" y="-0.20576456414831545" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 37%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.1951155509891783e-2" width="1.0000000000000002e-2" y="-0.21011696764995036" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 36%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.0999686305555824e-2" width="1.0000000000000002e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 36%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.0232306652138158e-2" width="1.0000000000000002e-2" y="-0.22117232600951897" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 36%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.794226972742952e-2" width="1.0000000000000002e-2" y="-0.2277009312619711" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 36%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.4165690781734356e-2" width="1.0000000000000002e-2" y="-0.23402196674630382" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 37%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.962128721045296e-3" width="1.0000000000000002e-2" y="-0.24003574595692523" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 37%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.413646827516773e-3" width="1.0000000000000002e-2" y="-0.24564742800322636" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 37%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.376481427517006e-3" width="1.0e-2" y="-0.2507685133070805" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 37%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.4285401067876787e-2" width="1.0000000000000002e-2" y="-0.25531823929405806" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 37%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.4172613108903725e-2" width="1.0000000000000002e-2" y="-0.25922485406746976" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 38%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.488219031037664e-2" width="9.999999999999998e-3" y="-0.2624267479786403" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 38%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.624523624223697e-2" width="9.999999999999995e-3" y="-0.26487342524787194" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 38%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.808254888218455e-2" width="9.999999999999995e-3" y="-0.2665263003130546" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 39%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.020744673861967e-2" width="1.0000000000000002e-2" y="-0.26735930634703053" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 39%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.242871292928344e-2" width="1.0000000000000009e-2" y="-0.26735930634703053" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 39%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.455361078571867e-2" width="1.0000000000000009e-2" y="-0.2665263003130546" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 40%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10639092342566625" width="1.0000000000000009e-2" y="-0.26487342524787194" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 40%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11775396935752647" width="1.0000000000000009e-2" y="-0.2624267479786403" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 40%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12846354655899944" width="1.0000000000000009e-2" y="-0.25922485406746976" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13835075860002632" width="1.0000000000000009e-2" y="-0.25531823929405806" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 41%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14725967824038627" width="1.0000000000000009e-2" y="-0.2507685133070805" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 41%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.15504980649541994" width="1.0000000000000009e-2" y="-0.24564742800322636" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 41%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16159828838894852" width="1.0000000000000009e-2" y="-0.24003574595692523" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 41%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16680185044963758" width="1.0000000000000009e-2" y="-0.2340219667463037" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 41%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17057842939533252" width="1.0000000000000009e-2" y="-0.2277009312619711" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 41%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17286846632004127" width="1.0000000000000009e-2" y="-0.22117232600951897" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 41%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17363584597345905" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 41%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17286846632004127" width="1.0000000000000009e-2" y="-0.20790589597803666" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 41%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17057842939533252" width="1.0000000000000009e-2" y="-0.2013772907255842" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 41%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16680185044963758" width="1.0000000000000009e-2" y="-0.1950562552412517" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 41%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16159828838894852" width="1.0000000000000009e-2" y="-0.1890424760306303" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 41%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.15504980649541994" width="1.0000000000000009e-2" y="-0.18343079398432927" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 41%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14725967824038627" width="1.0000000000000009e-2" y="-0.17830970868047502" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 40%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13835075860002632" width="1.0000000000000009e-2" y="-0.17375998269349746" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 40%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12846354655899944" width="1.0000000000000009e-2" y="-0.16985336792008576" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 40%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11775396935752647" width="1.0000000000000009e-2" y="-0.16665147400891522" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 39%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10639092342566625" width="1.0000000000000009e-2" y="-0.16420479673968358" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 39%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.455361078571867e-2" width="1.0000000000000009e-2" y="-0.16255192167450105" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 39%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.242871292928344e-2" width="1.0000000000000009e-2" y="-0.16171891564052487" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 39%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.020744673861967e-2" width="1.0000000000000002e-2" y="-0.16171891564052487" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 38%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.808254888218444e-2" width="9.999999999999995e-3" y="-0.16255192167450105" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 38%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.624523624223697e-2" width="9.999999999999995e-3" y="-0.16420479673968358" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 38%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.488219031037664e-2" width="9.999999999999998e-3" y="-0.16665147400891522" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 37%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.4172613108903725e-2" width="1.0000000000000002e-2" y="-0.16985336792008576" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 37%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.4285401067876787e-2" width="1.0000000000000002e-2" y="-0.17375998269349746" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 37%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.376481427516784e-3" width="1.0e-2" y="-0.17830970868047502" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 37%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.413646827516773e-3" width="1.0000000000000002e-2" y="-0.18343079398432915" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 37%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.962128721045296e-3" width="1.0000000000000002e-2" y="-0.1890424760306303" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 36%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.4165690781734356e-2" width="1.0000000000000002e-2" y="-0.1950562552412517" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 36%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.794226972742952e-2" width="1.0000000000000002e-2" y="-0.2013772907255842" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 36%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.0232306652138158e-2" width="1.0000000000000002e-2" y="-0.20790589597803666" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 35%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.343894168539177e-2" width="1.0000000000000002e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 35%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.241576881416799e-2" width="9.999999999999995e-3" y="-0.22338339768143256" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 35%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.9362386247889696e-2" width="9.999999999999995e-3" y="-0.23208820468470237" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 35%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.432694765362955e-2" width="9.999999999999995e-3" y="-0.24051625199714577" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 36%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.738886490604421e-2" width="9.999999999999995e-3" y="-0.24853462427797424" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 36%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.865755571467277e-2" width="9.999999999999998e-3" y="-0.2560168670063757" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 36%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.8270718041294657e-2" width="1.0000000000000002e-2" y="-0.2628449807448482" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 36%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.392158520814655e-3" width="1.0000000000000002e-2" y="-0.26891128206081816" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 37%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.790790867221115e-3" width="1.0e-2" y="-0.2741201017587006" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 37%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.1070227135851823e-2" width="1.0000000000000002e-2" y="-0.2783892936402613" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 38%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.6220955044998775e-2" width="9.999999999999998e-3" y="-0.2816515299992367" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 38%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.200403856492885e-2" width="9.999999999999995e-3" y="-0.28385536341948014" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 38%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.817056904017582e-2" width="1.0000000000000002e-2" y="-0.2849660381314483" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 39%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.44655906277274e-2" width="1.0000000000000009e-2" y="-0.2849660381314483" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 39%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10063212110297426" width="1.0000000000000009e-2" y="-0.28385536341948014" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 40%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11641520462290444" width="1.0000000000000009e-2" y="-0.2816515299992367" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 40%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13156593253205145" width="1.0000000000000009e-2" y="-0.2783892936402613" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.145845368800682" width="1.0000000000000009e-2" y="-0.2741201017587006" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 41%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.15902831818871804" width="1.0000000000000009e-2" y="-0.26891128206081816" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 41%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17090687770919788" width="1.0000000000000009e-2" y="-0.2628449807448482" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 41%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.18129371538257605" width="1.0000000000000009e-2" y="-0.2560168670063757" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 42%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19002502457394754" width="1.0000000000000009e-2" y="-0.24853462427797424" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 42%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19696310732153277" width="1.0000000000000009e-2" y="-0.24051625199714577" height="1.0000000000000009e-2"/></g><g fill="rgb(30%, 42%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.20199854591579286" width="1.0000000000000009e-2" y="-0.23208820468470237" height="1.0000000000000009e-2"/></g><g fill="rgb(30%, 42%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2050519284820711" width="1.0000000000000009e-2" y="-0.22338339768143256" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 42%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.20607510135329488" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 42%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2050519284820711" width="1.0000000000000009e-2" y="-0.20569482430612285" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 42%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.20199854591579286" width="1.0000000000000009e-2" y="-0.19699001730285315" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 42%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19696310732153277" width="1.0000000000000009e-2" y="-0.18856196999040975" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 42%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19002502457394738" width="1.0000000000000009e-2" y="-0.18054359770958117" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 41%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.18129371538257605" width="1.0000000000000009e-2" y="-0.1730613549811797" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 41%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17090687770919788" width="1.0000000000000009e-2" y="-0.16623324124270744" height="1.0000000000000009e-2"/></g><g fill="rgb(30%, 41%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.15902831818871804" width="1.0000000000000009e-2" y="-0.16016693992673736" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 40%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.145845368800682" width="1.0000000000000009e-2" y="-0.15495812022885513" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 40%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1315659325320514" width="1.0000000000000009e-2" y="-0.1506889283472943" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 40%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11641520462290444" width="1.0000000000000009e-2" y="-0.14742669198831881" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 39%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10063212110297426" width="1.0000000000000009e-2" y="-0.14522285856807537" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 39%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.44655906277274e-2" width="1.0000000000000009e-2" y="-0.14411218385610725" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 38%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.817056904017582e-2" width="1.0000000000000002e-2" y="-0.14411218385610725" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 38%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.200403856492885e-2" width="9.999999999999995e-3" y="-0.14522285856807537" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 38%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.6220955044998775e-2" width="9.999999999999998e-3" y="-0.14742669198831881" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 37%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.1070227135851823e-2" width="1.0000000000000002e-2" y="-0.1506889283472943" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 37%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.790790867221115e-3" width="1.0e-2" y="-0.15495812022885502" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 37%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.392158520814877e-3" width="1.0000000000000002e-2" y="-0.16016693992673736" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 36%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.8270718041294657e-2" width="1.0000000000000002e-2" y="-0.16623324124270744" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 36%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.865755571467277e-2" width="9.999999999999998e-3" y="-0.1730613549811797" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 36%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.738886490604421e-2" width="9.999999999999995e-3" y="-0.18054359770958117" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 36%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.432694765362955e-2" width="9.999999999999995e-3" y="-0.18856196999040975" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 35%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.9362386247889696e-2" width="9.999999999999995e-3" y="-0.19699001730285315" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 35%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.241576881416799e-2" width="9.999999999999995e-3" y="-0.20569482430612285" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 34%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.587819706522737e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 34%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.459923097619793e-2" width="1.0000000000000009e-2" y="-0.22559446935334637" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 34%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.078250276835008e-2" width="1.0000000000000009e-2" y="-0.23647547810743352" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 35%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="7.448820452552496e-2" width="1.0000000000000009e-2" y="-0.24701053724798772" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 35%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.581560109104312e-2" width="1.0000000000000009e-2" y="-0.25703350259902347" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 35%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.490146460182899e-2" width="1.0000000000000002e-2" y="-0.2663863060095253" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 35%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.19179175101061e-2" width="9.999999999999995e-3" y="-0.27492144818261577" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 36%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.7069718109506428e-2" width="9.999999999999998e-3" y="-0.28250432482757826" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 36%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.0591031374461383e-2" width="1.0000000000000002e-2" y="-0.2890153494499311" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 37%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.258263961326779e-3" width="1.0e-2" y="-0.29435183930188213" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 37%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.6196673847760473e-2" width="1.0000000000000002e-2" y="-0.29842963475060136" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 38%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.592552824767326e-2" width="9.999999999999995e-3" y="-0.3011844265259057" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 38%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.613369134173175e-2" width="1.0000000000000002e-2" y="-0.3025727699158659" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 39%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.650246832617148e-2" width="1.0000000000000009e-2" y="-0.3025727699158659" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 39%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10671063142022985" width="1.0000000000000009e-2" y="-0.3011844265259057" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 40%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12643948582014258" width="1.0000000000000009e-2" y="-0.29842963475060136" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 40%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14537789570657644" width="1.0000000000000009e-2" y="-0.29435183930188213" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 41%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16322719104236466" width="1.0000000000000009e-2" y="-0.2890153494499311" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 41%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17970587777740954" width="1.0000000000000009e-2" y="-0.28250432482757837" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 42%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19455407717800943" width="1.0000000000000009e-2" y="-0.27492144818261577" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 42%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2075376242697322" width="1.0000000000000009e-2" y="-0.2663863060095253" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 42%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.21845176075894646" width="1.0000000000000009e-2" y="-0.25703350259902347" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 42%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.22712436419342807" width="1.0000000000000009e-2" y="-0.24701053724798772" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 43%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2334186624362532" width="1.0000000000000009e-2" y="-0.23647547810743352" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 43%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.23723539064410104" width="1.0000000000000009e-2" y="-0.22559446935334637" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 43%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.23851435673313065" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 43%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.23723539064410104" width="1.0000000000000009e-2" y="-0.20348375263420915" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 43%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2334186624362532" width="1.0000000000000009e-2" y="-0.192602743880122" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 42%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.22712436419342807" width="1.0000000000000009e-2" y="-0.1820676847395677" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 42%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.21845176075894646" width="1.0000000000000009e-2" y="-0.17204471938853205" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 42%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2075376242697322" width="1.0000000000000009e-2" y="-0.16269191597803023" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 41%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19455407717800943" width="1.0000000000000009e-2" y="-0.15415677380493986" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 41%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17970587777740954" width="1.0000000000000009e-2" y="-0.14657389715997704" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 41%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16322719104236466" width="1.0000000000000009e-2" y="-0.14006287253762428" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 40%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1453778957065764" width="1.0000000000000009e-2" y="-0.13472638268567327" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 40%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12643948582014275" width="1.0000000000000009e-2" y="-0.13064858723695416" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 39%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10671063142022985" width="1.0000000000000009e-2" y="-0.1278937954616498" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 39%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.650246832617148e-2" width="1.0000000000000009e-2" y="-0.12650545207168962" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 38%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.613369134173175e-2" width="1.0000000000000002e-2" y="-0.12650545207168962" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 38%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.5925528247673035e-2" width="9.999999999999995e-3" y="-0.1278937954616498" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 37%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.6196673847760584e-2" width="1.0000000000000002e-2" y="-0.13064858723695416" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 37%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.258263961326779e-3" width="1.0e-2" y="-0.13472638268567327" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 36%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.0591031374461383e-2" width="1.0000000000000002e-2" y="-0.14006287253762428" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 36%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.7069718109506428e-2" width="9.999999999999998e-3" y="-0.14657389715997715" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 36%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.191791751010621e-2" width="9.999999999999995e-3" y="-0.15415677380493986" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 35%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.490146460182899e-2" width="1.0000000000000002e-2" y="-0.16269191597803023" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 35%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.581560109104312e-2" width="1.0000000000000009e-2" y="-0.17204471938853205" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 35%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="7.448820452552496e-2" width="1.0000000000000009e-2" y="-0.1820676847395677" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 34%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.078250276835008e-2" width="1.0000000000000009e-2" y="-0.192602743880122" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 34%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.459923097619793e-2" width="1.0000000000000009e-2" y="-0.20348375263420915" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 33%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11831745244506342" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 33%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11678269313822764" width="1.0000000000000009e-2" y="-0.22780554102526018" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 33%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11220261928881026" width="1.0000000000000009e-2" y="-0.24086275153016468" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 34%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.10464946139742026" width="1.0000000000000009e-2" y="-0.2535048224988299" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 34%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="9.424233727604225e-2" width="1.0000000000000009e-2" y="-0.2655323809200727" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 34%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.11453734889851e-2" width="1.0000000000000009e-2" y="-0.27675574501267475" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 35%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.556511697891765e-2" width="1.0000000000000009e-2" y="-0.28699791562038335" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 35%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.7747277698198094e-2" width="9.999999999999995e-3" y="-0.29609736759433836" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 36%, 25%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.7972853616144103e-2" width="9.999999999999998e-3" y="-0.30391059714116186" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 36%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.553699213198265e-3" width="1.0000000000000002e-2" y="-0.31031438496350294" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 37%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.617239265052228e-2" width="1.0000000000000002e-2" y="-0.315207739501966" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 37%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.9847017930417665e-2" width="9.999999999999998e-3" y="-0.3185134896323314" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 38%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.409681364328779e-2" width="1.0000000000000002e-2" y="-0.3201795017002834" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 39%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.853934602461544e-2" width="1.0000000000000009e-2" y="-0.3201795017002834" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 39%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11278914173748555" width="1.0000000000000009e-2" y="-0.3185134896323314" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 40%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13646376701738078" width="1.0000000000000009e-2" y="-0.31520773950196623" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 41%, 25%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.15918985888110138" width="1.0000000000000009e-2" y="-0.31031438496350294" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 41%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.18060901328404733" width="1.0000000000000009e-2" y="-0.30391059714116186" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 42%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2003834373661011" width="1.0000000000000009e-2" y="-0.29609736759433836" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 42%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.21820127664682099" width="1.0000000000000009e-2" y="-0.28699791562038335" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 43%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.23378153315688827" width="1.0000000000000009e-2" y="-0.27675574501267475" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 43%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.24687849694394542" width="1.0000000000000009e-2" y="-0.2655323809200727" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 43%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2572856210653234" width="1.0000000000000009e-2" y="-0.2535048224988299" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 43%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2648387789567136" width="1.0000000000000009e-2" y="-0.24086275153016468" height="1.0000000000000009e-2"/></g><g fill="rgb(24%, 43%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2694188528061308" width="1.0000000000000009e-2" y="-0.22780554102525996" height="1.0000000000000009e-2"/></g><g fill="rgb(22%, 43%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2709536121129665" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(21%, 43%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2694188528061308" width="1.0000000000000009e-2" y="-0.20127268096229545" height="1.0000000000000009e-2"/></g><g fill="rgb(21%, 43%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2648387789567136" width="1.0000000000000009e-2" y="-0.18821547045739084" height="1.0000000000000009e-2"/></g><g fill="rgb(21%, 43%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2572856210653234" width="1.0000000000000009e-2" y="-0.17557339948872563" height="1.0000000000000009e-2"/></g><g fill="rgb(21%, 43%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2468784969439453" width="1.0000000000000009e-2" y="-0.16354584106748282" height="1.0000000000000009e-2"/></g><g fill="rgb(22%, 42%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.23378153315688827" width="1.0000000000000009e-2" y="-0.15232247697488066" height="1.0000000000000009e-2"/></g><g fill="rgb(23%, 42%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.21820127664682099" width="1.0000000000000009e-2" y="-0.14208030636717217" height="1.0000000000000009e-2"/></g><g fill="rgb(24%, 41%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2003834373661011" width="1.0000000000000009e-2" y="-0.13298085439321694" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 41%, 51%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.18060901328404733" width="1.0000000000000009e-2" y="-0.12516762484639377" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 40%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1591898588811012" width="1.0000000000000009e-2" y="-0.11876383702405247" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 40%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1364637670173809" width="1.0000000000000009e-2" y="-0.1138704824855894" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 39%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11278914173748555" width="1.0000000000000009e-2" y="-0.11056473235522407" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 39%, 53%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.853934602461533e-2" width="1.0000000000000009e-2" y="-0.10889872028727204" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 38%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.409681364328779e-2" width="1.0000000000000002e-2" y="-0.10889872028727204" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 37%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.984701793041744e-2" width="9.999999999999998e-3" y="-0.11056473235522407" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 37%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.617239265052239e-2" width="1.0000000000000002e-2" y="-0.1138704824855894" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 36%, 51%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.553699213198265e-3" width="1.0000000000000002e-2" y="-0.11876383702405247" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 36%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.7972853616144103e-2" width="9.999999999999998e-3" y="-0.12516762484639365" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 35%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.7747277698198094e-2" width="9.999999999999995e-3" y="-0.13298085439321705" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 35%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.556511697891776e-2" width="1.0000000000000009e-2" y="-0.14208030636717217" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 34%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.11453734889851e-2" width="1.0000000000000009e-2" y="-0.15232247697488066" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 34%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="9.424233727604225e-2" width="1.0000000000000009e-2" y="-0.16354584106748282" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 34%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.10464946139742026" width="1.0000000000000009e-2" y="-0.17557339948872563" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 33%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11220261928881026" width="1.0000000000000009e-2" y="-0.18821547045739084" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 33%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11678269313822764" width="1.0000000000000009e-2" y="-0.20127268096229556" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 32%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.15075670782489903" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 32%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1489661553002577" width="1.0000000000000009e-2" y="-0.23001661269717366" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 32%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.14362273580927065" width="1.0000000000000009e-2" y="-0.24525002495289583" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 32%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13481071826931545" width="1.0000000000000009e-2" y="-0.25999910774967194" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 33%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.12266907346104117" width="1.0000000000000009e-2" y="-0.2740312592411217" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 33%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1073892823761412" width="1.0000000000000009e-2" y="-0.2871251840158243" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 34%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.921231644772942e-2" width="1.0000000000000009e-2" y="-0.2990743830581509" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 34%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.842483728688953e-2" width="1.0000000000000009e-2" y="-0.30969041036109857" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 35%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.5354675857826605e-2" width="9.999999999999995e-3" y="-0.3188058448323925" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 36%, 21%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.0365662387723197e-2" width="1.0000000000000002e-2" y="-0.32627693062512386" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 36%, 20%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.148111453284084e-3" width="1.0e-2" y="-0.3319858442533309" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 37%, 20%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.376850761316185e-2" width="9.999999999999998e-3" y="-0.33584255273875696" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 38%, 19%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.205993594484382e-2" width="9.999999999999995e-3" y="-0.33778623348470127" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 39%, 19%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.057622372305929e-2" width="1.0000000000000009e-2" y="-0.33778623348470127" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 39%, 20%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11886765205474126" width="1.0000000000000009e-2" y="-0.33584255273875696" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 40%, 21%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14648804821461908" width="1.0000000000000009e-2" y="-0.3319858442533309" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 41%, 22%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17300182205562636" width="1.0000000000000009e-2" y="-0.32627693062512386" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 41%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19799083552572982" width="1.0000000000000009e-2" y="-0.3188058448323925" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 42%, 25%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.22106099695479275" width="1.0000000000000009e-2" y="-0.30969041036109857" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 43%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.24184847611563248" width="1.0000000000000009e-2" y="-0.2990743830581509" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 43%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.26002544204404443" width="1.0000000000000009e-2" y="-0.2871251840158243" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 43%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2753052331289444" width="1.0000000000000009e-2" y="-0.2740312592411217" height="1.0000000000000009e-2"/></g><g fill="rgb(24%, 44%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2874468779372187" width="1.0000000000000009e-2" y="-0.25999910774967194" height="1.0000000000000009e-2"/></g><g fill="rgb(22%, 44%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2962588954771738" width="1.0000000000000009e-2" y="-0.24525002495289583" height="1.0000000000000009e-2"/></g><g fill="rgb(20%, 44%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.30160231496816076" width="1.0000000000000009e-2" y="-0.23001661269717366" height="1.0000000000000009e-2"/></g><g fill="rgb(18%, 44%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.30339286749280236" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(17%, 44%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.30160231496816076" width="1.0000000000000009e-2" y="-0.19906160929038175" height="1.0000000000000009e-2"/></g><g fill="rgb(16%, 44%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2962588954771738" width="1.0000000000000009e-2" y="-0.1838281970346597" height="1.0000000000000009e-2"/></g><g fill="rgb(16%, 44%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2874468779372187" width="1.0000000000000009e-2" y="-0.1690791142378837" height="1.0000000000000009e-2"/></g><g fill="rgb(16%, 43%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2753052331289444" width="1.0000000000000009e-2" y="-0.1550469627464337" height="1.0000000000000009e-2"/></g><g fill="rgb(17%, 43%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.26002544204404443" width="1.0000000000000009e-2" y="-0.1419530379717313" height="1.0000000000000009e-2"/></g><g fill="rgb(19%, 42%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.24184847611563248" width="1.0000000000000009e-2" y="-0.1300038389294046" height="1.0000000000000009e-2"/></g><g fill="rgb(21%, 42%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.22106099695479275" width="1.0000000000000009e-2" y="-0.11938781162645695" height="1.0000000000000009e-2"/></g><g fill="rgb(23%, 41%, 53%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19799083552572988" width="1.0000000000000009e-2" y="-0.11027237715516292" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 41%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1730018220556262" width="1.0000000000000009e-2" y="-0.1028012913624316" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 40%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14648804821461908" width="1.0000000000000009e-2" y="-9.709237773422469e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 39%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11886765205474126" width="1.0000000000000009e-2" y="-9.323566924879856e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 38%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.057622372305929e-2" width="1.0000000000000009e-2" y="-9.12919885028543e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 38%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.2059935944843596e-2" width="9.999999999999995e-3" y="-9.12919885028543e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 37%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.376850761316174e-2" width="9.999999999999998e-3" y="-9.323566924879856e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 36%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.148111453284195e-3" width="1.0e-2" y="-9.709237773422469e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 36%, 53%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.0365662387723197e-2" width="1.0000000000000002e-2" y="-0.1028012913624316" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 35%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.5354675857826605e-2" width="9.999999999999995e-3" y="-0.11027237715516292" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 35%, 51%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.842483728688953e-2" width="1.0000000000000009e-2" y="-0.11938781162645695" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 34%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.921231644772942e-2" width="1.0000000000000009e-2" y="-0.1300038389294046" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 33%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1073892823761412" width="1.0000000000000009e-2" y="-0.1419530379717312" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 33%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.12266907346104117" width="1.0000000000000009e-2" y="-0.1550469627464337" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 33%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13481071826931545" width="1.0000000000000009e-2" y="-0.1690791142378837" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 32%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.14362273580927076" width="1.0000000000000009e-2" y="-0.1838281970346597" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 32%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1489661553002577" width="1.0000000000000009e-2" y="-0.19906160929038175" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 31%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18319596320473486" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 31%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18114961746228742" width="1.0000000000000009e-2" y="-0.23222768436908747" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 31%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.17504285232973116" width="1.0000000000000009e-2" y="-0.24963729837562698" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 31%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.16497197514121076" width="1.0000000000000009e-2" y="-0.2664933930005139" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 32%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1510958096460402" width="1.0000000000000009e-2" y="-0.28253013756217094" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 32%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13363319126329742" width="1.0000000000000009e-2" y="-0.2974946230189738" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 33%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11285951591654098" width="1.0000000000000009e-2" y="-0.3111508504959184" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 33%, 22%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.910239687558119e-2" width="1.0000000000000009e-2" y="-0.32328345312785867" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 34%, 20%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.273649809950921e-2" width="1.0000000000000009e-2" y="-0.33370109252362323" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 35%, 18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.417762556224802e-2" width="9.999999999999995e-3" y="-0.34223947628674467" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 36%, 17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.8761697439539987e-3" width="1.0000000000000002e-2" y="-0.34876394900469565" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 37%, 16%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.7689997295906262e-2" width="1.0000000000000002e-2" y="-0.35317161584518253" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 38%, 15%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.002305824639997e-2" width="9.999999999999995e-3" y="-0.3553929652691188" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 38%, 16%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.261310142150336e-2" width="1.0000000000000009e-2" y="-0.3553929652691188" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 39%, 16%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12494616237199696" width="1.0000000000000009e-2" y="-0.35317161584518253" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 40%, 17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.15651232941185728" width="1.0000000000000009e-2" y="-0.34876394900469565" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 41%, 19%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.18681378523015135" width="1.0000000000000009e-2" y="-0.34223947628674467" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 42%, 21%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.21537265776741243" width="1.0000000000000009e-2" y="-0.33370109252362323" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 42%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2417385565434843" width="1.0000000000000009e-2" y="-0.32328345312785867" height="1.0000000000000009e-2"/></g><g fill="rgb(30%, 43%, 25%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.26549567558444404" width="1.0000000000000009e-2" y="-0.3111508504959184" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 44%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.28626935093120054" width="1.0000000000000009e-2" y="-0.2974946230189738" height="1.0000000000000009e-2"/></g><g fill="rgb(24%, 44%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.30373196931394336" width="1.0000000000000009e-2" y="-0.28253013756217094" height="1.0000000000000009e-2"/></g><g fill="rgb(21%, 44%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.31760813480911404" width="1.0000000000000009e-2" y="-0.2664933930005138" height="1.0000000000000009e-2"/></g><g fill="rgb(18%, 45%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3276790119976342" width="1.0000000000000009e-2" y="-0.24963729837562698" height="1.0000000000000009e-2"/></g><g fill="rgb(15%, 45%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.33378577713019064" width="1.0000000000000009e-2" y="-0.23222768436908747" height="1.0000000000000009e-2"/></g><g fill="rgb(12%, 45%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.33583212287263814" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(10%, 45%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.33378577713019064" width="1.0000000000000009e-2" y="-0.19685053761846805" height="1.0000000000000009e-2"/></g><g fill="rgb(8%, 44%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3276790119976342" width="1.0000000000000009e-2" y="-0.17944092361192843" height="1.0000000000000009e-2"/></g><g fill="rgb(8%, 44%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.31760813480911404" width="1.0000000000000009e-2" y="-0.16258482898704163" height="1.0000000000000009e-2"/></g><g fill="rgb(9%, 44%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.30373196931394325" width="1.0000000000000009e-2" y="-0.14654808442538458" height="1.0000000000000009e-2"/></g><g fill="rgb(11%, 43%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.28626935093120054" width="1.0000000000000009e-2" y="-0.13158359896858174" height="1.0000000000000009e-2"/></g><g fill="rgb(14%, 43%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.26549567558444404" width="1.0000000000000009e-2" y="-0.11792737149163701" height="1.0000000000000009e-2"/></g><g fill="rgb(16%, 42%, 53%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2417385565434843" width="1.0000000000000009e-2" y="-0.10579476885969685" height="1.0000000000000009e-2"/></g><g fill="rgb(19%, 41%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.21537265776741255" width="1.0000000000000009e-2" y="-9.537712946393234e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(22%, 41%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.18681378523015124" width="1.0000000000000009e-2" y="-8.683874570081074e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 40%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.15651232941185728" width="1.0000000000000009e-2" y="-8.031427298285992e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 39%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12494616237199696" width="1.0000000000000009e-2" y="-7.590660614237288e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 38%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.261310142150325e-2" width="1.0000000000000009e-2" y="-7.368525671843673e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 38%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.0023058246399745e-2" width="9.999999999999995e-3" y="-7.368525671843673e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 37%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.768999729590604e-2" width="1.0000000000000002e-2" y="-7.590660614237288e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 36%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.8761697439539987e-3" width="1.0000000000000002e-2" y="-8.031427298285992e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 35%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.417762556224802e-2" width="9.999999999999995e-3" y="-8.683874570081085e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 34%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.273649809950921e-2" width="1.0000000000000009e-2" y="-9.537712946393234e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 34%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.910239687558119e-2" width="1.0000000000000009e-2" y="-0.10579476885969685" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 33%, 51%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11285951591654098" width="1.0000000000000009e-2" y="-0.11792737149163701" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 33%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13363319126329742" width="1.0000000000000009e-2" y="-0.13158359896858174" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 32%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1510958096460402" width="1.0000000000000009e-2" y="-0.14654808442538458" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 32%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.16497197514121076" width="1.0000000000000009e-2" y="-0.16258482898704163" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 31%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.17504285232973116" width="1.0000000000000009e-2" y="-0.17944092361192854" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 31%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18114961746228742" width="1.0000000000000009e-2" y="-0.19685053761846816" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 30%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2156352185845708" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 30%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.21333307962431747" width="1.0000000000000009e-2" y="-0.23443875604100117" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 30%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.20646296885019133" width="1.0000000000000009e-2" y="-0.25402457179835825" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 30%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.19513323201310595" width="1.0000000000000009e-2" y="-0.27298767825135595" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 31%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.179522545831039" width="1.0000000000000009e-2" y="-0.29102901588322005" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 31%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.15987710015045353" width="1.0000000000000009e-2" y="-0.30786406202212335" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 32%, 22%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1365067153853523" width="1.0000000000000009e-2" y="-0.3232273179336861" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 32%, 19%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.10977995646427263" width="1.0000000000000009e-2" y="-0.3368764958946189" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 33%, 17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.011832034119193e-2" width="1.0000000000000009e-2" y="-0.34859634021485386" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 34%, 15%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.798958873677318e-2" width="9.999999999999995e-3" y="-0.3582020219483657" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 35%, 13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.3900450941192192e-2" width="1.0000000000000002e-2" y="-0.3655420537560603" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 36%, 11%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.161148697865056e-2" width="1.0000000000000002e-2" y="-0.3705006789516082" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 37%, 11%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.7986180547955894e-2" width="9.999999999999995e-3" y="-0.3729996970535363" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 38%, 11%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.464997911994733e-2" width="1.0000000000000009e-2" y="-0.3729996970535363" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 39%, 12%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1310246726892526" width="1.0000000000000009e-2" y="-0.3705006789516082" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 40%, 13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16653661060909547" width="1.0000000000000009e-2" y="-0.3655420537560603" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 41%, 15%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.20062574840467634" width="1.0000000000000009e-2" y="-0.3582020219483656" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 42%, 17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.23275448000909504" width="1.0000000000000009e-2" y="-0.34859634021485386" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 43%, 20%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2624161161321759" width="1.0000000000000009e-2" y="-0.3368764958946189" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 44%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.28914287505325564" width="1.0000000000000009e-2" y="-0.3232273179336861" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 44%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3125132598183566" width="1.0000000000000009e-2" y="-0.30786406202212335" height="1.0000000000000009e-2"/></g><g fill="rgb(22%, 45%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.33215870549894233" width="1.0000000000000009e-2" y="-0.29102901588322005" height="1.0000000000000009e-2"/></g><g fill="rgb(18%, 45%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3477693916810093" width="1.0000000000000009e-2" y="-0.27298767825135584" height="1.0000000000000009e-2"/></g><g fill="rgb(14%, 45%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3590991285180945" width="1.0000000000000009e-2" y="-0.25402457179835825" height="1.0000000000000009e-2"/></g><g fill="rgb(8%, 45%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3659692392922205" width="1.0000000000000009e-2" y="-0.23443875604100117" height="1.0000000000000009e-2"/></g><g fill="rgb(1%, 45%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3682713782524739" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(5%, 43%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2891428750532556" width="1.0000000000000009e-2" y="-0.10585090405386949" height="1.0000000000000009e-2"/></g><g fill="rgb(11%, 42%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2624161161321759" width="1.0000000000000009e-2" y="-9.220172609293664e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(15%, 42%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2327544800090951" width="1.0000000000000009e-2" y="-8.04818817727016e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(19%, 41%, 58%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.20062574840467612" width="1.0000000000000009e-2" y="-7.087620003918987e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(23%, 40%, 58%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16653661060909547" width="1.0000000000000009e-2" y="-6.353616823149522e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(26%, 39%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1310246726892526" width="1.0000000000000009e-2" y="-5.857754303594736e-2" height="9.999999999999995e-3"/></g><g fill="rgb(30%, 38%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.464997911994733e-2" width="1.0000000000000009e-2" y="-5.607852493401921e-2" height="9.999999999999995e-3"/></g><g fill="rgb(33%, 37%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.798618054795578e-2" width="9.999999999999995e-3" y="-5.607852493401921e-2" height="9.999999999999995e-3"/></g><g fill="rgb(35%, 36%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.1611486978650337e-2" width="1.0000000000000002e-2" y="-5.857754303594736e-2" height="9.999999999999995e-3"/></g><g fill="rgb(38%, 35%, 58%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.3900450941192192e-2" width="1.0000000000000002e-2" y="-6.353616823149522e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(40%, 35%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.798958873677318e-2" width="9.999999999999995e-3" y="-7.087620003918998e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(43%, 34%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.011832034119193e-2" width="1.0000000000000009e-2" y="-8.04818817727016e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 33%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.10977995646427263" width="1.0000000000000009e-2" y="-9.22017260929367e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 32%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13650671538535242" width="1.0000000000000009e-2" y="-0.10585090405386954" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 32%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.15987710015045353" width="1.0000000000000009e-2" y="-0.12121415996543217" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 31%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.179522545831039" width="1.0000000000000009e-2" y="-0.13804920610433535" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 31%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.19513323201310595" width="1.0000000000000009e-2" y="-0.15609054373619968" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 30%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.20646296885019144" width="1.0000000000000009e-2" y="-0.17505365018919739" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 30%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.21333307962431747" width="1.0000000000000009e-2" y="-0.19463946594655446" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 29%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.24807447396440652" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 29%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2455165417863473" width="1.0000000000000009e-2" y="-0.23664982771291487" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 29%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.23788308537065161" width="1.0000000000000009e-2" y="-0.2584118452210893" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 29%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.22529448888500136" width="1.0000000000000009e-2" y="-0.2794819635021979" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 29%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2079492820160379" width="1.0000000000000009e-2" y="-0.2995278942042692" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 30%, 22%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18612100903760964" width="1.0000000000000009e-2" y="-0.3182335010252728" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 31%, 19%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.16015391485416397" width="1.0000000000000009e-2" y="-0.33530378537145367" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 32%, 16%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13045751605296452" width="1.0000000000000009e-2" y="-0.350469538661379" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 33%, 13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="9.750014258287454e-2" width="1.0000000000000009e-2" y="-0.3634915879060846" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 34%, 10%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.180155191129811e-2" width="1.0000000000000002e-2" y="-0.3741645676099865" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 35%, 7%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.3924732138430497e-2" width="9.999999999999998e-3" y="-0.38232015850742496" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 36%, 4%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.5532976661394856e-2" width="1.0000000000000002e-2" y="-0.3878297420580338" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 37%, 3%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.594930284951193e-2" width="9.999999999999995e-3" y="-0.39060642883795393" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 38%, 3%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.668685681839129e-2" width="1.0000000000000009e-2" y="-0.39060642883795393" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 39%, 5%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1371031830065083" width="1.0000000000000009e-2" y="-0.3878297420580338" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 40%, 8%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1765608918063336" width="1.0000000000000009e-2" y="-0.38232015850742496" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 41%, 11%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.21443771157920127" width="1.0000000000000009e-2" y="-0.3741645676099865" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 42%, 14%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2501363022507777" width="1.0000000000000009e-2" y="-0.3634915879060846" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 43%, 17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2830936757208675" width="1.0000000000000009e-2" y="-0.350469538661379" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 44%, 20%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3127900745220672" width="1.0000000000000009e-2" y="-0.33530378537145356" height="1.0000000000000009e-2"/></g><g fill="rgb(24%, 45%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3387571687055127" width="1.0000000000000009e-2" y="-0.3182335010252728" height="1.0000000000000009e-2"/></g><g fill="rgb(19%, 45%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.36058544168394124" width="1.0000000000000009e-2" y="-0.2995278942042692" height="1.0000000000000009e-2"/></g><g fill="rgb(14%, 46%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3779306485529047" width="1.0000000000000009e-2" y="-0.2794819635021979" height="1.0000000000000009e-2"/></g><g fill="rgb(6%, 46%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.39051924503855484" width="1.0000000000000009e-2" y="-0.2584118452210893" height="1.0000000000000009e-2"/></g><g fill="rgb(0%, 43%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2830936757208675" width="1.0000000000000009e-2" y="-7.86086833261766e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(10%, 42%, 58%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.25013630225077776" width="1.0000000000000009e-2" y="-6.558663408147092e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(16%, 41%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2144377115792011" width="1.0000000000000009e-2" y="-5.4913654377569e-2" height="9.999999999999995e-3"/></g><g fill="rgb(21%, 40%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1765608918063336" width="1.0000000000000009e-2" y="-4.6758063480130445e-2" height="9.999999999999995e-3"/></g><g fill="rgb(25%, 39%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1371031830065083" width="1.0000000000000009e-2" y="-4.124847992952168e-2" height="9.999999999999998e-3"/></g><g fill="rgb(29%, 38%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.668685681839118e-2" width="1.0000000000000009e-2" y="-3.847179314960152e-2" height="9.999999999999998e-3"/></g><g fill="rgb(32%, 37%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.594930284951182e-2" width="9.999999999999995e-3" y="-3.847179314960152e-2" height="9.999999999999998e-3"/></g><g fill="rgb(35%, 36%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.5532976661394634e-2" width="1.0000000000000002e-2" y="-4.1248479929521735e-2" height="9.999999999999998e-3"/></g><g fill="rgb(38%, 35%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.3924732138430386e-2" width="9.999999999999998e-3" y="-4.6758063480130445e-2" height="9.999999999999995e-3"/></g><g fill="rgb(41%, 34%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.180155191129811e-2" width="1.0000000000000002e-2" y="-5.4913654377569114e-2" height="9.999999999999995e-3"/></g><g fill="rgb(43%, 33%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="9.750014258287454e-2" width="1.0000000000000009e-2" y="-6.558663408147092e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(46%, 32%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13045751605296452" width="1.0000000000000009e-2" y="-7.86086833261766e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 31%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.16015391485416397" width="1.0000000000000009e-2" y="-9.377443661610191e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 31%, 51%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18612100903760964" width="1.0000000000000009e-2" y="-0.11084472096228276" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 30%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2079492820160379" width="1.0000000000000009e-2" y="-0.12955032778328623" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 29%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.22529448888500148" width="1.0000000000000009e-2" y="-0.14959625848535762" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 29%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.23788308537065161" width="1.0000000000000009e-2" y="-0.17066637676646623" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 29%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2455165417863473" width="1.0000000000000009e-2" y="-0.19242839427464065" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 27%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.28051372934424235" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(59%, 27%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2777000039483768" width="1.0000000000000009e-2" y="-0.23886089938482868" height="1.0000000000000009e-2"/></g><g fill="rgb(59%, 27%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2693032018911121" width="1.0000000000000009e-2" y="-0.26279911864382044" height="1.0000000000000009e-2"/></g><g fill="rgb(60%, 28%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.25545574575689656" width="1.0000000000000009e-2" y="-0.28597624875303995" height="1.0000000000000009e-2"/></g><g fill="rgb(60%, 28%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.23637601820103704" width="1.0000000000000009e-2" y="-0.3080267725253184" height="1.0000000000000009e-2"/></g><g fill="rgb(59%, 29%, 21%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.21236491792476564" width="1.0000000000000009e-2" y="-0.3286029400284223" height="1.0000000000000009e-2"/></g><g fill="rgb(59%, 30%, 17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18380111432297552" width="1.0000000000000009e-2" y="-0.34738025280922125" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 31%, 13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.15113507564165596" width="1.0000000000000009e-2" y="-0.3640625814281391" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 32%, 8%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11488196482455704" width="1.0000000000000009e-2" y="-0.37838683559731523" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 33%, 2%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="7.561351508582304e-2" width="1.0000000000000009e-2" y="-0.3901271132716073" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 42%, 4%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.22824967475372626" width="1.0000000000000009e-2" y="-0.3901271132716073" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 43%, 9%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2675181244924602" width="1.0000000000000009e-2" y="-0.37838683559731523" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 44%, 14%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.30377123530955913" width="1.0000000000000009e-2" y="-0.3640625814281391" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 44%, 18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3364372739908788" width="1.0000000000000009e-2" y="-0.34738025280922125" height="1.0000000000000009e-2"/></g><g fill="rgb(22%, 45%, 22%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.36500107759266887" width="1.0000000000000009e-2" y="-0.3286029400284223" height="1.0000000000000009e-2"/></g><g fill="rgb(16%, 46%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.38901217786894027" width="1.0000000000000009e-2" y="-0.3080267725253184" height="1.0000000000000009e-2"/></g><g fill="rgb(7%, 46%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4080919054247999" width="1.0000000000000009e-2" y="-0.28597624875303995" height="1.0000000000000009e-2"/></g><g fill="rgb(0%, 42%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2675181244924603" width="1.0000000000000009e-2" y="-5.069138639024028e-2" height="9.999999999999995e-3"/></g><g fill="rgb(12%, 41%, 62%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.22824967475372604" width="1.0000000000000009e-2" y="-3.895110871594803e-2" height="9.999999999999998e-3"/></g><g fill="rgb(18%, 40%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.18658517300357197" width="1.0000000000000009e-2" y="-2.997995872876574e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(23%, 39%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14318169332376407" width="1.0000000000000009e-2" y="-2.3919416823096114e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(27%, 38%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.872373451683514e-2" width="1.0000000000000009e-2" y="-2.0865061365183842e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(31%, 36%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.391242515106786e-2" width="9.999999999999995e-3" y="-2.0865061365183842e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(35%, 35%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.45446634413882e-3" width="1.0000000000000002e-2" y="-2.3919416823096114e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(38%, 34%, 62%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.3949013335668694e-2" width="9.999999999999995e-3" y="-2.997995872876574e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(41%, 33%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="7.561351508582304e-2" width="1.0000000000000009e-2" y="-3.895110871594825e-2" height="9.999999999999998e-3"/></g><g fill="rgb(44%, 32%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11488196482455704" width="1.0000000000000009e-2" y="-5.069138639024028e-2" height="9.999999999999995e-3"/></g><g fill="rgb(46%, 31%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.15113507564165607" width="1.0000000000000009e-2" y="-6.50156405594165e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(49%, 30%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18380111432297552" width="1.0000000000000009e-2" y="-8.169796917833438e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 30%, 53%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.21236491792476564" width="1.0000000000000009e-2" y="-0.10047528195913313" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 29%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.23637601820103704" width="1.0000000000000009e-2" y="-0.12105144946223723" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 28%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.25545574575689656" width="1.0000000000000009e-2" y="-0.14310197323451557" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 28%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2693032018911121" width="1.0000000000000009e-2" y="-0.16627910334373508" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 27%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2777000039483768" width="1.0000000000000009e-2" y="-0.19021732260272695" height="1.0000000000000009e-2"/></g><g fill="rgb(60%, 26%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3129529847240783" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(60%, 26%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.30988346611040685" width="1.0000000000000009e-2" y="-0.24107197105674238" height="1.0000000000000009e-2"/></g><g fill="rgb(61%, 26%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3007233184115722" width="1.0000000000000009e-2" y="-0.2671863920665516" height="1.0000000000000009e-2"/></g><g fill="rgb(61%, 26%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.28561700262879197" width="1.0000000000000009e-2" y="-0.2924705340038819" height="1.0000000000000009e-2"/></g><g fill="rgb(61%, 27%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.26480275438603607" width="1.0000000000000009e-2" y="-0.3165256508463675" height="1.0000000000000009e-2"/></g><g fill="rgb(61%, 27%, 18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.23860882681192186" width="1.0000000000000009e-2" y="-0.33897237903157185" height="1.0000000000000009e-2"/></g><g fill="rgb(60%, 28%, 14%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.20744831379178708" width="1.0000000000000009e-2" y="-0.3594567202469888" height="1.0000000000000009e-2"/></g><g fill="rgb(59%, 29%, 8%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.17181263523034762" width="1.0000000000000009e-2" y="-0.3776556241948992" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 31%, 0%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13226378706623954" width="1.0000000000000009e-2" y="-0.39328208328854597" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 43%, 2%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2848999467341429" width="1.0000000000000009e-2" y="-0.39328208328854597" height="1.0000000000000009e-2"/></g><g fill="rgb(30%, 44%, 10%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3244487948982506" width="1.0000000000000009e-2" y="-0.3776556241948992" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 45%, 15%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.36008447345969036" width="1.0000000000000009e-2" y="-0.3594567202469887" height="1.0000000000000009e-2"/></g><g fill="rgb(19%, 46%, 20%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.391244986479825" width="1.0000000000000009e-2" y="-0.33897237903157185" height="1.0000000000000009e-2"/></g><g fill="rgb(11%, 46%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4174389140539392" width="1.0000000000000009e-2" y="-0.3165256508463675" height="1.0000000000000009e-2"/></g><g fill="rgb(6%, 41%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.24206163792825097" width="1.0000000000000009e-2" y="-2.298856305432728e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(15%, 40%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1966094542008101" width="1.0000000000000009e-2" y="-1.3201853977400976e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(21%, 38%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14926020364101972" width="1.0000000000000009e-2" y="-6.59035371667049e-3" height="1.0e-2"/></g><g fill="rgb(26%, 37%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10076061221527899" width="1.0000000000000009e-2" y="-3.258329580766324e-3" height="1.0e-2"/></g><g fill="rgb(31%, 36%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.18755474526239e-2" width="9.999999999999995e-3" y="-3.258329580766324e-3" height="1.0e-2"/></g><g fill="rgb(35%, 35%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.375956026883227e-3" width="1.0e-2" y="-6.590353716670545e-3" height="1.0e-2"/></g><g fill="rgb(38%, 34%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.397329453290678e-2" width="9.999999999999995e-3" y="-1.3201853977400976e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(41%, 32%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.942547826034808e-2" width="1.0000000000000009e-2" y="-2.298856305432728e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(44%, 31%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13226378706623954" width="1.0000000000000009e-2" y="-3.579613869900949e-2" height="9.999999999999998e-3"/></g><g fill="rgb(47%, 30%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.17181263523034762" width="1.0000000000000009e-2" y="-5.142259779265639e-2" height="9.999999999999995e-3"/></g><g fill="rgb(49%, 29%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2074483137917872" width="1.0000000000000009e-2" y="-6.96215017405667e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(52%, 28%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.23860882681192164" width="1.0000000000000009e-2" y="-9.010584295598373e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 28%, 51%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.26480275438603607" width="1.0000000000000009e-2" y="-0.112552571141188" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 27%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2856170026287921" width="1.0000000000000009e-2" y="-0.1366076879836735" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 26%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3007233184115722" width="1.0000000000000009e-2" y="-0.16189182992100382" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 26%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.30988346611040685" width="1.0000000000000009e-2" y="-0.18800625093081325" height="1.0000000000000009e-2"/></g><g fill="rgb(61%, 24%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.345392240103914" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(62%, 24%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3420669282724368" width="1.0000000000000009e-2" y="-0.24328304272865608" height="1.0000000000000009e-2"/></g><g fill="rgb(62%, 24%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3321434349320327" width="1.0000000000000009e-2" y="-0.27157366548928275" height="1.0000000000000009e-2"/></g><g fill="rgb(63%, 25%, 25%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3157782595006874" width="1.0000000000000009e-2" y="-0.29896481925472396" height="1.0000000000000009e-2"/></g><g fill="rgb(63%, 25%, 21%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.293229490571035" width="1.0000000000000009e-2" y="-0.32502452916741653" height="1.0000000000000009e-2"/></g><g fill="rgb(62%, 26%, 16%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.26485273569907786" width="1.0000000000000009e-2" y="-0.3493418180347214" height="1.0000000000000009e-2"/></g><g fill="rgb(62%, 27%, 10%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.23109551326059874" width="1.0000000000000009e-2" y="-0.3715331876847565" height="1.0000000000000009e-2"/></g><g fill="rgb(61%, 28%, 1%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.19249019481903906" width="1.0000000000000009e-2" y="-0.3912486669616593" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 44%, 3%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3451263544869423" width="1.0000000000000009e-2" y="-0.3912486669616593" height="1.0000000000000009e-2"/></g><g fill="rgb(24%, 45%, 12%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.38373167292850185" width="1.0000000000000009e-2" y="-0.3715331876847564" height="1.0000000000000009e-2"/></g><g fill="rgb(17%, 46%, 18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4174888953669811" width="1.0000000000000009e-2" y="-0.3493418180347214" height="1.0000000000000009e-2"/></g><g fill="rgb(4%, 47%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4458656502389382" width="1.0000000000000009e-2" y="-0.32502452916741653" height="1.0000000000000009e-2"/></g><g fill="rgb(12%, 40%, 67%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.20663373539804836" width="1.0000000000000009e-2" y="3.5762507739636783e-3" height="1.0000000000000002e-2"/></g><g fill="rgb(20%, 38%, 67%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.15533871395827548" width="1.0000000000000009e-2" y="1.0738709389755133e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(25%, 37%, 68%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10279748991372295" width="1.0000000000000009e-2" y="1.434840220365136e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(30%, 36%, 68%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.9838669754179825e-2" width="9.999999999999995e-3" y="1.434840220365136e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(34%, 34%, 67%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.7025542903723653e-3" width="1.0000000000000002e-2" y="1.0738709389755133e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(38%, 33%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.399757573014508e-2" width="1.0000000000000002e-2" y="3.576250773963734e-3" height="1.0000000000000002e-2"/></g><g fill="rgb(42%, 32%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1032374414348729" width="1.0000000000000009e-2" y="-7.026017392706414e-3" height="1.0e-2"/></g><g fill="rgb(45%, 30%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.14964560930792214" width="1.0000000000000009e-2" y="-2.0900891007778918e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(48%, 29%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.19249019481903928" width="1.0000000000000009e-2" y="-3.782955502589624e-2" height="9.999999999999998e-3"/></g><g fill="rgb(50%, 28%, 58%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.23109551326059874" width="1.0000000000000009e-2" y="-5.754503430279911e-2" height="9.999999999999995e-3"/></g><g fill="rgb(53%, 27%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.26485273569907786" width="1.0000000000000009e-2" y="-7.973640395283416e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 26%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.293229490571035" width="1.0000000000000009e-2" y="-0.10405369282013899" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 26%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3157782595006874" width="1.0000000000000009e-2" y="-0.13011340273283145" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 25%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3321434349320327" width="1.0000000000000009e-2" y="-0.15750455649827277" height="1.0000000000000009e-2"/></g><g fill="rgb(60%, 24%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3420669282724368" width="1.0000000000000009e-2" y="-0.18579517925889955" height="1.0000000000000009e-2"/></g><g fill="rgb(62%, 22%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.37783149548374995" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(63%, 22%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.37425039043446695" width="1.0000000000000009e-2" y="-0.24549411440056967" height="1.0000000000000009e-2"/></g><g fill="rgb(64%, 22%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.363563551452493" width="1.0000000000000009e-2" y="-0.2759609389120139" height="1.0000000000000009e-2"/></g><g fill="rgb(64%, 23%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3459395163725826" width="1.0000000000000009e-2" y="-0.3054591045055661" height="1.0000000000000009e-2"/></g><g fill="rgb(64%, 23%, 19%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3216562267560341" width="1.0000000000000009e-2" y="-0.3335234074884659" height="1.0000000000000009e-2"/></g><g fill="rgb(64%, 24%, 14%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2910966445862342" width="1.0000000000000009e-2" y="-0.3597112570378709" height="1.0000000000000009e-2"/></g><g fill="rgb(63%, 26%, 6%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2547427127294104" width="1.0000000000000009e-2" y="-0.3836096551225241" height="1.0000000000000009e-2"/></g><g fill="rgb(22%, 46%, 8%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4073788723973135" width="1.0000000000000009e-2" y="-0.383609655122524" height="1.0000000000000009e-2"/></g><g fill="rgb(13%, 46%, 15%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4437328042541372" width="1.0000000000000009e-2" y="-0.3597112570378709" height="1.0000000000000009e-2"/></g><g fill="rgb(7%, 39%, 69%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.21665801659528666" width="1.0000000000000009e-2" y="2.0354355525328386e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(18%, 38%, 70%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16141722427553107" width="1.0000000000000009e-2" y="2.8067772496180702e-2" height="9.999999999999998e-3"/></g><g fill="rgb(24%, 36%, 70%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10483436761216702" width="1.0000000000000009e-2" y="3.195513398806905e-2" height="9.999999999999995e-3"/></g><g fill="rgb(30%, 35%, 70%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.780179205573586e-2" width="9.999999999999995e-3" y="3.195513398806905e-2" height="9.999999999999995e-3"/></g><g fill="rgb(34%, 34%, 69%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.781064607628068e-3" width="1.0000000000000002e-2" y="2.8067772496180702e-2" height="9.999999999999998e-3"/></g><g fill="rgb(38%, 32%, 68%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.402185692738327e-2" width="1.0000000000000009e-2" y="2.035435552532844e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(42%, 31%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11704940460939817" width="1.0000000000000009e-2" y="8.936528268914504e-3" height="1.0000000000000002e-2"/></g><g fill="rgb(45%, 30%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.16702743154960487" width="1.0000000000000009e-2" y="-6.005643316548177e-3" height="1.0e-2"/></g><g fill="rgb(48%, 28%, 62%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.21316775440773073" width="1.0000000000000009e-2" y="-2.4236512259136086e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(51%, 27%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2547427127294104" width="1.0000000000000009e-2" y="-4.546856686503158e-2" height="9.999999999999995e-3"/></g><g fill="rgb(54%, 26%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2910966445862342" width="1.0000000000000009e-2" y="-6.936696494968458e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(56%, 25%, 53%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3216562267560341" width="1.0000000000000009e-2" y="-9.555481449908965e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 24%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3459395163725826" width="1.0000000000000009e-2" y="-0.1236191174819895" height="1.0000000000000009e-2"/></g><g fill="rgb(60%, 23%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3635635514524931" width="1.0000000000000009e-2" y="-0.15311728307554162" height="1.0000000000000009e-2"/></g><g fill="rgb(61%, 23%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.37425039043446695" width="1.0000000000000009e-2" y="-0.18358410758698596" height="1.0000000000000009e-2"/></g><g fill="rgb(64%, 21%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4102707508635858" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(65%, 20%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.40643385259649667" width="1.0000000000000009e-2" y="-0.24770518607248349" height="1.0000000000000009e-2"/></g><g fill="rgb(65%, 20%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.39498366797295337" width="1.0000000000000009e-2" y="-0.28034821233474516" height="1.0000000000000009e-2"/></g><g fill="rgb(66%, 21%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3761007732444779" width="1.0000000000000009e-2" y="-0.3119533897564081" height="1.0000000000000009e-2"/></g><g fill="rgb(66%, 22%, 17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3500829629410329" width="1.0000000000000009e-2" y="-0.342022285809515" height="1.0000000000000009e-2"/></g><g fill="rgb(65%, 23%, 11%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.31734055347338996" width="1.0000000000000009e-2" y="-0.37008069604102034" height="1.0000000000000009e-2"/></g><g fill="rgb(20%, 46%, 1%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.43102607186612496" width="1.0000000000000009e-2" y="-0.39568612256029156" height="1.0000000000000009e-2"/></g><g fill="rgb(9%, 47%, 13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4699767131412933" width="1.0000000000000009e-2" y="-0.37008069604102034" height="1.0000000000000009e-2"/></g><g fill="rgb(16%, 38%, 72%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16749573459278672" width="1.0000000000000009e-2" y="4.539683560260633e-2" height="9.999999999999995e-3"/></g><g fill="rgb(23%, 36%, 72%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1068712453106111" width="1.0000000000000009e-2" y="4.9561865772486564e-2" height="9.999999999999995e-3"/></g><g fill="rgb(29%, 34%, 72%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.57649143572919e-2" width="9.999999999999995e-3" y="4.9561865772486564e-2" height="9.999999999999995e-3"/></g><g fill="rgb(34%, 33%, 71%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.485957492488377e-2" width="1.0000000000000002e-2" y="4.539683560260622e-2" height="9.999999999999995e-3"/></g><g fill="rgb(38%, 31%, 70%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="7.404613812462146e-2" width="1.0000000000000009e-2" y="3.7132460276693154e-2" height="9.999999999999995e-3"/></g><g fill="rgb(42%, 30%, 68%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13086136778392288" width="1.0000000000000009e-2" y="2.4899073930535313e-2" height="9.999999999999998e-3"/></g><g fill="rgb(46%, 29%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18440925379128736" width="1.0000000000000009e-2" y="8.88960437468245e-3" height="1.0000000000000002e-2"/></g><g fill="rgb(49%, 27%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2338453139964224" width="1.0000000000000009e-2" y="-1.0643469492376097e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(52%, 26%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.27838991219822173" width="1.0000000000000009e-2" y="-3.339209942726406e-2" height="9.999999999999998e-3"/></g><g fill="rgb(55%, 25%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.31734055347338996" width="1.0000000000000009e-2" y="-5.899752594653523e-2" height="9.999999999999995e-3"/></g><g fill="rgb(57%, 24%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3500829629410329" width="1.0000000000000009e-2" y="-8.705593617804058e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(59%, 23%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3761007732444779" width="1.0000000000000009e-2" y="-0.11712483223114756" height="1.0000000000000009e-2"/></g><g fill="rgb(61%, 22%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.39498366797295337" width="1.0000000000000009e-2" y="-0.14873000965281047" height="1.0000000000000009e-2"/></g><g fill="rgb(63%, 21%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.40643385259649667" width="1.0000000000000009e-2" y="-0.18137303591507214" height="1.0000000000000009e-2"/></g><g fill="rgb(65%, 18%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4427100062434214" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(66%, 18%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4386173147585263" width="1.0000000000000009e-2" y="-0.24991625774439719" height="1.0000000000000009e-2"/></g><g fill="rgb(67%, 18%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.42640378449341376" width="1.0000000000000009e-2" y="-0.2847354857574762" height="1.0000000000000009e-2"/></g><g fill="rgb(67%, 19%, 22%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4062620301163732" width="1.0000000000000009e-2" y="-0.31844767500725013" height="1.0000000000000009e-2"/></g><g fill="rgb(67%, 20%, 16%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.37850969912603194" width="1.0000000000000009e-2" y="-0.3505211641305641" height="1.0000000000000009e-2"/></g><g fill="rgb(67%, 21%, 7%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3435844623605463" width="1.0000000000000009e-2" y="-0.3804501350441698" height="1.0000000000000009e-2"/></g><g fill="rgb(2%, 47%, 9%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4962206220284494" width="1.0000000000000009e-2" y="-0.3804501350441699" height="1.0000000000000009e-2"/></g><g fill="rgb(13%, 37%, 74%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17357424491004242" width="1.0000000000000009e-2" y="6.272589870903189e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(22%, 35%, 74%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10890812300905495" width="1.0000000000000009e-2" y="6.716859755690419e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 34%, 74%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.372803665884805e-2" width="9.999999999999995e-3" y="6.716859755690419e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 32%, 73%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.0938085242139585e-2" width="1.0000000000000002e-2" y="6.272589870903184e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 30%, 72%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.407041932185966e-2" width="1.0000000000000009e-2" y="5.391056502805786e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(42%, 29%, 70%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.14467333095844792" width="1.0000000000000009e-2" y="4.0861619592156236e-2" height="9.999999999999995e-3"/></g><g fill="rgb(46%, 27%, 68%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.20179107603296997" width="1.0000000000000009e-2" y="2.378485206591319e-2" height="9.999999999999998e-3"/></g><g fill="rgb(50%, 26%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.25452287358511416" width="1.0000000000000009e-2" y="2.949573274384114e-3" height="1.0000000000000002e-2"/></g><g fill="rgb(53%, 25%, 62%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3020371116670334" width="1.0000000000000009e-2" y="-2.1315631989496316e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(55%, 23%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3435844623605463" width="1.0000000000000009e-2" y="-4.8628086943385655e-2" height="9.999999999999995e-3"/></g><g fill="rgb(58%, 22%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.37850969912603194" width="1.0000000000000009e-2" y="-7.855705785699135e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(60%, 21%, 51%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4062620301163732" width="1.0000000000000009e-2" y="-0.1106305469803055" height="1.0000000000000009e-2"/></g><g fill="rgb(62%, 20%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.42640378449341376" width="1.0000000000000009e-2" y="-0.14434273623007932" height="1.0000000000000009e-2"/></g><g fill="rgb(64%, 19%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4386173147585263" width="1.0000000000000009e-2" y="-0.17916196424315844" height="1.0000000000000009e-2"/></g><g fill="rgb(67%, 16%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.47514926162325744" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(68%, 16%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.47080077692055633" width="1.0000000000000009e-2" y="-0.2521273294163109" height="1.0000000000000009e-2"/></g><g fill="rgb(68%, 16%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.45782390101387416" width="1.0000000000000009e-2" y="-0.28912275918020747" height="1.0000000000000009e-2"/></g><g fill="rgb(69%, 16%, 21%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4364232869882686" width="1.0000000000000009e-2" y="-0.3249419602580922" height="1.0000000000000009e-2"/></g><g fill="rgb(69%, 17%, 13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.40693643531103085" width="1.0000000000000009e-2" y="-0.35902004245161323" height="1.0000000000000009e-2"/></g><g fill="rgb(68%, 19%, 1%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3698283712477023" width="1.0000000000000009e-2" y="-0.3908195740473194" height="1.0000000000000009e-2"/></g><g fill="rgb(11%, 37%, 76%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17965275522729812" width="1.0000000000000009e-2" y="8.005496181545751e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(21%, 35%, 76%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11094500070749891" width="1.0000000000000009e-2" y="8.477532934132187e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 33%, 76%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.169115896040398e-2" width="9.999999999999995e-3" y="8.477532934132187e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 31%, 75%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.7016595559395177e-2" width="9.999999999999998e-3" y="8.005496181545746e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 30%, 74%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="9.409470051909774e-2" width="1.0000000000000009e-2" y="7.068866977942262e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 28%, 72%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.15848529413297285" width="1.0000000000000009e-2" y="5.68241652537771e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(47%, 26%, 70%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2191728982746527" width="1.0000000000000009e-2" y="3.868009975714388e-2" height="9.999999999999995e-3"/></g><g fill="rgb(50%, 25%, 67%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2752004331738057" width="1.0000000000000009e-2" y="1.6542616041144157e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(53%, 23%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.32568431113584506" width="1.0000000000000009e-2" y="-9.239164551728792e-3" height="1.0000000000000002e-2"/></g><g fill="rgb(56%, 22%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3698283712477023" width="1.0000000000000009e-2" y="-3.8258647940236194e-2" height="9.999999999999998e-3"/></g><g fill="rgb(59%, 20%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.40693643531103085" width="1.0000000000000009e-2" y="-7.005817953594223e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(61%, 19%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4364232869882688" width="1.0000000000000009e-2" y="-0.1041362617294635" height="1.0000000000000009e-2"/></g><g fill="rgb(63%, 18%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.45782390101387416" width="1.0000000000000009e-2" y="-0.13995546280734816" height="1.0000000000000009e-2"/></g><g fill="rgb(65%, 17%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.47080077692055633" width="1.0000000000000009e-2" y="-0.17695089257124474" height="1.0000000000000009e-2"/></g><g fill="rgb(68%, 13%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.507588517003093" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(69%, 12%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5029842390825862" width="1.0000000000000009e-2" y="-0.2543384010882247" height="1.0000000000000009e-2"/></g><g fill="rgb(70%, 12%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4892440175343341" width="1.0000000000000009e-2" y="-0.2935100326029385" height="1.0000000000000009e-2"/></g><g fill="rgb(70%, 13%, 19%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4665845438601638" width="1.0000000000000009e-2" y="-0.331436245508934" height="1.0000000000000009e-2"/></g><g fill="rgb(70%, 14%, 11%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.43536317149602943" width="1.0000000000000009e-2" y="-0.36751892077266235" height="1.0000000000000009e-2"/></g><g fill="rgb(8%, 36%, 78%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.18573126554455383" width="1.0000000000000009e-2" y="9.738402492188303e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(20%, 34%, 78%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11298187840594287" width="1.0000000000000009e-2" y="0.10238206112573944" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 32%, 78%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.9654281261960016e-2" width="9.999999999999998e-3" y="0.10238206112573944" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 30%, 77%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.309510587665077e-2" width="9.999999999999995e-3" y="9.738402492188303e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 29%, 76%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.10411898171633593" width="1.0000000000000009e-2" y="8.746677453078733e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 27%, 74%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1722972573074978" width="1.0000000000000009e-2" y="7.27867109153979e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 25%, 71%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2365547205163352" width="1.0000000000000009e-2" y="5.357534744837456e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(51%, 23%, 68%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2958779927624974" width="1.0000000000000009e-2" y="3.0135658807904257e-2" height="9.999999999999998e-3"/></g><g fill="rgb(54%, 22%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3493315106046566" width="1.0000000000000009e-2" y="2.8373028860387327e-3" height="1.0000000000000002e-2"/></g><g fill="rgb(57%, 20%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3960722801348583" width="1.0000000000000009e-2" y="-2.7889208937086626e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(60%, 18%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.43536317149602943" width="1.0000000000000009e-2" y="-6.155930121489316e-2" height="9.999999999999995e-3"/></g><g fill="rgb(62%, 17%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4665845438601638" width="1.0000000000000009e-2" y="-9.76419764786215e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(65%, 15%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.48924401753433455" width="1.0000000000000009e-2" y="-0.1355681893846169" height="1.0000000000000009e-2"/></g><g fill="rgb(66%, 14%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5029842390825862" width="1.0000000000000009e-2" y="-0.17473982089933104" height="1.0000000000000009e-2"/></g><g fill="rgb(69%, 9%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5400277723829289" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(70%, 8%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.535167701244616" width="1.0000000000000009e-2" y="-0.2565494727601383" height="1.0000000000000009e-2"/></g><g fill="rgb(71%, 8%, 25%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5206641340547945" width="1.0000000000000009e-2" y="-0.2978973060256698" height="1.0000000000000009e-2"/></g><g fill="rgb(72%, 9%, 18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4967458007320592" width="1.0000000000000009e-2" y="-0.3379305307597761" height="1.0000000000000009e-2"/></g><g fill="rgb(72%, 10%, 8%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4637899076810287" width="1.0000000000000009e-2" y="-0.37601779909371147" height="1.0000000000000009e-2"/></g><g fill="rgb(3%, 36%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19180977586180942" width="1.0000000000000009e-2" y="0.11471308802830871" height="1.0000000000000009e-2"/></g><g fill="rgb(19%, 34%, 81%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11501875610438672" width="1.0000000000000009e-2" y="0.11998879291015702" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 32%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.7617403563516054e-2" width="9.999999999999998e-3" y="0.11998879291015702" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 29%, 79%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.917361619390659e-2" width="9.999999999999995e-3" y="0.11471308802830865" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 27%, 78%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11414326291357435" width="1.0000000000000009e-2" y="0.10424487928215209" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 25%, 76%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18610922048202283" width="1.0000000000000009e-2" y="8.874925657701882e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 24%, 73%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2539365427580177" width="1.0000000000000009e-2" y="6.847059513960518e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 22%, 70%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.31655555235118893" width="1.0000000000000009e-2" y="4.3728701574664415e-2" height="9.999999999999995e-3"/></g><g fill="rgb(55%, 20%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.37297871007346817" width="1.0000000000000009e-2" y="1.4913770323806367e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(58%, 18%, 62%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.42231618902201473" width="1.0000000000000009e-2" y="-1.751976993393711e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(61%, 16%, 58%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4637899076810287" width="1.0000000000000009e-2" y="-5.306042289384393e-2" height="9.999999999999995e-3"/></g><g fill="rgb(64%, 14%, 53%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4967458007320592" width="1.0000000000000009e-2" y="-9.114769122777938e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(66%, 12%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5206641340547947" width="1.0000000000000009e-2" y="-0.13118091596188586" height="1.0000000000000009e-2"/></g><g fill="rgb(68%, 11%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.535167701244616" width="1.0000000000000009e-2" y="-0.17252874922741734" height="1.0000000000000009e-2"/></g><g fill="rgb(70%, 2%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5724670277627649" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(72%, 0%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.567351163406646" width="1.0000000000000009e-2" y="-0.258760544432052" height="1.0000000000000009e-2"/></g><g fill="rgb(73%, 1%, 17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5269070576039544" width="1.0000000000000009e-2" y="-0.34442481601061814" height="1.0000000000000009e-2"/></g><g fill="rgb(73%, 5%, 4%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4922166438660277" width="1.0000000000000009e-2" y="-0.3845166774147606" height="1.0000000000000009e-2"/></g><g fill="rgb(18%, 33%, 83%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1170556338028308" width="1.0000000000000009e-2" y="0.1375955246945747" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 31%, 82%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.558052586507209e-2" width="9.999999999999998e-3" y="0.1375955246945747" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 28%, 81%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.525212651116229e-2" width="9.999999999999995e-3" y="0.13204215113473433" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 26%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.12416754411081243" width="1.0000000000000009e-2" y="0.1210229840335168" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 24%, 78%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.19992118365654776" width="1.0000000000000009e-2" y="0.10471180223863968" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 22%, 75%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2713183649997005" width="1.0000000000000009e-2" y="8.336584283083592e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 20%, 71%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3372331119398805" width="1.0000000000000009e-2" y="5.7321744341424515e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(56%, 18%, 68%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.39662590954227983" width="1.0000000000000009e-2" y="2.699023776157389e-2" height="9.999999999999998e-3"/></g><g fill="rgb(59%, 16%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.44856009790917073" width="1.0000000000000009e-2" y="-7.150330930787592e-3" height="1.0e-2"/></g><g fill="rgb(62%, 13%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4922166438660277" width="1.0000000000000009e-2" y="-4.456154457279481e-2" height="9.999999999999995e-3"/></g><g fill="rgb(65%, 11%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5269070576039544" width="1.0000000000000009e-2" y="-8.465340597693732e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(67%, 8%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5520842505752549" width="1.0000000000000009e-2" y="-0.1267936425391547" height="1.0000000000000009e-2"/></g><g fill="rgb(69%, 6%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.567351163406646" width="1.0000000000000009e-2" y="-0.17031767755550375" height="1.0000000000000009e-2"/></g><g fill="rgb(17%, 32%, 85%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11909251150127487" width="1.0000000000000009e-2" y="0.15520225647899227" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 30%, 84%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.354364816662802e-2" width="9.999999999999998e-3" y="0.15520225647899227" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 27%, 83%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.133063682841799e-2" width="9.999999999999995e-3" y="0.14937121424115982" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 25%, 82%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13419182530805063" width="1.0000000000000009e-2" y="0.1378010887848815" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 22%, 79%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2137331468310727" width="1.0000000000000009e-2" y="0.1206743479002606" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 20%, 76%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2887001872413828" width="1.0000000000000009e-2" y="9.826109052206655e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 18%, 73%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3579106715285719" width="1.0000000000000009e-2" y="7.091478710818455e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 15%, 69%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4202731090110913" width="1.0000000000000009e-2" y="3.9066705199341474e-2" height="9.999999999999995e-3"/></g><g fill="rgb(60%, 13%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.47480400679632695" width="1.0000000000000009e-2" y="3.219108072361869e-3" height="1.0000000000000002e-2"/></g><g fill="rgb(63%, 10%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5206433800510267" width="1.0000000000000009e-2" y="-3.6062666251745694e-2" height="9.999999999999998e-3"/></g><g fill="rgb(66%, 7%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5570683144758498" width="1.0000000000000009e-2" y="-7.815912072609538e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(68%, 2%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5835043670957153" width="1.0000000000000009e-2" y="-0.12240636911642366" height="1.0000000000000009e-2"/></g><g fill="rgb(16%, 31%, 87%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12112938919971877" width="1.0000000000000009e-2" y="0.17280898826340993" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 29%, 87%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.150677046818428e-2" width="9.999999999999998e-3" y="0.17280898826340993" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 26%, 86%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.7409147145673696e-2" width="1.0000000000000002e-2" y="0.16670027734758547" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 23%, 84%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.14421610650528882" width="1.0000000000000009e-2" y="0.15457919353624622" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 21%, 81%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.22754511000559763" width="1.0000000000000009e-2" y="0.13663689356188147" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 18%, 78%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3060820094830655" width="1.0000000000000009e-2" y="0.11315633821329724" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 16%, 75%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3785882311172636" width="1.0000000000000009e-2" y="8.450782987494476e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 13%, 70%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4439203084799027" width="1.0000000000000009e-2" y="5.1143172637109054e-2" height="9.999999999999995e-3"/></g><g fill="rgb(61%, 10%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.501047915683483" width="1.0000000000000009e-2" y="1.358854707551144e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(64%, 5%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5490701162360255" width="1.0000000000000009e-2" y="-2.7563787930696523e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(16%, 30%, 89%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12316626689816268" width="1.0000000000000009e-2" y="0.19041572004782759" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 27%, 89%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.94698927697401e-2" width="1.0000000000000002e-2" y="0.19041572004782759" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 24%, 88%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.348765746292917e-2" width="1.0000000000000009e-2" y="0.18402934045401115" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 22%, 86%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.15424038770252702" width="1.0000000000000009e-2" y="0.17135729828761098" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 19%, 83%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.24135707318012267" width="1.0000000000000009e-2" y="0.1525994392235023" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 16%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.32346383172474813" width="1.0000000000000009e-2" y="0.12805158590452792" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 13%, 76%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.399265790705955" width="1.0000000000000009e-2" y="9.810087264170486e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 9%, 72%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.46756750794871416" width="1.0000000000000009e-2" y="6.321964007487668e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(62%, 4%, 67%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.527291824570639" width="1.0000000000000009e-2" y="2.3957986078660846e-2" height="9.999999999999998e-3"/></g><g fill="rgb(15%, 29%, 91%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12520314459660664" width="1.0000000000000009e-2" y="0.20802245183224516" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 26%, 91%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.7433015071296137e-2" width="1.0000000000000002e-2" y="0.20802245183224516" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 23%, 90%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.956616778018487e-2" width="1.0000000000000009e-2" y="0.2013584035604367" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 20%, 88%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1642646688997652" width="1.0000000000000009e-2" y="0.1881354030389757" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 16%, 85%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2551690363546476" width="1.0000000000000009e-2" y="0.1685619848851231" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 13%, 82%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.34084565396643074" width="1.0000000000000009e-2" y="0.14294683359575855" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 9%, 78%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4199433502946469" width="1.0000000000000009e-2" y="0.11169391540846496" height="1.0000000000000009e-2"/></g><g fill="rgb(59%, 3%, 73%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4912147074175258" width="1.0000000000000009e-2" y="7.52961075126442e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(14%, 28%, 93%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12724002229505055" width="1.0000000000000009e-2" y="0.2256291836166628" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 24%, 93%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.5396137372852175e-2" width="1.0000000000000002e-2" y="0.2256291836166628" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 21%, 92%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="7.56446780974408e-2" width="1.0000000000000009e-2" y="0.21868746666686226" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 17%, 90%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1742889500970034" width="1.0000000000000009e-2" y="0.20491350779034043" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 14%, 87%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.26898099952917254" width="1.0000000000000009e-2" y="0.18452453054674406" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 9%, 83%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.35822747620811324" width="1.0000000000000009e-2" y="0.15784208128698926" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 3%, 79%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.44062090988333835" width="1.0000000000000009e-2" y="0.125286958175225" height="1.0000000000000009e-2"/></g><g fill="rgb(13%, 27%, 96%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12927689999349457" width="1.0000000000000009e-2" y="0.2432359154010805" height="9.999999999999981e-3"/></g><g fill="rgb(26%, 23%, 95%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.3359259674408214e-2" width="1.0000000000000002e-2" y="0.2432359154010805" height="9.999999999999981e-3"/></g><g fill="rgb(34%, 19%, 94%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.172318841469628e-2" width="1.0000000000000009e-2" y="0.2360165297732879" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 15%, 92%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1843132312942416" width="1.0000000000000009e-2" y="0.22169161254170514" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 10%, 89%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.28279296270369747" width="1.0000000000000009e-2" y="0.20048707620836492" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 3%, 85%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.37560929844979607" width="1.0000000000000009e-2" y="0.17273732897822" height="1.0000000000000009e-2"/></g><g fill="rgb(13%, 25%, 98%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13131377769193847" width="1.0000000000000009e-2" y="0.2608426471854981" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 21%, 97%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.1322381975964252e-2" width="1.0000000000000002e-2" y="0.2608426471854981" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 16%, 96%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.78016987319522e-2" width="1.0000000000000009e-2" y="0.2533455928797135" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 11%, 94%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.19433751249147968" width="1.0000000000000009e-2" y="0.2384697172930699" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 4%, 91%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2966049258782224" width="1.0000000000000009e-2" y="0.21644962186998581" height="1.0000000000000009e-2"/></g><g fill="rgb(12%, 23%, 100%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13335065539038243" width="1.0000000000000009e-2" y="0.27844937896991573" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 19%, 99%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.92855042775204e-2" width="1.0000000000000002e-2" y="0.27844937896991573" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 13%, 98%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="9.388020904920769e-2" width="1.0000000000000009e-2" y="0.27067465598613916" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 6%, 96%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2043617936887182" width="1.0000000000000009e-2" y="0.25524782204443464" height="1.0000000000000009e-2"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5579069105314889" width="1.2975702151934327" y="-0.47416226109936654" height="0.7938694503167667"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.5838583148353576, 0.31970718921740016)"><polyline points="-0.5838583148353576,0.33470718921740017
+-0.5838583148353576,0.30470718921740014"/></g><g transform="rotate(-90.0, -0.5838583148353576, 0.23149947251553718)"><polyline points="-0.5838583148353576,0.24649947251553717
+-0.5838583148353576,0.2164994725155372"/></g><g transform="rotate(-90.0, -0.5838583148353576, 0.14329175581367426)"><polyline points="-0.5838583148353576,0.15829175581367427
+-0.5838583148353576,0.12829175581367425"/></g><g transform="rotate(-90.0, -0.5838583148353576, 5.5084039111811256e-2)"><polyline points="-0.5838583148353576,7.008403911181126e-2
+-0.5838583148353576,4.008403911181126e-2"/></g><g transform="rotate(-90.0, -0.5838583148353576, -3.312367759005175e-2)"><polyline points="-0.5838583148353576,-1.812367759005175e-2
+-0.5838583148353576,-4.812367759005175e-2"/></g><g transform="rotate(-90.0, -0.5838583148353576, -0.12133139429191464)"><polyline points="-0.5838583148353576,-0.10633139429191464
+-0.5838583148353576,-0.13633139429191465"/></g><g transform="rotate(-90.0, -0.5838583148353576, -0.20953911099377776)"><polyline points="-0.5838583148353576,-0.19453911099377774
+-0.5838583148353576,-0.22453911099377777"/></g><g transform="rotate(-90.0, -0.5838583148353576, -0.29774682769564065)"><polyline points="-0.5838583148353576,-0.28274682769564063
+-0.5838583148353576,-0.31274682769564066"/></g><g transform="rotate(-90.0, -0.5838583148353576, -0.38595454439750365)"><polyline points="-0.5838583148353576,-0.37095454439750364
+-0.5838583148353576,-0.40095454439750366"/></g><g transform="rotate(-90.0, -0.5838583148353576, -0.47416226109936654)"><polyline points="-0.5838583148353576,-0.45916226109936653
+-0.5838583148353576,-0.48916226109936656"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.325234050644776e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.615" y="0.3306228941592557">-0.300</text><text x="-0.615" y="0.24241517745739272">-0.250</text><text x="-0.615" y="0.15420746075552977">-0.200</text><text x="-0.615" y="6.599974405366676e-2">-0.150</text><text x="-0.615" y="-2.220797264819624e-2">-0.100</text><text x="-0.615" y="-0.11041568935005908">-0.050</text><text x="-0.615" y="-0.1986234060519222"> 0.000</text><text x="-0.615" y="-0.2868311227537851"> 0.050</text><text x="-0.615" y="-0.3750388394556482"> 0.100</text><text x="-0.615" y="-0.463246556157511"> 0.150</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5579069105314889,0.31970718921740016
+0.7396633046619439,0.31970718921740016"/><polyline points="-0.5579069105314889,0.23149947251553718
+0.7396633046619439,0.23149947251553718"/><polyline points="-0.5579069105314889,0.14329175581367426
+0.7396633046619439,0.14329175581367426"/><polyline points="-0.5579069105314889,5.5084039111811256e-2
+0.7396633046619439,5.5084039111811256e-2"/><polyline points="-0.5579069105314889,-3.312367759005175e-2
+0.7396633046619439,-3.312367759005175e-2"/><polyline points="-0.5579069105314889,-0.12133139429191464
+0.7396633046619439,-0.12133139429191464"/><polyline points="-0.5579069105314889,-0.20953911099377776
+0.7396633046619439,-0.20953911099377776"/><polyline points="-0.5579069105314889,-0.29774682769564065
+0.7396633046619439,-0.29774682769564065"/><polyline points="-0.5579069105314889,-0.38595454439750365
+0.7396633046619439,-0.38595454439750365"/><polyline points="-0.5579069105314889,-0.47416226109936654
+0.7396633046619439,-0.47416226109936654"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5700175658732943" width="3.4601872405158884e-3" y="-0.47575" height="0.7970449281180336"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5579069105314889,0.3585232727269032
+-0.5579069105314889,0.3285232727269032"/><polyline points="-0.39571063363230985,0.3585232727269032
+-0.39571063363230985,0.3285232727269032"/><polyline points="-0.2335143567331307,0.3585232727269032
+-0.2335143567331307,0.3285232727269032"/><polyline points="-7.131807983395155e-2,0.3585232727269032
+-7.131807983395155e-2,0.3285232727269032"/><polyline points="9.087819706522737e-2,0.3585232727269032
+9.087819706522737e-2,0.3285232727269032"/><polyline points="0.2530744739644065,0.3585232727269032
+0.2530744739644065,0.3285232727269032"/><polyline points="0.4152707508635858,0.3585232727269032
+0.4152707508635858,0.3285232727269032"/><polyline points="0.5774670277627649,0.3585232727269032
+0.5774670277627649,0.3285232727269032"/><polyline points="0.7396633046619439,0.3585232727269032
+0.7396633046619439,0.3285232727269032"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.325234050644776e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.5579069105314889" y="0.39393398282201786" transform="rotate(-45.0, -0.5579069105314889, 0.39393398282201786)">-0.150</text><text x="-0.39571063363230985" y="0.39393398282201786" transform="rotate(-45.0, -0.39571063363230985, 0.39393398282201786)">-0.100</text><text x="-0.2335143567331307" y="0.39393398282201786" transform="rotate(-45.0, -0.2335143567331307, 0.39393398282201786)">-0.050</text><text x="-7.131807983395155e-2" y="0.39393398282201786" transform="rotate(-45.0, -7.131807983395155e-2, 0.39393398282201786)"> 0.000</text><text x="9.087819706522737e-2" y="0.39393398282201786" transform="rotate(-45.0, 9.087819706522737e-2, 0.39393398282201786)"> 0.050</text><text x="0.2530744739644065" y="0.39393398282201786" transform="rotate(-45.0, 0.2530744739644065, 0.39393398282201786)"> 0.100</text><text x="0.4152707508635858" y="0.39393398282201786" transform="rotate(-45.0, 0.4152707508635858, 0.39393398282201786)"> 0.150</text><text x="0.5774670277627649" y="0.39393398282201786" transform="rotate(-45.0, 0.5774670277627649, 0.39393398282201786)"> 0.200</text><text x="0.7396633046619439" y="0.39393398282201786" transform="rotate(-45.0, 0.7396633046619439, 0.39393398282201786)"> 0.250</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5579069105314889,0.31970718921740016
+-0.5579069105314889,-0.47416226109936654"/><polyline points="-0.39571063363230985,0.31970718921740016
+-0.39571063363230985,-0.47416226109936654"/><polyline points="-0.2335143567331307,0.31970718921740016
+-0.2335143567331307,-0.47416226109936654"/><polyline points="-7.131807983395155e-2,0.31970718921740016
+-7.131807983395155e-2,-0.47416226109936654"/><polyline points="9.087819706522737e-2,0.31970718921740016
+9.087819706522737e-2,-0.47416226109936654"/><polyline points="0.2530744739644065,0.31970718921740016
+0.2530744739644065,-0.47416226109936654"/><polyline points="0.4152707508635858,0.31970718921740016
+0.4152707508635858,-0.47416226109936654"/><polyline points="0.5774670277627649,0.31970718921740016
+0.5774670277627649,-0.47416226109936654"/><polyline points="0.7396633046619439,0.31970718921740016
+0.7396633046619439,-0.47416226109936654"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5596370041517468" width="1.3010304024339483" y="0.3276458837205678" height="3.1754778012670903e-3"/></g></g></g></g></svg>
diff --git a/src/Chart.hs b/src/Chart.hs
--- a/src/Chart.hs
+++ b/src/Chart.hs
@@ -1,7 +1,7 @@
-{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_GHC -Wall #-}
+{-# OPTIONS_HADDOCK prune #-}
 
--- | A haskell Charting library targetting SVGs
+-- | A haskell Charting library targetting SVG.
 module Chart
   ( -- * Usage
 
@@ -13,206 +13,122 @@
     --
     -- $overview
 
-    -- * Chart
-    Chart (..),
-    moveChart,
-    projectXYs,
-    projectXYsWith,
-    projectArcPosition,
-
-    -- * Annotation
-    Annotation (..),
-    annotationText,
-    scaleAnn,
-    scaleOpacAnn,
-    colourAnn,
-    padRect,
-
-    -- * Styles
-    RectStyle (..),
-    defaultRectStyle,
-    blob,
-    clear,
-    border,
-    TextStyle (..),
-    defaultTextStyle,
-    GlyphStyle (..),
-    defaultGlyphStyle,
-    GlyphShape (..),
-    glyphText,
-    LineStyle (..),
-    defaultLineStyle,
-    LineCap (..),
-    fromLineCap,
-    toLineCap,
-    LineJoin (..),
-    fromLineJoin,
-    toLineJoin,
-    fromDashArray,
-    Anchor (..),
-    fromAnchor,
-    toAnchor,
-    PathStyle (..),
-    toPathChart,
-    defaultPathStyle,
-
-    -- * Hud types
-    ChartDims (..),
-    HudT (..),
-    Hud,
-    simulHud,
-    HudOptions (..),
-    defaultHudOptions,
-    scaleOpacHudOptions,
-    colourHudOptions,
-    defaultCanvas,
-    runHudWith,
-    runHud,
-    makeHud,
-    ChartAspect (..),
-    toChartAspect,
-    fromChartAspect,
-    initialCanvas,
-    chartAspectHud,
-    canvas,
-    title,
-    tick,
-
-    -- * Hud primitives
-    AxisOptions (..),
-    defaultAxisOptions,
-    flipAxis,
-    Place (..),
-    placeText,
-    AxisBar (..),
-    defaultAxisBar,
-    Title (..),
-    defaultTitle,
-    Tick (..),
-    defaultGlyphTick,
-    defaultTextTick,
-    defaultLineTick,
-    defaultTick,
-    TickStyle (..),
-    defaultTickStyle,
-    tickStyleText,
-    TickExtend (..),
-    adjustTick,
-    makeTickDates,
-    makeTickDatesContinuous,
-    Adjustments (..),
-    defaultAdjustments,
-    LegendOptions (..),
-    defaultLegendOptions,
-    legendHud,
-    Orientation (..),
-    fromOrientation,
-    toOrientation,
+    -- * Hud
 
-    -- * SVG primitives
-    CssOptions (..),
-    SvgOptions (..),
-    defaultSvgOptions,
-    defaultSvgFrame,
+    --
+    -- $hud
 
-    -- * Chart manipulation
-    padChart,
-    frameChart,
-    hori,
-    vert,
-    stack,
+    -- * Optics Usage
 
-    -- * Bounding box calculation
-    padBox,
-    dataBox,
-    dataBoxes,
-    dataBoxesS,
-    styleBox,
-    styleBoxes,
-    styleBoxesS,
-    styleBoxText,
-    styleBoxGlyph,
+    --
+    -- $optics
 
     -- * Re-exports
-    module Chart.Render,
+    module Chart.Primitive,
+    module Chart.Data,
+    module Chart.Hud,
+    module Chart.Style,
+    module Chart.Svg,
     module Chart.Bar,
     module Chart.Surface,
     module Data.Colour,
     module Data.FormatN,
     module Data.Path,
-    module NumHask.Space,
+    module Data.Path.Parser,
   )
 where
 
 import Chart.Bar
-import Chart.Render
+import Chart.Data
+import Chart.Hud
+import Chart.Primitive
+import Chart.Style
 import Chart.Surface
-import Chart.Types
+import Chart.Svg
 import Data.Colour
 import Data.FormatN
 import Data.Path
-import NumHask.Space
+import Data.Path.Parser
 
 -- $setup
 --
 -- >>> :set -XOverloadedLabels
+-- >>> :set -XOverloadedStrings
 -- >>> import Chart
--- >>> import Control.Lens
+-- >>> import Optics.Core
 
+-- $usage
+--
+-- >>> :set -XOverloadedLabels
+-- >>> :set -XOverloadedStrings
+-- >>> import Chart
+-- >>> import Optics.Core
+-- >>> let lines = [[Point 0.0 1.0, Point 1.0 1.0, Point 2.0 5.0],[Point 0.0 0.0, Point 2.8 3.0],[Point 0.5 4.0, Point 0.5 0]]
+-- >>> let styles = (\c -> defaultLineStyle & #color .~ palette1 c & #size .~ 0.015) <$> [0..2]
+-- >>> let cs = zipWith (\s x -> LineChart s [x]) styles lines
+-- >>> let lineExample = mempty & #charts .~ named "line" cs & #hudOptions .~ defaultHudOptions :: ChartSvg
+-- >>> writeChartSvg "other/usage.svg" lineExample
+
 -- $overview
 --
--- Charting consists of three highly-coupled conceptual layers:
+-- Charting consists of three tightly-coupled domains:
 --
--- 1. the data to be represented.
--- 2. how the data will be represented on a screen, and.
--- 3. the creation of visual aids that help interpret the data; such as axes, gridlines and titles.
+-- 1. /data domain/: the data to be represented.
+-- 2. /screen syntax/: the syntactics of the data. How and where data is to be represented on a screen (or page), and.
+-- 3. /the hud/: visual aids that help interpret the screened data; such as axes, gridlines and titles.
 --
 -- == What is a 'Chart'?
 --
--- A 'Chart' in this library consists of a specification of the first two items in the above list; data and data annotation.
---
--- - 'XY': a list of values, specified as either 2D points or rectangles.
---
--- - 'Annotation': a description of how the data should be represented on the screen.
---
--- >>> :t Chart
--- Chart :: Annotation -> [XY a] -> Chart a
---
--- What exactly is annotation and what is data is highly variant within charting practice. This construction treats position on the XY plane differently from other quantitative manifests such as color and size. The chief advantage of priveliging XY position is that scaling and integrating data with other chart elements becomes much easier. The disadvantage is that, to use quantitative tools such as size, data needs to be consciously separated into that which is position-orientated, and that which is defined as 'Annotation'.
---
+-- A 'Chart' in this library consists of a specification of the first two items in the above list; data and its syntax.
 --
--- Here's some data; three lists of points that will form a line:
+-- Here's some data; three lists of points that form lines to be charted:
 --
--- >>> let xs = fmap (fmap (uncurry Point)) [[(0.0, 1.0), (1.0, 1.0), (2.0, 5.0)], [(0.0, 0.0), (3.2, 3.0)], [(0.5, 4.0), (0.5, 0)]] :: [[Point Double]]
+-- >>> let lines = [[Point 0.0 1.0, Point 1.0 1.0, Point 2.0 5.0],[Point 0.0 0.0, Point 2.8 3.0],[Point 0.5 4.0, Point 0.5 0]]
 --
--- and an Annotation to describe representation of this data; three line styles with different colors and widths:
+-- and some line styles with different colors in order to distinguish the data:
 --
--- >>> let anns = zipWith (\w c -> LineA (LineStyle w c Nothing Nothing Nothing Nothing)) [0.015, 0.03, 0.01] palette1_
+-- >>> let styles = (\c -> defaultLineStyle & #color .~ palette1 c & #size .~ 0.015) <$> [0..2]
+-- >>> styles
+-- [LineStyle {size = 1.5e-2, color = Colour 0.02 0.73 0.80 1.00, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing},LineStyle {size = 1.5e-2, color = Colour 0.02 0.29 0.48 1.00, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing},LineStyle {size = 1.5e-2, color = Colour 0.66 0.07 0.55 1.00, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing}]
 --
--- and this is enough to create a Chart.
+-- This is enough to create the charts.
 --
--- >>> let lineExample = mempty & (#chartList .~ zipWith Chart anns (fmap (fmap PointXY) xs)) & #hudOptions .~ defaultHudOptions & #svgOptions .~ defaultSvgOptions :: ChartSvg
+-- >>> let cs = zipWith (\s x -> LineChart s [x]) styles lines
+-- >>> let lineExample = mempty & #charts .~ named "line" cs & #hudOptions .~ defaultHudOptions :: ChartSvg
 -- >>> :t lineExample
 -- lineExample :: ChartSvg
 --
--- > writeChartSvg "other/line.svg" lineExample
+-- > writeChartSvg "other/usage.svg" lineExample
 --
--- ![lines example](other/line.svg)
+-- ![usage example](other/usage.svg)
 
 -- $hud
 --
--- Axes, titles, tick marks, grid lines and legends are chart elements that exist to provide references for the viewer that helps explain the data that is being represented by the chart. They can be clearly distinguished from data representations such as a mark where a value is.
+-- Axes, titles, tick marks, grid lines and legends are chart elements that exist to provide references to help explain the data being represented. The collective noun used by the library for these elements is /hud/. Hud elements can usually be distinguished from data syntax, but need information from the chart domain (data domain and style domain) to function. A tick mark and tick value on an axis need to know the range of the data to be placed properly on the screen. A chart border needs to know the syntactic range of the entire data representation inclusive of representational artifacts that might extend beyond the data domain (A circle glyph representing a point has dimension).
 --
--- Apart from this, hud elements are pretty much the same as data elements. They simulateously have two reference frames: a data domain (tick values reference the data value range) and a page domain (a title needs to be placed on the left say, and has a size of 0.1 versus the page size). They are also typically composed of the same sorts of primitives as data elements, such as rectangles and lines and text and colors.
+-- Apart from this functional usage, however, hud elements are pretty much the same as data elements. They are typically composed of the same stuff; rectangles and lines and text and colors.
 --
--- Given this similarity, an efficient process for chart creation is roughly:
+-- Given this similarity, the library process for chart creation is roughly:
 --
--- - collect the chart data and data annotations into a [Chart Double]
+-- - collect the chart data and syntax (or style) into a collection of charts (a list or a tree). See 'Chart' and 'ChartTree'
 --
 -- - measure the range of the data values
 --
--- - begin a process of folding a [Hud Double] in with the charts, supplying the the data values to the hud elements if needed, and keeping track of the overall page size of the chart.
+-- - fold hud elements into a chart, /creating new 'ChartTree' from the hud/, keeping track of chart dimensions across three domains:
 --
--- This process is encapsulated in 'runHud'.
+--   - The domain of the underlying data
 --
--- An important quality of 'runHud' (and conversion of charts to svg in general)is that this is the point at which the 'XY's of the chart are converted from the data domain to the page domain. Once the hud and the chart has been integrated there is no going back and the original data is forgotten. This is an opinionated aspect of chart-svg. A counter-example is d3 which stores the raw data in the svg element it represents.
+--   - The domain of the canvas where the data is being represented
+--
+--   - The domain of the chart, inclusive of Hud or decorative elements.
+--
+-- This process is reified in 'runHudWith'. The most common Hud concepts, such as axes and titles, have been collected into the 'HudOptions' type.
+--
+-- An important quality of 'runHud' (and conversion of charts to svg in general) is that this is the point at which chart data is converted from the data domain to the page domain.
+--
+
+-- $optics
+--
+-- Usage suggests the use of optics-core and OverloadedLabels, but this is not required. 'Chart', 'HudOptions' and associated chart configuration types are big and sometimes deep syntax trees, and simple optics getting, setting and modding makes manipulation more pleasant. Lens works as well, and the library is perfectly capable of being used with records.
+--
+-- Lenses are supplied, for the optics-core library, but can be easily modified for lens. The chart-svg convention is that lenses are either OverloadedLabels, or suffixed with a single quote /'/.
diff --git a/src/Chart/Bar.hs b/src/Chart/Bar.hs
--- a/src/Chart/Bar.hs
+++ b/src/Chart/Bar.hs
@@ -1,12 +1,10 @@
-{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RebindableSyntax #-}
 {-# LANGUAGE TupleSections #-}
 {-# OPTIONS_GHC -Wall #-}
 
--- | bar charts
+-- | Bar charts
 module Chart.Bar
   ( BarOptions (..),
     defaultBarOptions,
@@ -19,34 +17,33 @@
   )
 where
 
-import Chart.Render
-import Chart.Types
-import Control.Lens
-import Data.Bifunctor
+import Chart.Data
+import Chart.Hud
+import Chart.Primitive
+import Chart.Style
+import Chart.Svg
 import Data.Bool
 import Data.Colour
+import Data.Foldable
 import Data.FormatN
-import Data.Generics.Labels ()
 import Data.List (scanl', transpose)
-import qualified Data.List.NonEmpty as NonEmpty
 import Data.Maybe
 import Data.Text (Text, pack)
 import GHC.Generics
-import GHC.OverloadedLabels
-import NumHask.Prelude
-import NumHask.Space
+import Optics.Core
+import Prelude hiding (abs)
 
 -- $setup
 --
 -- >>> :set -XOverloadedLabels
 -- >>> :set -XOverloadedStrings
 -- >>> import Chart
--- >>> import Control.Lens
+-- >>> import Optics.Core
 -- >>> import Data.Text (pack)
 
 -- | Typical bar chart options.
 --
--- >>> let barDataExample = BarData [[1, 2, 3, 5, 8, 0, -2, 11, 2, 1], [1 .. 10]] (Just (("row " <>) . pack . show <$> [1 .. 11])) (Just (("column " <>) . pack . show <$> [1 .. 2]))
+-- >>> let barDataExample = BarData [[1, 2, 3, 5, 8, 0, -2, 11, 2, 1], [1 .. 10]] (("row " <>) . pack . show <$> [1 .. 11]) (("column " <>) . pack . show <$> [1 .. 2])
 -- >>> let barExample = barChart defaultBarOptions barDataExample
 --
 -- > writeChartSvg "other/bar.svg" barExample
@@ -63,10 +60,43 @@
     valueFormatN :: FormatN,
     accumulateValues :: Bool,
     barOrientation :: Orientation,
-    barHudOptions :: HudOptions
+    barLegendOptions :: LegendOptions
   }
   deriving (Show, Eq, Generic)
 
+-- | A bar chart.
+--
+-- >>> emptyBar = barChart defaultBarOptions (BarData [] [] [])
+-- >>> foldOf (#charts % charts') emptyBar
+-- []
+barChart :: BarOptions -> BarData -> ChartSvg
+barChart bo bd =
+  mempty
+    & set #hudOptions (barHudOptions bo bd)
+    & set
+      #charts
+      ( named
+          "barchart"
+          ( bars bo bd
+              <> bool [] (barTextCharts bo bd) (view #displayValues bo)
+          )
+      )
+
+barHudOptions :: BarOptions -> BarData -> HudOptions
+barHudOptions bo bd =
+  mempty
+    & #axes
+    .~ [ (1, axis1),
+         (1, axis2)
+       ]
+    & #legends
+    .~ [ (10, o & #content .~ barLegendContent bo bd)
+       ]
+  where
+    o = view #barLegendOptions bo
+    axis1 = bool id flipAxis (barOrientation bo == Vert) (defaultAxisOptions & #ticks % #ltick .~ Nothing & #ticks % #style .~ barTicks bd)
+    axis2 = bool id flipAxis (barOrientation bo == Hori) defaultAxisOptions
+
 -- | The official bar options.
 defaultBarOptions :: BarOptions
 defaultBarOptions =
@@ -78,49 +108,30 @@
     0.04
     0.1
     True
-    (FormatComma (Just 2))
+    (FormatN FSCommaPrec (Just 2) True)
     False
     Hori
-    ( defaultHudOptions
-        & #hudAxes
-          .~ [ defaultAxisOptions
-                 & #axisTick . #ltick .~ Nothing,
-               defaultAxisOptions & #place .~ PlaceLeft
-             ]
-        & #hudTitles .~ []
-        & #hudLegend
-          ?~ ( defaultLegendOptions
-                 & #lplace .~ PlaceRight
-                 & #lsize .~ 0.12
-                 & #vgap .~ 0.4
-                 & #hgap .~ 0.14
-                 & #ltext . #size .~ 0.12
-                 & #lscale .~ 0.4,
-               []
-             )
-    )
+    defaultLegendOptions
   where
-    gs = (\x -> RectStyle 0.002 x x) <$> palette1_
-    ts = (\x -> defaultTextStyle & #color .~ x & #size .~ 0.04) <$> palette1_
+    gs = (\x -> RectStyle 0.005 (palette1 x) (palette1a x 0.7)) <$> [1, 2, 6, 7, 5, 3, 4, 0]
+    ts = (\x -> defaultTextStyle & #color .~ palette1 x & #size .~ 0.24) <$> [1, 2, 6, 7, 5, 3, 4, 0]
 
--- | imagine a dataframe you get in other languages:
---
--- - definitely some [[Double]]
---
--- - maybe some row names
+-- | Two dimensional data, maybe with row and column labels.
 --
--- - maybe some column names
 data BarData = BarData
   { barData :: [[Double]],
-    barRowLabels :: Maybe [Text],
-    barColumnLabels :: Maybe [Text]
+    barRowLabels :: [Text],
+    barColumnLabels :: [Text]
   }
   deriving (Show, Eq, Generic)
 
--- | Convert BarData to rectangles
+-- | Convert BarData to Rects
 --
 -- >>> barRects defaultBarOptions [[1,2],[2,3]]
 -- [[Rect 5.0e-2 0.45 0.0 1.0,Rect 1.05 1.4500000000000002 0.0 2.0],[Rect 0.45 0.8500000000000001 0.0 2.0,Rect 1.4500000000000002 1.85 0.0 3.0]]
+--
+-- >>> barRects defaultBarOptions [[]]
+-- [[]]
 barRects ::
   BarOptions ->
   [[Double]] ->
@@ -148,83 +159,77 @@
     bstep = (1 - (1 + 1) * ogap + (n - 1) * igap') / n
     igap' = igap * (1 - (1 + 1) * ogap)
 
--- | convert data to a range assuming a zero bound
--- a very common but implicit assumption in a lot of bar charts
+-- | Convert data to a range assuming a zero bound (a very common but implicit assumption in a lot of bar charts)
 --
 -- >>> barDataLowerUpper False [[1,2],[2,3]]
 -- [[(0.0,1.0),(0.0,2.0)],[(0.0,2.0),(0.0,3.0)]]
 barDataLowerUpper :: Bool -> [[Double]] -> [[(Double, Double)]]
 barDataLowerUpper add bs =
   case add of
-    False -> fmap (0,) <$> bs
-    True -> fmap (0,) <$> accRows bs
+    False -> fmap (fmap (0,)) bs
+    True -> fmap (fmap (0,)) (accRows bs)
 
--- | calculate the Rect range of a bar data set.
+-- | Calculate the Rect range of a bar data set.
 --
 -- >>> barRange [[1,2],[2,3]]
 -- Rect 0.0 2.0 0.0 3.0
+--
+-- >>> barRange [[]]
+-- Rect -0.5 0.5 -0.5 0.5
 barRange ::
   [[Double]] -> Rect Double
-barRange [] = Rect 0 0 0 0
-barRange ys'@(y : ys) = Rect 0 (fromIntegral $ maximum (length <$> ys')) (min 0 l) u
+barRange ys = singletonGuard $ Just $ Rect 0 (fromIntegral $ maximum (length <$> ys)) (min 0 l) u
   where
-    (Range l u) = sconcat $ space1 <$> (y NonEmpty.:| ys)
+    (Range l u) = fromMaybe one $ space1 $ mconcat ys
 
 -- | A bar chart without hud trimmings.
 --
--- >>> bars defaultBarOptions (BarData [[1,2],[2,3]] Nothing Nothing)
--- [Chart {annotation = RectA (RectStyle {borderSize = 2.0e-3, borderColor = Colour 0.69 0.35 0.16 1.00, color = Colour 0.69 0.35 0.16 1.00}), xys = [R 5.0e-2 0.45 0.0 1.0,R 1.05 1.4500000000000002 0.0 2.0]},Chart {annotation = RectA (RectStyle {borderSize = 2.0e-3, borderColor = Colour 0.65 0.81 0.89 1.00, color = Colour 0.65 0.81 0.89 1.00}), xys = [R 0.45 0.8500000000000001 0.0 2.0,R 1.4500000000000002 1.85 0.0 3.0]},Chart {annotation = BlankA, xys = [R -5.0e-2 1.9500000000000002 0.0 3.0]}]
-bars :: BarOptions -> BarData -> [Chart Double]
-bars bo bd =
-  zipWith (\o d -> Chart (RectA o) d) (bo ^. #barRectStyles) (fmap RectXY <$> barRects bo (bd ^. #barData)) <> [Chart BlankA [RectXY (Rect (x - (bo ^. #outerGap)) (z + (bo ^. #outerGap)) y w)]]
+-- >>> bars defaultBarOptions (BarData [[1,2],[2,3]] [] [])
+-- [RectChart (RectStyle {borderSize = 5.0e-3, borderColor = Colour 0.02 0.29 0.48 1.00, color = Colour 0.02 0.29 0.48 0.70}) [Rect 5.0e-2 0.45 0.0 1.0,Rect 1.05 1.4500000000000002 0.0 2.0],RectChart (RectStyle {borderSize = 5.0e-3, borderColor = Colour 0.66 0.07 0.55 1.00, color = Colour 0.66 0.07 0.55 0.70}) [Rect 0.45 0.8500000000000001 0.0 2.0,Rect 1.4500000000000002 1.85 0.0 3.0],BlankChart [Rect -5.0e-2 1.9500000000000002 0.0 3.0]]
+--
+-- >>> bars defaultBarOptions (BarData [[]] [] [])
+-- []
+bars :: BarOptions -> BarData -> [Chart]
+bars bo bd = bool cs [] (null $ mconcat $ view #barData bd)
   where
-    (Rect x z y w) = fromMaybe one $ foldRect $ catMaybes $ foldRect <$> barRects bo (bd ^. #barData)
+    cs = zipWith (\o d -> RectChart o d) (bo ^. #barRectStyles <> repeat defaultRectStyle) (barRects bo (bd ^. #barData)) <> [BlankChart [Rect (x - (bo ^. #outerGap)) (z + (bo ^. #outerGap)) y w]]
+    (Rect x z y w) = fromMaybe one $ foldRect $ mconcat $ barRects bo (bd ^. #barData)
 
 maxRows :: [[Double]] -> Int
-maxRows [] = 0
 maxRows xs = maximum $ length <$> xs
 
 appendZero :: [[Double]] -> [[Double]]
-appendZero xs = (\x -> take (maxRows xs) (x <> repeat 0)) <$> xs
+appendZero xs =
+  ( \x ->
+      take
+        (maxRows xs)
+        (x <> repeat 0)
+  )
+    <$> xs
 
 accRows :: [[Double]] -> [[Double]]
-accRows xs = transpose $ drop 1 . scanl' (+) 0 <$> transpose xs
+accRows xs = transpose $ drop 1 . scanl' (+) 0 <$> transpose (fmap toList $ toList xs)
 
--- | sensible ticks
+-- | Sensible ticks for a bar chart.
 barTicks :: BarData -> TickStyle
 barTicks bd
   | null (bd ^. #barData) = TickNone
-  | isNothing (bd ^. #barRowLabels) =
+  | null (bd ^. #barRowLabels) =
     TickLabels $ pack . show <$> [0 .. (maxRows (bd ^. #barData) - 1)]
   | otherwise =
     TickLabels $
       take (maxRows (bd ^. #barData)) $
-        fromMaybe [] (bd ^. #barRowLabels) <> repeat ""
-
-tickFirstAxis :: BarData -> [AxisOptions] -> [AxisOptions]
-tickFirstAxis _ [] = []
-tickFirstAxis bd (x : xs) = (x & #axisTick . #tstyle .~ barTicks bd) : xs
+        (bd ^. #barRowLabels) <> repeat ""
 
--- | bar legend
-barLegend :: BarData -> BarOptions -> [(Annotation, Text)]
-barLegend bd bo
+-- | A bar legend
+barLegendContent :: BarOptions -> BarData -> [(Text, Chart)]
+barLegendContent bo bd
   | null (bd ^. #barData) = []
-  | isNothing (bd ^. #barColumnLabels) = []
-  | otherwise = zip (RectA <$> bo ^. #barRectStyles) $ take (length (bd ^. #barData)) $ fromMaybe [] (bd ^. #barColumnLabels) <> repeat ""
-
--- | A bar chart.
---
--- By convention only, the first axis (if any) is the bar axis.
-barChart :: BarOptions -> BarData -> ChartSvg
-barChart bo bd =
-  mempty
-    & #hudOptions .~ bo ^. #barHudOptions
-    & #hudOptions . #hudLegend %~ fmap (second (const (barLegend bd bo)))
-    & #hudOptions . #hudAxes %~ tickFirstAxis bd . flipAllAxes (barOrientation bo)
-    & #chartList .~ bars bo bd <> bool [] (barTextCharts bo bd) (bo ^. #displayValues)
-
-flipAllAxes :: Orientation -> [AxisOptions] -> [AxisOptions]
-flipAllAxes o = fmap (bool id flipAxis (o == Vert))
+  | null (bd ^. #barColumnLabels) = []
+  | otherwise =
+    zip
+      (view #barColumnLabels bd <> repeat "")
+      ((\s -> RectChart s [one]) <$> take (length (view #barData bd)) (bo ^. #barRectStyles))
 
 barDataTP :: Bool -> FormatN -> Double -> Double -> [[Double]] -> [[(Text, Double)]]
 barDataTP add fn d negd bs =
@@ -234,12 +239,13 @@
     bs' = appendZero bs
     (Rect _ _ y w) = barRange bs'
 
--- | Convert BarData to text
+-- | Convert BarData to text placed above (or below) the bars.
 barTexts ::
   BarOptions ->
   [[Double]] ->
   [[(Text, Point Double)]]
-barTexts (BarOptions _ _ ogap igap tgap tgapneg _ fn add orient _) bs = zipWith zip (fmap fst <$> barDataTP add fn tgap tgapneg bs') (txs'' orient)
+barTexts (BarOptions _ _ ogap igap tgap tgapneg _ fn add orient _) bs =
+  zipWith zip (fmap fst <$> barDataTP add fn tgap tgapneg bs') (txs'' orient)
   where
     bs' = bool bs (appendZero bs) add
     txs'' Hori = txs'
@@ -258,7 +264,7 @@
     bstep = (1 - (1 + 1) * ogap + (n - 1) * igap') / n
     igap' = igap * (1 - (1 + 1) * ogap)
 
--- | text, hold the bars
-barTextCharts :: BarOptions -> BarData -> [Chart Double]
+-- | Placed text, hold the bars.
+barTextCharts :: BarOptions -> BarData -> [Chart]
 barTextCharts bo bd =
-  zipWith (\o d -> Chart (TextA o (fst <$> d)) (PointXY . snd <$> d)) (bo ^. #barTextStyles) (barTexts bo (bd ^. #barData))
+  zipWith TextChart (bo ^. #barTextStyles <> repeat defaultTextStyle) (barTexts bo (bd ^. #barData))
diff --git a/src/Chart/Data.hs b/src/Chart/Data.hs
new file mode 100644
--- /dev/null
+++ b/src/Chart/Data.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE RebindableSyntax #-}
+{-# OPTIONS_GHC -Wall #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+-- | Data primitives and utilities
+--
+-- Whilst the library makes use of <https://hackage.haskell.org/package/numhask numhask>, it does not re-export, to avoid clashes with Prelude, with the exception of 'zero', 'one', 'angle', 'norm' & 'abs'.
+--
+-- 'Rect' and 'Point', from <https://hackage.haskell.org/package/numhask-space numhask-space>, make up the base elements of many chart primitives, and all of numhask-space is re-exported.
+--
+module Chart.Data
+  ( -- * Data Primitives
+    Rect (..),
+    padRect,
+    padSingletons,
+    singletonGuard,
+    Point (..),
+    addp,
+
+    -- * NumHask Exports
+    --
+    -- | Note that (+) and (*) from numhask are not actually re-exported.
+    Multiplicative (one),
+    Additive (zero),
+    Direction (..),
+    Norm (..),
+    Signed (..),
+
+    -- * Re-exports
+    module NumHask.Space,
+  )
+where
+
+import NumHask.Prelude
+import NumHask.Space
+
+-- | Additive pad (or frame or buffer) a Rect.
+--
+-- >>> padRect 1 one
+-- Rect -1.5 1.5 -1.5 1.5
+padRect :: (Subtractive a) => a -> Rect a -> Rect a
+padRect p (Rect x z y w) = Rect (x - p) (z + p) (y - p) (w + p)
+
+-- | Pad a Rect to remove singleton dimensions.
+--
+-- Attempting to scale a singleton dimension of a Rect is a common bug.
+--
+-- Due to the use of scaling, and thus zero dividing, this is a common exception to guard against.
+--
+-- >>> project (Rect 0 0 0 1) one (Point 0 0)
+-- Point NaN -0.5
+--
+-- >>> project (padSingletons (Rect 0 0 0 1)) one (Point 0 0)
+-- Point 0.0 -0.5
+padSingletons :: Rect Double -> Rect Double
+padSingletons (Rect x z y w)
+  | x == z && y == w = Rect (x - 0.5) (x + 0.5) (y - 0.5) (y + 0.5)
+  | x == z = Rect (x - 0.5) (x + 0.5) y w
+  | y == w = Rect x z (y - 0.5) (y + 0.5)
+  | otherwise = Rect x z y w
+
+-- | Guard against an upstream Nothing or a singleton dimension
+singletonGuard :: Maybe (Rect Double) -> Rect Double
+singletonGuard = maybe one padSingletons
+
+-- | add Points, dimension-wise
+--
+-- >>> Point 1 1 `addp` Point 0 2
+-- Point 1.0 3.0
+addp :: Point Double -> Point Double -> Point Double
+addp = (+)
diff --git a/src/Chart/Examples.hs b/src/Chart/Examples.hs
--- a/src/Chart/Examples.hs
+++ b/src/Chart/Examples.hs
@@ -1,76 +1,72 @@
-{-# LANGUAGE NegativeLiterals #-}
 {-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RebindableSyntax #-}
+{-# LANGUAGE QuasiQuotes #-}
+{-# LANGUAGE TupleSections #-}
 {-# OPTIONS_GHC -Wall #-}
-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
-{-# OPTIONS_GHC -fno-warn-type-defaults #-}
 
 -- | Examples of chart construction.
 module Chart.Examples
-  ( unitExample,
-    svgOptionsExample,
+  (
+    -- * Unit & Hud
+    unitExample,
     hudOptionsExample,
+
+    -- * Iconic primitives.
+    lineExample,
     rectExample,
     textExample,
     glyphsExample,
-    lineExample,
+    pathExample,
+
+    -- * Compounds
     barExample,
     waveExample,
-    lglyphExample,
-    glinesExample,
-    compoundExample,
-    textLocalExample,
-    labelExample,
-    legendExample,
     surfaceExample,
     rosenbrock,
-    arcExample,
     arcFlagsExample,
     ellipseExample,
     quadExample,
     cubicExample,
-    pathExample,
     vennExample,
     arrowExample,
+    dateExample,
+
+    -- * Colour
+    gradientExample,
+    wheelExample,
+
+    -- * Debugging
+    debugExample,
     writeAllExamples,
+    writeAllExamplesDark,
   )
 where
 
 import Chart
-import Control.Lens
+import Data.Bifunctor
+import Data.Bool
+import Data.Function
 import Data.Text (Text, pack)
 import qualified Data.Text as Text
-import GHC.OverloadedLabels
-import NumHask.Prelude hiding (lines)
-
--- $setup
--- >>> import Chart
--- >>> import Control.Lens
+import Data.Time
+import NeatInterpolation
+import Optics.Core
+import Prelude hiding (abs)
 
 -- | unit example
 --
 -- ![unit example](other/unit.svg)
 unitExample :: ChartSvg
-unitExample = mempty & #chartList .~ [Chart (RectA defaultRectStyle) [one]]
+unitExample = mempty & #charts .~ named "unit" [RectChart defaultRectStyle [one]] & #hudOptions .~ defaultHudOptions
 
--- | 'HudOptions' example
+-- | A 'BlankChart', 'defaultHudOptions' example.
 --
 -- ![hudoptions example](other/hudoptions.svg)
 hudOptionsExample :: ChartSvg
 hudOptionsExample =
   mempty
-    & #hudOptions .~ colourHudOptions dark defaultHudOptions
-    & #chartList .~ [Chart BlankA [one]]
-
--- | 'SvgOptions' example.
---
--- ![svgoptions example](other/svgoptions.svg)
-svgOptionsExample :: ChartSvg
-svgOptionsExample =
-  mempty
-    & #svgOptions %~ #chartAspect .~ FixedAspect 0.7
-    & #chartList .~ zipWith (\s d -> Chart (LineA s) (fmap PointXY d)) lopts ls
+    & #hudOptions .~ colourHudOptions (rgb dark) defaultHudOptions
+    & #charts .~ blank one
 
 -- | rect example
 --
@@ -78,151 +74,155 @@
 rectExample :: ChartSvg
 rectExample =
   mempty
-    & #hudOptions .~ (defaultHudOptions & #hudAxes .~ [defaultAxisOptions])
-    & #chartList .~ zipWith Chart (RectA <$> ropts) (fmap RectXY <$> rss)
+    & #hudOptions
+      .~ ( mempty
+             & set
+               #axes
+               [(1, defaultAxisOptions & #ticks % #ltick .~ Nothing)]
+         )
+    & #charts .~ named "rect" (zipWith RectChart ropts rss)
 
 rss :: [[Rect Double]]
 rss =
-  [ gridR (\x -> exp (-(x ** 2) / 2)) (Range -5 5) 50,
-    gridR (\x -> 0.5 * exp (-(x ** 2) / 8)) (Range -5 5) 50
+  [ gridR (\x -> exp (-x ** 2 / 2)) (Range (-5) 5) 50,
+    gridR (\x -> 0.5 * exp (-x ** 2 / 8)) (Range (-5) 5) 50
   ]
 
 ropts :: [RectStyle]
 ropts =
-  [ blob (palette1 1),
-    blob (palette1 2)
+  [ blob (palette1a 1 0.4),
+    blob (palette1a 2 0.4)
   ]
 
 -- | line example
 --
--- Example in cabal file
---
--- This 'lineExample' provides a bit more detail for testing huds.
---
--- Simplified example:
---
--- >>> :set -XOverloadedLabels
--- >>> import Chart
--- >>> let xs = fmap (fmap (uncurry Point)) [[(0.0, 1.0), (1.0, 1.0), (2.0, 5.0)], [(0.0, 0.0), (3.2, 3.0)], [(0.5, 4.0), (0.5, 0)]] :: [[Point Double]]
--- >>> xs
--- [[Point 0.0 1.0,Point 1.0 1.0,Point 2.0 5.0],[Point 0.0 0.0,Point 3.2 3.0],[Point 0.5 4.0,Point 0.5 0.0]]
---
--- >>> let anns = zipWith (\w c -> LineA (defaultLineStyle & #width .~ w & #color .~ c)) [0.015, 0.03, 0.01] palette1_
--- >>> anns
--- [LineA (LineStyle {width = 1.5e-2, color = Colour 0.69 0.35 0.16 1.00, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing}),LineA (LineStyle {width = 3.0e-2, color = Colour 0.65 0.81 0.89 1.00, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing}),LineA (LineStyle {width = 1.0e-2, color = Colour 0.12 0.47 0.71 1.00, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing})]
---
--- >>> let lineExample = mempty & (#chartList .~ zipWith Chart anns (fmap (fmap PointXY) xs)) & #hudOptions .~ defaultHudOptions & #svgOptions .~ defaultSvgOptions :: ChartSvg
--- >>> :t lineExample
--- lineExample :: ChartSvg
---
--- > writeChartSvg "other/line.svg" lineExample
---
 -- ![line example](other/line.svg)
 lineExample :: ChartSvg
 lineExample =
-  mempty
-    & #svgOptions . #chartAspect
-    .~ CanvasAspect 1.5
-    & #hudOptions
-    .~ exampleLineHudOptions
-      "Line Chart"
-      (Just "An example from chart-svg")
-      (Just (defaultLegendOptions, zip (LineA <$> lopts) ["hockey", "line", "vertical"]))
-    & #chartList
-    .~ zipWith (\s d -> Chart (LineA s) (fmap PointXY d)) lopts ls
-
-ls :: [[Point Double]]
-ls =
-  fmap (uncurry Point)
-    <$> [ [(0.0, 1.0), (1.0, 1.0), (2.0, 5.0)],
-          [(0.0, 0.0), (2.8, 3.0)],
-          [(0.5, 4.0), (0.5, 0)]
-        ]
-
-lopts :: [LineStyle]
-lopts =
-  [ defaultLineStyle & #color .~ palette1 0 & #width .~ 0.015,
-    defaultLineStyle & #color .~ palette1 1 & #width .~ 0.03,
-    defaultLineStyle & #color .~ palette1 2 & #width .~ 0.01
-  ]
-
-exampleLineHudOptions :: Text -> Maybe Text -> Maybe (LegendOptions, [(Annotation, Text)]) -> HudOptions
-exampleLineHudOptions t1 t2 legends' =
-  defaultHudOptions
-    & #hudTitles
-      .~ ( [ defaultTitle t1
-               & #style . #size .~ 0.08
-           ]
-             <> foldMap
-               ( \x ->
-                   [ defaultTitle x
-                       & #style . #size .~ 0.05
-                       & #place .~ PlaceBottom
-                       & #anchor .~ AnchorEnd
-                   ]
-               )
-               t2
-         )
-    & #hudLegend .~ legends'
-    & #hudAxes %~ fmap (#axisTick . #tstyle .~ TickRound (FormatFixed (Just 1)) 8 TickExtend)
+  mempty & set #hudOptions ho & #charts .~ named "line" cs
+  where
+    ho =
+      defaultHudOptions
+        & set
+          #titles
+          [ (6, defaultTitle "Line Chart" & set (#style % #size) 0.1),
+            ( 11,
+              defaultTitle "Made with love and chart-svg"
+                & set (#style % #size) 0.06
+                & set #place PlaceBottom
+                & set #anchor AnchorEnd
+            )
+          ]
+        & over #frames (<> [(20, defaultFrameOptions & #buffer .~ 0.04)])
+        & set
+          #legends
+          [ ( 12,
+              defaultLegendOptions
+                & over #frame (fmap (set #color white))
+                & set #place (PlaceAbsolute (Point 0.45 (-0.35)))
+                & set (#textStyle % #size) 0.20
+                & set #content (zip ["palette1 0", "palette1 1", "palette1 2"] cs)
+            )
+          ]
+    cs =
+      zipWith
+        ( \c l ->
+            LineChart
+              ( defaultLineStyle
+                  & set #color (palette1 c)
+                  & set #size 0.015
+              )
+              [l]
+        )
+        [0 ..]
+        ls
+    ls =
+      [ [Point 0.0 1.0, Point 1.0 1.0, Point 2.0 5.0],
+        [Point 0.0 0.0, Point 2.8 3.0],
+        [Point 0.5 4.0, Point 0.5 0]
+      ]
 
 -- | text example
 --
 -- ![text example](other/text.svg)
 textExample :: ChartSvg
 textExample =
-  mempty & #chartList
-    .~ zipWith
-      Chart
-      (TextA (defaultTextStyle & (#color .~ dark) & (#size .~ (0.05 :: Double))) . (: []) . fst <$> ts)
-      ((: []) . PointXY . snd <$> ts)
+  mempty
+    & #charts
+      .~ named
+        "text"
+        [ TextChart
+            (defaultTextStyle & #color .~ dark & #size .~ 0.05 & #vshift .~ 0)
+            ts
+        ]
+    & #hudOptions .~ defaultHudOptions
+    & #svgOptions % #cssOptions % #preferColorScheme .~ PreferHud
+    & #svgOptions % #cssOptions % #cssExtra .~ textSwitch (light, dark)
   where
     ts :: [(Text, Point Double)]
     ts =
       zip
-        (fmap Text.singleton ['a' .. 'y'])
-        [Point (sin (x * 0.1)) x | x <- [0 .. 25]]
+        (fmap Text.singleton ['a' .. 'z'])
+        ((\x -> Point (sin (x * 0.1)) x) <$> [0 .. 25])
 
+    textSwitch :: (Colour, Colour) -> Text
+    textSwitch (cl, cd) =
+      [trimming|
+{
+  .text g {
+    fill: $hexDark;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .text g {
+    fill: $hexLight;
+  }
+}
+|]
+      where
+        hexLight = hex cl
+        hexDark = hex cd
+
 -- | glyphs example
 --
 -- ![glyphs example](other/glyphs.svg)
 glyphsExample :: ChartSvg
 glyphsExample =
   mempty
-    & #svgOptions . #svgHeight
-    .~ 50
-      & #chartList
-    .~ zipWith
-      ( \(sh, bs) p ->
-          Chart
-            ( GlyphA
-                ( defaultGlyphStyle
-                    & #size .~ (0.1 :: Double)
-                    & #borderSize .~ bs
-                    & #shape .~ sh
-                )
+    & set (#svgOptions % #svgHeight) 400
+    & set
+      #charts
+      ( named "glyphs" $
+          zipWith
+            ( \(sh, bs) p ->
+                GlyphChart
+                  ( defaultGlyphStyle
+                      & #size .~ (0.1 :: Double)
+                      & #borderSize .~ bs
+                      & #shape .~ sh
+                  )
+                  [p]
             )
-            [p]
+            [ (CircleGlyph, 0.01 :: Double),
+              (SquareGlyph, 0.01),
+              (RectSharpGlyph 0.75, 0.01),
+              (RectRoundedGlyph 0.75 0.01 0.01, 0.01),
+              (EllipseGlyph 0.75, 0.01),
+              (VLineGlyph, 0.01),
+              (HLineGlyph, 0.01),
+              (TriangleGlyph (Point 0.0 (0.5 * sqrt 2)) (Point (-cos (pi / 3)) (-sin (pi / 3) / 2)) (Point (cos (pi / 3)) (-sin (pi / 3) / 2)), 0.01),
+              (PathGlyph "M 0.5,-0.3660 A 1.0 1.0 -0.0 0 1 0,0.5 A 1.0 1.0 -0.0 0 1 -0.5,-0.3660 A 1.0 1.0 -0.0 0 1 0.5,-0.3660 L 0.5,-0.3660 Z" ScaleBorder, 0.01)
+            ]
+            [Point x 0 | x <- [0 .. (8 :: Double)]]
       )
-      [ (CircleGlyph, 0.01 :: Double),
-        (SquareGlyph, 0.01),
-        (RectSharpGlyph 0.75, 0.01),
-        (RectRoundedGlyph 0.75 0.01 0.01, 0.01),
-        (EllipseGlyph 0.75, 0),
-        (VLineGlyph 0.005, 0.01),
-        (HLineGlyph 0.005, 0.01),
-        (TriangleGlyph (Point 0.0 0.0) (Point 1 1) (Point 1 0), 0.01),
-        (PathGlyph "M0.05,-0.03660254037844387 A0.1 0.1 0.0 0 1 0.0,0.05 0.1 0.1 0.0 0 1 -0.05,-0.03660254037844387 0.1 0.1 0.0 0 1 0.05,-0.03660254037844387 Z", 0.01)
-      ]
-      [P x 0 | x <- [0 .. (8 :: Double)]]
 
 -- | Example data for Bar chart
 barDataExample :: BarData
 barDataExample =
   BarData
     [[1, 2, 3, 5, 8, 0, -2, 11, 2, 1], [1 .. 10]]
-    (Just (("row " <>) . pack . show <$> ([1 .. 11] :: [Int])))
-    (Just (("column " <>) . pack . show <$> ([1 .. 2] :: [Int])))
+    (("row " <>) . pack . show <$> [1 .. 11 :: Int])
+    (("column " <>) . pack . show <$> [1 .. 2 :: Int])
 
 -- | Bar chart example.
 --
@@ -230,140 +230,11 @@
 barExample :: ChartSvg
 barExample = barChart defaultBarOptions barDataExample
 
--- | A reminder that Text scale is at representation level, and so doesn't scale compared with other chart elements, such as a rectangle.
---
--- ![text local example](other/textlocal.svg)
-textLocalExample :: ChartSvg
-textLocalExample =
-  mempty & #chartList
-    .~ [ t1,
-         t2,
-         Chart (RectA rs) [RectXY (padBox $ styleBox t1)],
-         Chart (RectA rs) [RectXY (padBox $ styleBox t2)]
-       ]
-  where
-    rs = defaultRectStyle & #color %~ setOpac 0.1
-    t1 =
-      Chart
-        ( TextA
-            (defaultTextStyle & #anchor .~ AnchorStart & #hsize .~ 0.5 & #size .~ 0.08)
-            ["a pretty long piece of text"]
-        )
-        [zero]
-    t2 =
-      Chart
-        ( TextA
-            (defaultTextStyle & #anchor .~ AnchorStart & #hsize .~ 0.5 & #size .~ 0.08)
-            ["another pretty long piece of text"]
-        )
-        [P 1 1]
-
--- | compound chart
-gopts3 :: [GlyphStyle]
-gopts3 =
-  zipWith
-    ( \x y ->
-        (#color .~ x)
-          . (#borderColor .~ x)
-          . (#borderSize .~ 0.005)
-          . (#shape .~ y)
-          . (#size .~ 0.08)
-          $ defaultGlyphStyle
-    )
-    palette1_
-    [EllipseGlyph 1.5, SquareGlyph, CircleGlyph]
-
--- | Glyph + Lines
---
--- ![glines example](other/glines.svg)
-glinesExample :: ChartSvg
-glinesExample = mempty & #chartList .~ (cs <> gs)
-  where
-    cs = zipWith (\d s -> Chart (LineA s) (PointXY <$> d)) ls lopts
-    gs = zipWith (\d s -> Chart (GlyphA s) (PointXY <$> d)) ls gopts3
-
-lgdata :: [(Text, Point Double)]
-lgdata =
-  (\p@(Point x y) -> (pack (show x <> "," <> show y), fromIntegral <$> p))
-    <$> (Point <$> [0 .. 5] <*> [0 .. 5] :: [Point Int])
-
--- | Labelled Glyphs
---
--- ![lglyph example](other/lglyph.svg)
-lglyphExample :: ChartSvg
-lglyphExample = mempty & #chartList .~ (txt <> gly)
-  where
-    txt =
-      ( \(t, p) ->
-          Chart
-            ( TextA
-                ( defaultTextStyle
-                    & #color %~ setOpac 0.2
-                )
-                [t]
-            )
-            (PointXY <$> [p + Point 0 0.2])
-      )
-        <$> lgdata
-    gly =
-      ( \d ->
-          Chart
-            ( GlyphA
-                ( defaultGlyphStyle
-                    & #size .~ 0.01
-                    & #borderSize .~ 0
-                    & #color .~ palette1 2
-                )
-            )
-            (PointXY <$> [d])
-      )
-        <$> (snd <$> lgdata)
-
--- | mappend of lglyph and glines examples
---
--- ![compound example](other/compound.svg)
-compoundExample :: ChartSvg
-compoundExample = lglyphExample <> glinesExample
-
--- | label example.
---
--- ![label example](other/label.svg)
-labelExample :: ChartSvg
-labelExample =
-  mempty & #chartList
-    .~ [Chart (TextA (defaultTextStyle & #rotation ?~ -pi / 4) ["text at (1,1) rotated by -(pi/4) radians"]) [PointXY (Point 1.0 1.0)]]
-
--- | legend test
---
--- ![legend example](other/legend.svg)
-legendExample :: ChartSvg
-legendExample =
-  mempty & #hudOptions
-    .~ ( defaultHudOptions
-           & #hudLegend
-           ?~ ( defaultLegendOptions
-                  & #lscale .~ 0.3
-                  & #lplace .~ PlaceAbsolute (Point 0.0 0.0)
-                  & #lsize .~ 0.12
-                  & #ltext . #size .~ 0.16,
-                l1
-              )
-       )
-  where
-    l1 =
-      [ (GlyphA defaultGlyphStyle, "glyph"),
-        (RectA defaultRectStyle, "rect"),
-        (TextA (defaultTextStyle & #anchor .~ AnchorStart) ["content"], "text"),
-        (LineA defaultLineStyle, "line"),
-        (GlyphA defaultGlyphStyle, "abcdefghijklmnopqrst"),
-        (BlankA, "blank")
-      ]
-
 -- | wave example
 --
 -- ![wave example](other/wave.svg)
 waveExample :: ChartSvg
-waveExample = mempty & #chartList .~ [Chart (GlyphA defaultGlyphStyle) (PointXY <$> gridP sin (Range 0 (2 * pi)) 30)]
+waveExample = mempty & #charts .~ named "wave" [GlyphChart defaultGlyphStyle $ gridP sin (Range 0 (2 * pi)) 30] & #hudOptions .~ defaultHudOptions
 
 -- | venn diagram
 --
@@ -371,9 +242,9 @@
 vennExample :: ChartSvg
 vennExample =
   mempty
-    & #chartList .~ zipWith (\c x -> Chart (PathA (defaultPathStyle & #color .~ setOpac 0.2 c) (fst <$> x)) (PointXY . snd <$> x)) palette1_ (toPathXYs . parsePath <$> vennSegs)
-    & #svgOptions .~ (defaultSvgOptions & #chartAspect .~ FixedAspect 1)
+    & #charts .~ named "venn" (zipWith (\c x -> PathChart (defaultPathStyle & #borderSize .~ 0.005 & #color .~ palette1a c 0.2 & over #borderColor (set opac' 1)) x) [0 ..] (svgToPathData <$> vennSegs))
     & #hudOptions .~ defaultHudOptions
+    & #hudOptions % #chartAspect .~ FixedAspect 1
 
 {-
 These were originally based on:
@@ -404,61 +275,93 @@
 pathExample :: ChartSvg
 pathExample =
   mempty
-    & #chartList .~ [path', c0]
+    & #charts .~ named "path" [path', c0] <> named "pathtext" [t0]
     & #hudOptions .~ defaultHudOptions
-    & #svgOptions
-    %~ ( (#outerPad ?~ 0.1)
-           . (#chartAspect .~ ChartAspect)
-       )
+    & #hudOptions % #chartAspect .~ ChartAspect
+    & #svgOptions % #cssOptions % #preferColorScheme .~ PreferHud
+    & #svgOptions % #cssOptions % #cssExtra .~ classSwitch (light, dark) "pathtext"
   where
     ps =
-      [ (StartI, Point 0 0),
-        (LineI, Point 1 0),
-        (CubicI (Point 0.2 0) (Point 0.25 1), Point 1 1),
-        (QuadI (Point -1 2), Point 0 1),
-        (ArcI (ArcInfo (Point 1 1) (-pi / 6) False False), Point 0 0)
+      [ StartP (Point 0 0),
+        LineP (Point 1 0),
+        CubicP (Point 0.2 0) (Point 0.25 1) (Point 1 1),
+        QuadP (Point (-1) 2) (Point 0 1),
+        ArcP (ArcInfo (Point 1 1) (-pi / 6) False False) (Point 0 0)
       ]
-    path' = Chart (PathA (defaultPathStyle & #color .~ setOpac 0.1 (palette1 2) & #borderColor .~ Colour 0.2 0.8 0.4 0.3) (fst <$> ps)) (PointXY . snd <$> ps)
-    c0 = Chart (GlyphA defaultGlyphStyle) (PointXY . snd <$> ps)
+    ts =
+      [ "StartP (Point 0 0)",
+        "LineP (Point 1 0)",
+        "CubicP (Point 0.2 0) (Point 0.25 1) (Point 1 1)",
+        "QuadP (Point (-1) 2) (Point 0 1)",
+        "ArcP (ArcInfo (Point 1 1) (-pi / 6) False False) (Point 0 0)"
+      ]
+    path' = PathChart (defaultPathStyle & #color .~ palette1a 0 0.1 & #borderColor .~ palette1a 1 1) ps
+    c0 = GlyphChart defaultGlyphStyle (pointPath <$> ps)
+    midp = Point 0 0 : zipWith (\(Point x y) (Point x' y') -> Point ((x + x') / 2) ((y + y') / 2)) (drop 1 (pointPath <$> ps)) (pointPath <$> ps)
+    offp = [Point 0 0.05, Point 0 0, Point (-0.2) 0, Point (-0.1) 0.1, Point 0 (-0.1)]
+    t0 = TextChart (defaultTextStyle & set #size 0.05) (zip ts (zipWith addp offp midp))
 
+classSwitch :: (Colour, Colour) -> Text -> Text
+classSwitch (cl, cd) class' =
+  [trimming|
+{
+  .$class' g {
+    fill: $hexDark;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .$class' g {
+    fill: $hexLight;
+  }
+}
+|]
+  where
+    hexLight = hex cl
+    hexDark = hex cd
+
 -- | ellipse example
 --
--- (ArcPosition (Point 1 0) (Point 0 1) (ArcInfo (Point 1.5 1) 0 True True))
+-- Under scaling, angles are not invariant, and this effects the shape of ellipses and thus SVG arc paths. Compare the effect of aspect changes to the axes of this ellipse:
 --
 -- ![ellipse example](other/ellipse.svg)
-ellipseExample :: ChartSvg
-ellipseExample =
-  mempty
-    & #chartList .~ [ell, ellFull, c0, bbox, xradii, yradii]
-    & #hudOptions .~ defaultHudOptions
-    & #svgOptions %~ ((#outerPad .~ Nothing) . (#chartAspect .~ UnadjustedAspect))
-  where
-    p@(ArcPosition p1 p2 _) = ArcPosition (Point 1 0) (Point 0 1) (ArcInfo (Point 1.5 1) (pi / 3) True True)
-    (ArcCentroid c r phi' ang0 angd) = arcCentroid p
-    ellFull = Chart (LineA $ defaultLineStyle & #width .~ 0.002 & #color .~ palette1 1) (PointXY . ellipse c r phi' . (\x -> 2 * pi * x / 100.0) <$> [0 .. 100])
-    ell = Chart (LineA $ defaultLineStyle & #width .~ 0.002 & #color .~ palette1 1) (PointXY . ellipse c r phi' . (\x -> ang0 + angd * x / 100.0) <$> [0 .. 100])
-    c0 = Chart (GlyphA defaultGlyphStyle) (PointXY <$> [c, p1, p2])
-    bbox = Chart (RectA $ defaultRectStyle & #borderSize .~ 0.002 & #color .~ Colour 0.4 0.4 0.8 0.1 & #borderColor .~ Colour 0.5 0.5 0.5 1) [RectXY (arcBox p)]
-    xradii = Chart (LineA $ defaultLineStyle & #color .~ Colour 0.9 0.2 0.02 1 & #width .~ 0.005 & #dasharray .~ Just [0.03, 0.01] & #linecap .~ Just LineCapRound) (PointXY <$> [ellipse c r phi' 0, ellipse c r phi' pi])
-    yradii = Chart (LineA $ defaultLineStyle & #color .~ Colour 0.9 0.9 0.02 1 & #width .~ 0.005 & #dasharray .~ Just [0.03, 0.01] & #linecap .~ Just LineCapRound) (PointXY <$> [ellipse c r phi' (pi / 2), ellipse c r phi' (3 / 2 * pi)])
-
--- | arc example
 --
--- ![arc example](other/arc.svg)
-arcExample :: ChartSvg
-arcExample =
+-- Below is the same ellipse with FixedAspect 2. Points scale exactly, but the original points that represent the end points of the axes are no longer on the new axes of the ellipse.
+--
+-- ![ellipse2 example](other/ellipse2.svg)
+ellipseExample :: ChartAspect -> ChartSvg
+ellipseExample a =
   mempty
-    & #chartList .~ [arc, ell, c0, bbox]
+    & #charts .~ named "ellipse" [ell, ellFull, c0, c1, bbox, xradii, yradii]
     & #hudOptions .~ defaultHudOptions
-    & #svgOptions %~ ((#outerPad .~ Nothing) . (#chartAspect .~ FixedAspect 1))
+    & #hudOptions % #chartAspect .~ a
+    & #hudOptions % #legends .~ [(10, defaultLegendOptions & #content .~ lrows & #textStyle % #size .~ 0.2 & #size .~ 0.1)]
+    & #hudOptions % #titles .~ [(11, defaultTitle "ArcPosition (Point 1 0) (Point 0 1) (ArcInfo (Point 1.5 1) (pi / 3) True True)" & #style % #size .~ 0.08)]
   where
-    p1 = ArcPosition (Point 1.0 0.0) (Point 0.0 1.0) (ArcInfo (Point 1.0 0.5) 0 False True)
-    ps = singletonArc p1
-    (ArcCentroid c r phi' ang0 angd) = arcCentroid p1
-    arc = Chart (PathA (defaultPathStyle & #color .~ setOpac 0.1 (palette1 2) & #borderColor .~ transparent) (fst <$> ps)) (PointXY . snd <$> ps)
-    ell = Chart (LineA $ defaultLineStyle & #width .~ 0.002 & #color .~ palette1 1) (PointXY . ellipse c r phi' . (\x -> ang0 + angd * x / 100.0) <$> [0 .. 100])
-    c0 = Chart (GlyphA defaultGlyphStyle) [PointXY c]
-    bbox = Chart (RectA $ defaultRectStyle & #borderSize .~ 0.002 & #color .~ Colour 0.4 0.4 0.8 0.1 & #borderColor .~ Colour 0.5 0.5 0.5 1) [RectXY (arcBox p1)]
+    p@(ArcPosition p1 p2 _) = ArcPosition (Point 1 0) (Point 0 1) (ArcInfo (Point 1.5 1) (pi / 3) True True)
+    (ArcCentroid c r phi' ang0' angd) = arcCentroid p
+    ellFull = LineChart fullels [ellipse c r phi' . (\x -> 2 * pi * x / 100.0) <$> [0 .. 100]]
+    ell = LineChart els [ellipse c r phi' . (\x -> ang0' + angd * x / 100.0) <$> [0 .. 100]]
+    g0 = defaultGlyphStyle & #shape .~ CircleGlyph
+    c0 = GlyphChart g0 [c]
+    g1 = defaultGlyphStyle & #color .~ palette1a 4 0.2
+    c1 = GlyphChart g1 [p1, p2]
+    bbox = RectChart bbs [arcBox p]
+    bbs = defaultRectStyle & #borderSize .~ 0.002 & #color .~ palette1a 7 0.005 & #borderColor .~ grey 0.5 1
+    xradii = LineChart xals [[ellipse c r phi' 0, ellipse c r phi' pi]]
+    yradii = LineChart yals [[ellipse c r phi' (pi / 2), ellipse c r phi' (3 / 2 * pi)]]
+    xals = defaultLineStyle & #color .~ palette1 6 & #size .~ 0.005 & #dasharray .~ Just [0.03, 0.01] & #linecap .~ Just LineCapRound
+    yals = defaultLineStyle & #color .~ palette1 5 & #size .~ 0.005 & #dasharray .~ Just [0.03, 0.01] & #linecap .~ Just LineCapRound
+    fullels = defaultLineStyle & #size .~ 0.002 & #color .~ palette1 1
+    els = defaultLineStyle & #size .~ 0.005 & #color .~ palette1 2
+    lrows =
+      [ ("Major Axis", LineChart xals [[zero]]),
+        ("Minor Axis", LineChart yals [[zero]]),
+        ("Full Ellipse", LineChart fullels [[zero]]),
+        ("Arc", LineChart els [[zero]]),
+        ("Centroid", GlyphChart (g0 & #size .~ 0.01) [zero]),
+        ("Endpoints", GlyphChart (g1 & #size .~ 0.01) [zero]),
+        ("Bounding Box", RectChart (bbs & #borderSize .~ 0.01) [fmap (2 *) one])
+      ]
 
 -- | Reproduction of the flag explanation chart in <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>
 --
@@ -466,63 +369,98 @@
 arcFlagsExample :: ChartSvg
 arcFlagsExample =
   mempty
-    & #chartList
-    .~ vert
-      0.02
-      [ hori
+    & set
+      #charts
+      ( vert
           0.02
-          [ [ Chart BlankA [R -0.4 0.4 -1 5],
-              Chart (TextA (defaultTextStyle & #size .~ 0.6 & #rotation .~ Just (pi / 2)) ["Sweep"]) [P 0.1 2]
+          [ hori 0.02 [colSweep, colSweep2, colLargeFalse, colLargeTrue],
+            rowLarge
+          ]
+      )
+    & #hudOptions % #chartAspect .~ ChartAspect
+    & #svgOptions % #cssOptions % #preferColorScheme .~ PreferHud
+    & #svgOptions % #cssOptions % #cssExtra
+      .~ [trimming|
+{
+  .chart g {
+    stroke: $hexDark;
+  }
+  .chart g text {
+    fill: $hexDark;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .chart g {
+    stroke: $hexLight;
+  }
+  .chart g text {
+    fill: $hexLight;
+  }
+}
+|]
+  where
+    hexDark = hex dark
+    hexLight = hex light
+    rowLarge =
+      unnamed
+        [ BlankChart [Rect 0 9 (-2.75) (-3.25)],
+          TextChart (defaultTextStyle & #size .~ 0.6) [("Large", Point 5.5 (-3.0))]
+        ]
+    colLargeFalse =
+      vert
+        0.02
+        [ unnamed (checkFlags False True (set opac' 0.3 dark)),
+          unnamed (checkFlags False False (set opac' 0.3 dark)),
+          unnamed
+            [ BlankChart [Rect (-1) 2 (-0.25) 0.25],
+              TextChart (defaultTextStyle & #size .~ 0.4) [("False", Point 0.5 (-0.1))]
+            ]
+        ]
+    colLargeTrue =
+      vert
+        0.02
+        [ unnamed (checkFlags True True (set opac' 0.3 dark)),
+          unnamed (checkFlags True False (set opac' 0.3 dark)),
+          unnamed
+            [ BlankChart [Rect (-1) 2 (-0.25) 0.25],
+              TextChart (defaultTextStyle & #size .~ 0.4) [("True", Point 0.5 (-0.1))]
+            ]
+        ]
+    colSweep =
+      unnamed
+        [ BlankChart [Rect (-0.4) 0.4 (-1) 5],
+          TextChart
+            (defaultTextStyle & #size .~ 0.6 & #rotation .~ Just (pi / 2))
+            [("Sweep", Point 0.1 2)]
+        ]
+    colSweep2 =
+      vert
+        0.02
+        [ unnamed
+            [ BlankChart [Rect (-0.25) 0.25 (-1) 2],
+              TextChart
+                (defaultTextStyle & #size .~ 0.4 & #rotation .~ Just (pi / 2))
+                [("True", Point 0.1 0.5)]
             ],
-            vert
-              0.02
-              [ [ Chart BlankA [R -0.25 0.25 -1 2],
-                  Chart (TextA (defaultTextStyle & #size .~ 0.4 & #rotation .~ Just (pi / 2)) ["True"]) [P 0.1 0.5]
-                ],
-                [ Chart BlankA [R -0.25 0.25 -1 2],
-                  Chart (TextA (defaultTextStyle & #size .~ 0.4 & #rotation .~ Just (pi / 2)) ["False"]) [P 0.1 0.5]
-                ]
-              ],
-            vert
-              0.02
-              [ checkFlags False True (setOpac 0.3 dark) & view #chartList,
-                checkFlags False False (setOpac 0.3 dark) & view #chartList,
-                [ Chart BlankA [R -1 2 -0.25 0.25],
-                  Chart (TextA (defaultTextStyle & #size .~ 0.4) ["False"]) [P 0.5 -0.1]
-                ]
-              ],
-            vert
-              0.02
-              [ checkFlags True True (setOpac 0.3 dark) & view #chartList,
-                checkFlags True False (setOpac 0.3 dark) & view #chartList,
-                [ Chart BlankA [R -1 2 -0.25 0.25],
-                  Chart (TextA (defaultTextStyle & #size .~ 0.4) ["True"]) [P 0.5 -0.1]
-                ]
-              ]
-          ],
-        [ Chart BlankA [R 0 9 -2.75 -3.25],
-          Chart (TextA (defaultTextStyle & #size .~ 0.6) ["Large"]) [P 5.5 -3.0]
+          unnamed
+            [ BlankChart [Rect (-0.25) 0.25 (-1) 2],
+              TextChart
+                (defaultTextStyle & #size .~ 0.4 & #rotation .~ Just (pi / 2))
+                [("False", Point 0.1 0.5)]
+            ]
         ]
-      ]
-    & #hudOptions
-    .~ mempty
-    & #svgOptions %~ ((#outerPad .~ Nothing) . (#chartAspect .~ UnadjustedAspect))
 
-checkFlags :: Bool -> Bool -> Colour -> ChartSvg
-checkFlags large sweep co =
-  mempty
-    & #hudOptions .~ defaultHudOptions
-    & #svgOptions . #chartAspect .~ UnadjustedAspect
-    & #chartList .~ [c1, c2, ell, arc1]
+checkFlags :: Bool -> Bool -> Colour -> [Chart]
+checkFlags large' sweep co = [c1, c2, ell, arc1]
   where
     c = Point 1.0 1.0
-    p1 = ArcPosition (Point 0.0 1.0) (Point 1.0 0.0) (ArcInfo (Point 1.0 1.0) 0 large sweep)
-    ps1 = singletonPie' c p1
-    (ArcCentroid c' r phi' ang0 angd) = arcCentroid p1
-    arc1 = Chart (PathA (defaultPathStyle & #color .~ co & #borderColor .~ setOpac 0.5 dark) (fst <$> ps1)) (PointXY . snd <$> ps1)
-    c1 = Chart (LineA $ defaultLineStyle & #width .~ 0.02 & #color .~ setOpac 0.2 dark) (PointXY . ellipse (Point 1.0 1.0) (Point 1.0 1.0) 0 . (\x -> 0 + 2 * pi * x / 100.0) <$> [0 .. 100])
-    c2 = Chart (LineA $ defaultLineStyle & #width .~ 0.02 & #color .~ setOpac 0.2 dark) (PointXY . ellipse (Point 0.0 0.0) (Point 1.0 1.0) 0 . (\x -> 0 + 2 * pi * x / 100.0) <$> [0 .. 100])
-    ell = Chart (LineA $ defaultLineStyle & #width .~ 0.05 & #color .~ setOpac 0.5 co) (PointXY . ellipse c' r phi' . (\x -> ang0 + angd * x / 100.0) <$> [0 .. 100])
+    p1 = ArcPosition (Point 0.0 1.0) (Point 1.0 0.0) (ArcInfo (Point 1.0 1.0) 0 large' sweep)
+    ps1 = singletonPie c p1
+    (ArcCentroid c' r phi' ang0' angd) = arcCentroid p1
+    arc1 = PathChart (defaultPathStyle & #color .~ co & #borderColor .~ set opac' 0.5 dark) ps1
+    c1 = LineChart (defaultLineStyle & #size .~ 0.02 & #color .~ set opac' 0.2 dark) [ellipse (Point 1.0 1.0) (Point 1.0 1.0) 0 . (\x -> 0 + 2 * pi * x / 100.0) <$> [0 .. 100]]
+    c2 = LineChart (defaultLineStyle & #size .~ 0.02 & #color .~ set opac' 0.2 dark) [ellipse (Point 0.0 0.0) (Point 1.0 1.0) 0 . (\x -> 0 + 2 * pi * x / 100.0) <$> [0 .. 100]]
+    ell = LineChart (defaultLineStyle & #size .~ 0.05 & #color .~ set opac' 0.5 co) [ellipse c' r phi' . (\x -> ang0' + angd * x / 100.0) <$> [0 .. 100]]
 
 -- | quad example
 --
@@ -530,16 +468,30 @@
 quadExample :: ChartSvg
 quadExample =
   mempty
-    & #chartList .~ [path', curve, c0, bbox]
+    & #charts .~ named "quad" [path', curve, c0, c1, bbox]
     & #hudOptions .~ defaultHudOptions
-    & #svgOptions %~ ((#outerPad ?~ 0.05) . (#chartAspect .~ ChartAspect))
+    & #hudOptions % #chartAspect .~ FixedAspect 1.5
+    & #hudOptions % #legends .~ [(10, defaultLegendOptions & #content .~ lrows & #textStyle % #size .~ 0.2 & #size .~ 0.2)]
+    & #hudOptions % #titles .~ [(11, defaultTitle "QuadPosition (Point 0 0) (Point 1 1) (Point 2 (-1))" & #style % #size .~ 0.08)]
   where
-    p@(QuadPosition start end control) = QuadPosition (Point 0 0) (Point 1 1) (Point 2 -1)
+    p@(QuadPosition start end control) = QuadPosition (Point 0 0) (Point 1 1) (Point 2 (-1))
     ps = singletonQuad p
-    path' = Chart (PathA (defaultPathStyle & #color .~ setOpac 0.1 (palette1 2) & #borderColor .~ transparent) (fst <$> ps)) (PointXY . snd <$> ps)
-    curve = Chart (LineA $ defaultLineStyle & #width .~ 0.002 & #color .~ palette1 1) (PointXY . quadBezier p . (/ 100.0) <$> [0 .. 100])
-    c0 = Chart (GlyphA defaultGlyphStyle) (PointXY <$> [start, end, control])
-    bbox = Chart (RectA $ defaultRectStyle & #borderSize .~ 0.002 & #color .~ Colour 0.4 0.4 0.8 0.1 & #borderColor .~ Colour 0.5 0.5 0.5 1) [RectXY (quadBox p)]
+    path' = PathChart pathStyle ps
+    curve = LineChart curveStyle [quadBezier p . (/ 100.0) <$> [0 .. 100]]
+    curveStyle = defaultLineStyle & #size .~ 0.002 & #color .~ palette1 1
+    c0 = GlyphChart defaultGlyphStyle [start, end]
+    c1 = GlyphChart controlStyle [control]
+    bbox = RectChart bbs [quadBox p]
+    bbs = defaultRectStyle & #borderSize .~ 0.002 & #color .~ palette1a 0 0.05 & #borderColor .~ grey 0.4 1
+    pathStyle = defaultPathStyle & #color .~ palette1a 2 0.2 & #borderColor .~ transparent
+    controlStyle = defaultGlyphStyle & #shape .~ CircleGlyph
+    lrows =
+      [ ("Path Fill", PathChart pathStyle [StartP zero]),
+        ("Path Chord", LineChart curveStyle [[zero]]),
+        ("Path Endpoints", GlyphChart defaultGlyphStyle [zero]),
+        ("Path Control Point", GlyphChart controlStyle [zero]),
+        ("Bounding Box", RectChart (bbs & #borderSize .~ 0.01) [one])
+      ]
 
 -- | cubic example
 --
@@ -547,41 +499,61 @@
 cubicExample :: ChartSvg
 cubicExample =
   mempty
-    & #chartList .~ [path', curve, c0, bbox]
+    & #charts .~ named "cubic" [path', curve, c0, c1, bbox]
     & #hudOptions .~ mempty
-    & #svgOptions %~ ((#outerPad ?~ 0.02) . (#chartAspect .~ ChartAspect))
+    & #hudOptions % #chartAspect .~ FixedAspect 1.5
+    & #hudOptions % #legends .~ [(10, defaultLegendOptions & #content .~ lrows & #textStyle % #size .~ 0.2 & #size .~ 0.2)]
+    & #hudOptions % #titles .~ [(11, defaultTitle "CubicPosition (Point 0 0) (Point 1 1) (Point 1 0) (Point 0 1)" & #style % #size .~ 0.08)]
   where
     p@(CubicPosition start end control1 control2) = CubicPosition (Point 0 0) (Point 1 1) (Point 1 0) (Point 0 1)
     ps = singletonCubic p
-    path' = Chart (PathA (defaultPathStyle & #color .~ setOpac 0.1 (palette1 2) & #borderColor .~ transparent) (fst <$> ps)) (PointXY . snd <$> ps)
-    curve = Chart (LineA $ defaultLineStyle & #width .~ 0.002 & #color .~ palette1 1) (PointXY . cubicBezier p . (/ 100.0) <$> [0 .. 100])
-    c0 = Chart (GlyphA defaultGlyphStyle) (PointXY <$> [start, end, control1, control2, cubicBezier p 0.8])
-    bbox = Chart (RectA $ defaultRectStyle & #borderSize .~ 0.002 & #color .~ Colour 0.4 0.4 0.8 0.1 & #borderColor .~ Colour 0.5 0.5 0.5 1) [RectXY (cubicBox p)]
+    path' = PathChart pathStyle ps
+    curve = LineChart curveStyle [cubicBezier p . (/ 100.0) <$> [0 .. 100]]
+    c0 = GlyphChart defaultGlyphStyle [start, end]
+    c1 = GlyphChart controlStyle [control1, control2]
+    bbox = RectChart bbs [cubicBox p]
+    bbs = defaultRectStyle & #borderSize .~ 0.002 & #color .~ palette1a 0 0.05 & #borderColor .~ grey 0.4 1
+    pathStyle = defaultPathStyle & #color .~ palette1a 3 0.2 & #borderColor .~ transparent
+    controlStyle = defaultGlyphStyle & #shape .~ CircleGlyph
+    curveStyle = defaultLineStyle & #size .~ 0.002 & #color .~ palette1 7
+    lrows =
+      [ ("Path Fill", PathChart pathStyle [StartP zero]),
+        ("Path Chord", LineChart curveStyle [[zero]]),
+        ("Path Endpoints", GlyphChart defaultGlyphStyle [zero]),
+        ("Path Control Point", GlyphChart controlStyle [zero]),
+        ("Bounding Box", RectChart (bbs & #borderSize .~ 0.01) [one])
+      ]
 
--- | The common way to create a surface chart is usually a grid over a function.
+-- | The common way to create a surface chart (or contour chart or heat map) is usually a grid over a function, a process reified in 'surfacef'.
 --
+-- This is also an example of 'mix' and 'mixes'. In this example, colors with the same lightness have been chosen in the gradient and the result should appear a fairly uniform lightness across the surface.
+--
 -- ![surface example](other/surface.svg)
 surfaceExample :: ChartSvg
 surfaceExample =
   mempty
-    & #hudList .~ hs
-    & #chartList .~ cs
-    & #svgOptions .~ (defaultSvgOptions & #cssOptions .~ UseCssCrisp)
+    & #extraHuds .~ h
+    & #charts .~ named "surface" cs
+    & #svgOptions .~ (defaultSvgOptions & #cssOptions % #shapeRendering .~ UseCssCrisp)
   where
     t = "rosenbrock"
-    grain = Point 20 20
+    grain = Point 100 100
     r = one
-    f = fst . bimap (-1.0 *) (-1.0 .*) . rosenbrock 1 10
-    (cs, hs) =
+    f = fst . bimap ((-1.0) *) (fmap ((-1.0) *)) . rosenbrock 1 10
+    evenColors = trimColour . over lightness' (const 0.55) . palette1 <$> [0 .. 5]
+    (cs, h) =
       surfacefl
         f
         ( defaultSurfaceOptions
             & #soGrain .~ grain
             & #soRange .~ r
-            & #soStyle . #surfaceColors .~ (palette1 <$> [0 .. 5])
+            & #soStyle % #surfaceColors .~ evenColors
         )
-        ( defaultSurfaceLegendOptions t
-            & #sloStyle . #surfaceColors .~ (palette1 <$> [0 .. 5])
+        ( defaultSurfaceLegendOptions dark t
+            & #sloStyle % #surfaceColors .~ evenColors
+            & #sloLegendOptions % #textStyle % #color .~ dark
+            & #sloAxisOptions .~ surfaceAxisOptions dark
+            & #sloLegendOptions % #frame %~ fmap (#borderColor .~ dark)
         )
 
 -- | arrow example
@@ -592,13 +564,30 @@
 arrowExample :: ChartSvg
 arrowExample =
   mempty
-    & #hudOptions .~ (defaultHudOptions & #hudAxes %~ fmap (#axisTick . #ltick .~ Nothing))
-    & #chartList .~ ((\p -> chart (tail . f $ p) (angle . f $ p) p) <$> ps)
-    & #svgOptions .~ defaultSvgOptions
+    & #hudOptions .~ (defaultHudOptions & #axes %~ fmap (second (#ticks % #ltick .~ Nothing)))
+    & #charts .~ named "arrow" ((\p -> gchart (tail' . f $ p) (angle . f $ p) p) <$> ps)
+    & #svgOptions % #cssOptions % #preferColorScheme .~ PreferHud
+    & #svgOptions % #cssOptions % #cssExtra
+      .~ [trimming|
+{
+  .arrow g {
+    fill: $hexDark;
+    stroke: $hexDark;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .arrow g {
+    fill: $hexLight;
+    stroke: $hexLight;
+  }
+}
+|]
   where
-    f = snd . bimap (-1.0 *) (-1.0 .*) . rosenbrock 1 10
+    hexLight = hex light
+    hexDark = hex dark
+    f = snd . bimap ((-1.0) *) (fmap ((-1.0) *)) . rosenbrock 1 10
     ps = grid MidPos (one :: Rect Double) (Point 10 10 :: Point Int) :: [Point Double]
-    arrow = PathGlyph "M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3"
+    arrow = PathGlyph "M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" NoScaleBorder
     gs s r' =
       defaultGlyphStyle
         & #borderSize .~ 0.05
@@ -606,10 +595,10 @@
         & #borderColor .~ dark
         & #rotation .~ Just r'
         & #shape .~ arrow
-    chart s r' p = Chart (GlyphA (gs s r')) [PointXY p]
+    gchart s r' p = GlyphChart (gs s r') [p]
 
-    tail :: Point Double -> Double
-    tail = max 0.05 . min 0.02 . (* 0.01) . (/ avmag) . norm
+    tail' :: Point Double -> Double
+    tail' = max 0.05 . min 0.02 . (* 0.01) . (/ avmag) . norm
 
     avmag = sum (norm . f <$> ps) / fromIntegral (length ps)
 
@@ -621,38 +610,167 @@
 -- > f'y = 2 * b * y - 2 * b * x^2
 -- > f a b (Point x y) = (a^2 - 2ax + x^2 + b * y^2 - b * 2 * y * x^2 + b * x^4, Point (-2a + 2 * x - b * 4 * y * x + 4 * b * x ^ 3), 2 * b * y - 2 * b * x^2)
 rosenbrock :: Double -> Double -> Point Double -> (Double, Point Double)
-rosenbrock a b (Point x y) = (a ^ 2 - 2 * a * x + x ^ 2 + b * y ^ 2 - b * 2 * y * x ^ 2 + b * x ^ 4, Point (-2 * a + 2 * x - b * 4 * y * x + 4 * b * x ^ 3) (2 * b * y - 2 * b * x ^ 2))
+rosenbrock a b (Point x y) = (a ** 2 - 2 * a * x + x ** 2 + b * y ** 2 - b * 2 * y * x ** 2 + b * x ** 4, Point (-2 * a + 2 * x - b * 4 * y * x + 4 * b * x ** 3) (2 * b * y - 2 * b * x ** 2))
 
--- | Run this to refresh haddock example SVGs.
+-- | date example
+--
+-- A hud that has date as the x-axis, and time as the y-axis. See 'placedTimeLabelContinuous'.
+--
+-- ![date example](other/date.svg)
+dateExample :: ChartSvg
+dateExample =
+  mempty
+    & #charts .~ blank (Rect 0 1 0 1)
+    & #hudOptions
+      .~ ( mempty & #chartAspect .~ FixedAspect 1.5 & #axes
+             .~ [ (1, defaultAxisOptions & #place .~ PlaceLeft & #ticks % #style .~ TickPlaced tsTime),
+                  (1, defaultAxisOptions & #ticks % #style .~ TickPlaced tsDate)
+                ]
+         )
+  where
+    tsTime = placedTimeLabelContinuous PosIncludeBoundaries Nothing 12 (Range (UTCTime (fromGregorian 2021 12 6) (toDiffTime 0)) (UTCTime (fromGregorian 2021 12 7) (toDiffTime 0)))
+    tsDate = placedTimeLabelContinuous PosIncludeBoundaries (Just (pack "%d %b")) 2 (Range (UTCTime (fromGregorian 2021 12 6) (toDiffTime 0)) (UTCTime (fromGregorian 2022 3 13) (toDiffTime 0)))
+
+-- | gradient example
+--
+-- Mixing Colours using the <https://bottosson.github.io/posts/oklab/ oklch> color model.
+--
+-- ![gradient example](other/gradient.svg)
+gradientExample :: ChartSvg
+gradientExample = gradient (Just (orig / 360)) 100 6 100 c0 c1
+  where
+    ok = LCHA 0.5 0.12 127 1
+    c0 = ok & lch' % hLCH' .~ 0.001
+    c1 = ok & lch' % hLCH' .~ 360
+    orig = view (lch' % hLCH') ok
+
+gradientChart_ :: Int -> LCHA -> LCHA -> [Chart]
+gradientChart_ grain c0 c1 =
+  (\(r, c) -> RectChart (defaultRectStyle & #color .~ c & #borderSize .~ 0) [r])
+    . (\x -> (Rect x (x + d) 0 1, view lcha2colour' (mixLCHA x c0 c1)))
+    <$> grid LowerPos (Range 0 1) grain
+  where
+    d = 1 / fromIntegral grain
+
+gradient :: Maybe Double -> Double -> Double -> Int -> LCHA -> LCHA -> ChartSvg
+gradient marker h fa grain ok0 ok1 =
+  mempty
+    & #svgOptions % #svgHeight
+    .~ h
+    & #svgOptions % #cssOptions % #shapeRendering
+    .~ UseCssCrisp
+    & #hudOptions
+    .~ ( mempty
+           & #chartAspect .~ FixedAspect fa
+           & #frames .~ [(20, FrameOptions (Just (border 0.004 white)) 0.1)]
+       )
+    & #charts
+    .~ named "gradient" (gradientChart_ grain ok0 ok1) <> strip
+  where
+    strip = case marker of
+      Nothing -> mempty
+      Just marker' ->
+        named
+          "border"
+          [borderStrip 0.02 light (Rect (marker' - 0.02) (marker' + 0.02) (-0.1) 1.1)]
+
+borderStrip :: Double -> Colour -> Rect Double -> Chart
+borderStrip w c r = RectChart (defaultRectStyle & #color .~ transparent & #borderSize .~ w & #borderColor .~ c) [r]
+
+-- | Color wheel displaying palette1 choices
+--
+-- -- ![wheel example](other/wheel.svg)
+wheelExample :: ChartSvg
+wheelExample = dotMap 0.01 50 0.5 0.5 (palette1 <$> [0 .. 7])
+
+-- | The dotMap
+--
+-- > dotMap 0.01 20 0.8 0.3
+dotMap :: Double -> Int -> Double -> Double -> [Colour] -> ChartSvg
+dotMap s grain l maxchroma cs =
+  mempty
+    & #hudOptions
+    .~ defaultHudOptions
+    & #charts
+    .~ named "dots" (dot_ <$> cs)
+    <> named
+      "wheel"
+      ( ( \(p, c) ->
+            GlyphChart
+              ( defaultGlyphStyle
+                  & #size .~ s
+                  & #color .~ c
+                  & #borderSize .~ 0
+              )
+              [p]
+        )
+          <$> filter (validColour . snd) (wheelPoints grain l maxchroma)
+      )
+
+dot_ :: Colour -> Chart
+dot_ x = (\(p, c) -> GlyphChart (defaultGlyphStyle & #size .~ 0.08 & #color .~ c & #borderColor .~ Colour 0.5 0.5 0.5 1 & #shape .~ CircleGlyph) [p]) (colour2Point x, x)
+  where
+    colour2Point c = review lcha2colour' c & (\(LCHA _ ch h _) -> uncurry Point (review xy2ch' (ch, h)))
+
+wheelPoints :: Int -> Double -> Double -> [(Point Double, Colour)]
+wheelPoints grain l maxchroma =
+  (\(Point c h) -> (uncurry Point $ view (re xy2ch') (c, h), view lcha2colour' (LCHA l c h 1)))
+    <$> grid LowerPos (Rect 0 maxchroma 0 360) (Point grain grain)
+
+-- | Adding reference points and bounding boxes to visualize chart alignment for use in debugging charts.
+--
+-- -- ![debug example](other/debug.svg)
+debugExample :: ChartSvg -> ChartSvg
+debugExample cs =
+  mempty
+    & set #charts (e1 <> e2 <> e3)
+  where
+    e1 = toChartTree cs
+    e2 = glyphize (defaultGlyphStyle & #size .~ 0.01 & #shape .~ CircleGlyph) e1
+    e3 = rectangularize (defaultRectStyle & #borderColor .~ dark & #borderSize .~ 0.001 & #color % opac' .~ 0.05) e1
+
+pathChartSvg :: [(FilePath, ChartSvg)]
+pathChartSvg =
+  [ ("other/unit.svg", unitExample),
+    ("other/rect.svg", rectExample),
+    ("other/text.svg", textExample),
+    ("other/glyphs.svg", glyphsExample),
+    ("other/line.svg", lineExample),
+    ("other/hudoptions.svg", hudOptionsExample),
+    ("other/bar.svg", barExample),
+    ("other/surface.svg", surfaceExample),
+    ("other/wave.svg", waveExample),
+    ("other/venn.svg", vennExample),
+    ("other/path.svg", pathExample),
+    ("other/arcflags.svg", arcFlagsExample),
+    ("other/ellipse.svg", ellipseExample (FixedAspect 1.7)),
+    ("other/ellipse2.svg", ellipseExample (FixedAspect 2)),
+    ("other/quad.svg", quadExample),
+    ("other/cubic.svg", cubicExample),
+    ("other/arrow.svg", arrowExample),
+    ("other/date.svg", dateExample),
+    ("other/gradient.svg", gradientExample),
+    ("other/wheel.svg", wheelExample),
+    ("other/debug.svg", debugExample lineExample)
+  ]
+
+-- | Run this to refresh example SVG's.
 writeAllExamples :: IO ()
 writeAllExamples = do
-  -- charts in Chart docs
-  writeChartSvg "other/unit.svg" unitExample
-  writeChartSvg "other/rect.svg" rectExample
-  writeChartSvg "other/text.svg" textExample
-  writeChartSvg "other/glyphs.svg" glyphsExample
-  writeChartSvg "other/line.svg" lineExample
-  writeChartSvg "other/svgoptions.svg" svgOptionsExample
-  writeChartSvg "other/hudoptions.svg" hudOptionsExample
-  writeChartSvg "other/legend.svg" legendExample
-  -- charts in Chart.Bar docs
-  writeChartSvg "other/bar.svg" barExample
-  -- charts in Chart.Surface docs
-  writeChartSvg "other/surface.svg" surfaceExample
-  -- extra Charts
-  writeChartSvg "other/wave.svg" waveExample
-  writeChartSvg "other/lglyph.svg" lglyphExample
-  writeChartSvg "other/glines.svg" glinesExample
-  writeChartSvg "other/compound.svg" compoundExample
-  writeChartSvg "other/textlocal.svg" textLocalExample
-  writeChartSvg "other/label.svg" labelExample
-  writeChartSvg "other/venn.svg" vennExample
-  writeChartSvg "other/path.svg" pathExample
-  writeChartSvg "other/arc.svg" arcExample
-  writeChartSvg "other/arcflags.svg" arcFlagsExample
-  writeChartSvg "other/ellipse.svg" ellipseExample
-  writeChartSvg "other/quad.svg" quadExample
-  writeChartSvg "other/cubic.svg" cubicExample
-  writeChartSvg "other/arrow.svg" arrowExample
-
+  sequence_ $ uncurry writeChartSvg <$> pathChartSvg
   putStrLn "ok"
+
+-- | Version of charts with a dark-friendly hud
+writeAllExamplesDark :: IO ()
+writeAllExamplesDark = do
+  sequence_ $
+    uncurry writeChartSvg
+      . bimap
+        ((<> "d.svg") . reverse . drop 4 . reverse)
+        ( \x ->
+            x
+              & #hudOptions %~ colourHudOptions (rgb light)
+              & #svgOptions % #cssOptions % #preferColorScheme .~ PreferDark
+        )
+      <$> pathChartSvg
+  putStrLn "dark version, ok"
diff --git a/src/Chart/Hud.hs b/src/Chart/Hud.hs
new file mode 100644
--- /dev/null
+++ b/src/Chart/Hud.hs
@@ -0,0 +1,1071 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE OverloadedLabels #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TupleSections #-}
+{-# OPTIONS_GHC -Wall #-}
+
+-- | A hud stands for <https://en.wikipedia.org/wiki/Head-up_display head-up display>, and is a collective noun used to name chart elements that assist in data interpretation or otherwise annotate and decorate data.
+--
+-- This includes axes, titles, borders, frames, background canvaii, tick marks and tick value labels.
+--
+module Chart.Hud
+  ( -- * Hud
+    Hud (..),
+    Priority,
+    HudBox,
+    CanvasBox,
+    DataBox,
+    HudChart (..),
+    canvasBox',
+    canvasStyleBox',
+    hudBox',
+    hudStyleBox',
+
+    -- * Hud Processing
+    runHudWith,
+    runHud,
+
+    -- * HudOptions
+    HudOptions (..),
+    defaultHudOptions,
+    colourHudOptions,
+    toHuds,
+
+    -- * Hud Effects
+    closes,
+    fromEffect,
+    applyChartAspect,
+    getHudBox,
+
+    -- * Hud primitives
+    AxisOptions (..),
+    defaultAxisOptions,
+    flipAxis,
+    FrameOptions (..),
+    defaultFrameOptions,
+    Place (..),
+    placeText,
+    AxisBar (..),
+    defaultAxisBar,
+    Title (..),
+    defaultTitle,
+    Ticks (..),
+    defaultGlyphTick,
+    defaultTextTick,
+    defaultLineTick,
+    defaultTicks,
+    TickStyle (..),
+    defaultTickStyle,
+    tickStyleText,
+    TickExtend (..),
+    adjustTicks,
+    Adjustments (..),
+    defaultAdjustments,
+    LegendOptions (..),
+    defaultLegendOptions,
+
+    -- * Option to Hud
+    frameHud,
+    legend,
+    legendHud,
+    legendFrame,
+  )
+where
+
+import Chart.Data
+import Chart.Primitive
+import Chart.Style
+import Control.Monad.State.Lazy
+import Data.Bifunctor
+import Data.Bool
+import Data.Colour
+import Data.Foldable hiding (sum)
+import Data.FormatN
+import qualified Data.List as List
+import Data.Maybe
+import Data.Path
+import Data.Text (Text)
+import Data.Tuple
+import GHC.Generics hiding (to)
+import qualified NumHask.Prelude as NH
+import Optics.Core
+import Prelude
+
+-- $setup
+--
+-- >>> :set -XOverloadedLabels
+-- >>> :set -XOverloadedStrings
+-- >>> import Chart
+-- >>> import Optics.Core
+
+-- * Hud
+
+-- | The priority of a Hud element or transformation, lower value means higher priority.
+--
+-- Lower priority (higher values) huds will tend to be placed on the outside of a chart.
+--
+-- Equal priority values will be placed in the same process step.
+type Priority = Double
+
+-- | Heads-up display additions to charts
+--
+-- A Hud is composed of:
+--
+-- - A priority for the hud element in the chart folding process.
+--
+-- - A chart tree with a state dependency on the chart being created.
+data Hud = Hud
+  { -- | priority for ordering of transformations
+    priority :: Priority,
+    -- | additional charts
+    hud :: State HudChart ChartTree
+  }
+  deriving (Generic)
+
+-- | Type to track the split of Chart elements into Hud and Canvas
+--
+-- - charts: charts that form the canvas or data elements of the chart; the rectangular dimension which is considered to be the data representation space.
+--
+-- - hud: charts that form the Hud.
+--
+-- - dataBox: The bounding box of the underlying data domain.
+--
+-- This is done to support functionality where we can choose whether to normalise the chart aspect based on the entire chart (FixedAspect) or on just the data visualisation space (CanvasAspect).
+data HudChart = HudChart
+  { chart :: ChartTree,
+    hud :: ChartTree,
+    dataBox :: DataBox
+  }
+  deriving (Eq, Show, Generic)
+
+-- | A type for Rect to represent the entire bounding box of a chart, including the Hud
+type HudBox = Rect Double
+
+-- | A type for Rect to represent the bounding box of the canvas portion of a chart, excluding Hud elements
+type CanvasBox = Rect Double
+
+-- | A type for Rect to represent the bounding box of the data elements a chart, which can be a different metric to Canvas and Hud Rects
+type DataBox = Rect Double
+
+canvasBox_ :: HudChart -> Maybe CanvasBox
+canvasBox_ = boxes . foldOf (#chart % charts')
+
+canvasRebox_ :: HudChart -> Maybe (Rect Double) -> HudChart
+canvasRebox_ cs r =
+  cs
+    & over (#chart % chart') (maybeProjectWith r (canvasBox_ cs))
+    & over (#hud % chart') (maybeProjectWith r (canvasBox_ cs))
+
+-- | A lens between a HudChart and the bounding box of the canvas
+canvasBox' :: Lens' HudChart (Maybe CanvasBox)
+canvasBox' =
+  lens canvasBox_ canvasRebox_
+
+-- | A lens between a HudChart and the bounding box of the canvas, including style extensions.
+canvasStyleBox' :: Getter HudChart (Maybe CanvasBox)
+canvasStyleBox' = to (styleBoxes . foldOf (#chart % charts'))
+
+hudStyleBox_ :: HudChart -> Maybe HudBox
+hudStyleBox_ = styleBoxes . (\x -> foldOf (#chart % charts') x <> foldOf (#hud % charts') x)
+
+-- | a lens between a HudChart and the bounding box of the hud.
+hudStyleBox' :: Getter HudChart (Maybe HudBox)
+hudStyleBox' = to hudStyleBox_
+
+hudBox_ :: HudChart -> Maybe HudBox
+hudBox_ = boxes . (\x -> foldOf (#chart % charts') x <> foldOf (#hud % charts') x)
+
+hudRebox_ :: HudChart -> Maybe HudBox -> HudChart
+hudRebox_ cs r =
+  cs
+    & over #chart (over chart' (maybeProjectWith r' (hudBox_ cs)))
+    & over #hud (over chart' (maybeProjectWith r' (hudBox_ cs)))
+  where
+    r' = (NH.-) <$> r <*> ((NH.-) <$> hudStyleBox_ cs <*> hudBox_ cs)
+
+-- | lens between a HudChart and its hud bounding box, not including style.
+hudBox' :: Lens' HudChart (Maybe HudBox)
+hudBox' =
+  lens hudBox_ hudRebox_
+
+appendHud :: ChartTree -> HudChart -> HudChart
+appendHud cs x =
+  x & over #hud (<> cs)
+
+-- | Absorb a series of state-dependent tress into state.
+closes :: (Traversable f) => f (State HudChart ChartTree) -> State HudChart ()
+closes xs = do
+  xs' <- fmap (mconcat . toList) $ sequence xs
+  modify (appendHud xs')
+
+-- | Wrap a state effect into a Hud
+fromEffect :: Priority -> State HudChart () -> Hud
+fromEffect p s = Hud p (s >> pure mempty)
+
+-- | Apply a ChartAspect
+applyChartAspect :: ChartAspect -> State HudChart ()
+applyChartAspect fa = do
+  hc <- get
+  case fa of
+    ChartAspect -> pure ()
+    _ -> modify (set hudBox' (getHudBox fa hc))
+
+-- | Supply the bounding box of the HudChart given a ChartAspect.
+getHudBox :: ChartAspect -> HudChart -> Maybe HudBox
+getHudBox fa c =
+  case fa of
+    FixedAspect a -> Just (aspect a)
+    CanvasAspect a ->
+      case (view hudBox' c, view canvasBox' c) of
+        (Nothing, _) -> Nothing
+        (_, Nothing) -> Nothing
+        (Just hb, Just cb) -> Just (aspect (a * ratio hb / ratio cb))
+    ChartAspect -> view hudBox' c
+
+-- | Combine huds and charts to form a new Chart using the supplied initial canvas and data dimensions. Note that chart data is transformed by this computation (a linear type might be useful here).
+runHudWith ::
+  -- | initial canvas
+  CanvasBox ->
+  -- | initial data space
+  DataBox ->
+  -- | huds to add
+  [Hud] ->
+  -- | underlying chart
+  ChartTree ->
+  -- | integrated chart tree
+  ChartTree
+runHudWith cb db hs cs =
+  hs
+    & List.sortOn (view #priority)
+    & List.groupBy (\a b -> view #priority a == view #priority b)
+    & mapM_ (closes . fmap (view #hud))
+    & flip
+      execState
+      ( HudChart
+          (cs & over chart' (projectWith cb db))
+          mempty
+          db
+      )
+    & (\x -> group (Just "chart") [view #chart x] <> group (Just "hud") [view #hud x])
+
+-- | Combine huds and charts to form a new ChartTree with a supplied initial canvas dimension.
+--
+-- Note that the original chart data are transformed and irrevocably forgotten by this computation.
+runHud ::
+  -- | initial canvas dimension
+  CanvasBox ->
+  -- | huds
+  [Hud] ->
+  -- | underlying charts
+  ChartTree ->
+  -- | integrated chart list
+  ChartTree
+runHud ca hs cs = runHudWith ca (singletonGuard $ boxes (foldOf charts' cs)) hs cs
+
+-- | Typical, configurable hud elements. Anything else can be hand-coded as a 'Hud'.
+--
+-- ![hud example](other/hudoptions.svg)
+data HudOptions = HudOptions
+  { chartAspect :: ChartAspect,
+    axes :: [(Priority, AxisOptions)],
+    frames :: [(Priority, FrameOptions)],
+    legends :: [(Priority, LegendOptions)],
+    titles :: [(Priority, Title)]
+  }
+  deriving (Eq, Show, Generic)
+
+instance Semigroup HudOptions where
+  (<>) (HudOptions _ a c l t) (HudOptions asp a' c' l' t') =
+    HudOptions asp (a <> a') (c <> c') (l <> l') (t <> t')
+
+instance Monoid HudOptions where
+  mempty = HudOptions (FixedAspect 1.5) [] [] [] []
+
+-- | The official hud options.
+defaultHudOptions :: HudOptions
+defaultHudOptions =
+  HudOptions
+    (FixedAspect 1.5)
+    [ (5, defaultAxisOptions),
+      (5, defaultAxisOptions & set #place PlaceLeft)
+    ]
+    [(1, defaultFrameOptions)]
+    []
+    []
+
+priorities :: HudOptions -> [Priority]
+priorities o =
+  (fst <$> view #axes o)
+    <> (fst <$> view #frames o)
+    <> (fst <$> view #legends o)
+    <> (fst <$> view #titles o)
+
+lastPriority :: HudOptions -> Priority
+lastPriority o = case priorities o of
+  [] -> 0
+  xs -> maximum xs
+
+-- | Make Huds and potential data box extension; from a HudOption and an initial data box.
+toHuds :: HudOptions -> DataBox -> ([Hud], DataBox)
+toHuds o db =
+  (,db''') $
+    (as' & fmap (uncurry Hud . second axis))
+      <> (view #frames o & fmap (uncurry Hud . second frameHud))
+      <> (view #legends o & fmap (uncurry Hud . second legend))
+      <> (view #titles o & fmap (uncurry Hud . second title))
+      <> [ fromEffect (lastPriority o + 1) $
+             applyChartAspect (view #chartAspect o)
+         ]
+  where
+    (as', db''') =
+      foldr
+        ( \a (as, db') ->
+            let (db'', a') = freezeTicks db' (snd a)
+             in (as <> [(fst a, a')], db'')
+        )
+        ([], db)
+        (view #axes o)
+
+freezeTicks :: DataBox -> AxisOptions -> (DataBox, AxisOptions)
+freezeTicks db a =
+  bimap
+    (\x -> placeRect (view #place a) x db)
+    (\x -> a & set (#ticks % #style) x)
+    (toTickPlaced (placeRange (view #place a) db) (view (#ticks % #style) a))
+
+-- | compute tick components given style, ranges and formatting
+makePlacedTicks :: TickStyle -> Range Double -> ([(Double, Text)], Maybe (Range Double))
+makePlacedTicks s r =
+  case s of
+    TickNone -> ([], Nothing)
+    TickRound f n e ->
+      ( zip
+          ticks0
+          (formatNs 4 f ticks0),
+        bool (space1 ticks0) Nothing (e == NoTickExtend)
+      )
+      where
+        ticks0 = gridSensible OuterPos (e == NoTickExtend) r (fromIntegral n :: Integer)
+    TickExact f n -> (zip ticks0 (formatNs 4 f ticks0), Nothing)
+      where
+        ticks0 = grid OuterPos r n
+    TickLabels ls ->
+      ( zip
+          ( project (Range 0 (fromIntegral $ length ls)) r
+              <$> ((\x -> x - 0.5) . fromIntegral <$> [1 .. length ls])
+          )
+          ls,
+        Nothing
+      )
+    TickPlaced xs -> (xs, Nothing)
+
+toTickPlaced :: Range Double -> TickStyle -> (Range Double, TickStyle)
+toTickPlaced r t@TickRound {} = (fromMaybe r ext, TickPlaced ts)
+  where
+    (ts, ext) = makePlacedTicks t r
+toTickPlaced r t = (r, t)
+
+placeRect :: Place -> Range Double -> Rect Double -> Rect Double
+placeRect pl' (Range a0 a1) (Rect x z y w) = case pl' of
+  PlaceRight -> Rect x z a0 a1
+  PlaceLeft -> Rect x z a0 a1
+  _ -> Rect a0 a1 y w
+
+placeRange :: Place -> HudBox -> Range Double
+placeRange pl (Rect x z y w) = case pl of
+  PlaceRight -> Range y w
+  PlaceLeft -> Range y w
+  _ -> Range x z
+
+placeOrigin :: Place -> Double -> Point Double
+placeOrigin pl x
+  | pl == PlaceTop || pl == PlaceBottom = Point x 0
+  | otherwise = Point 0 x
+
+axis :: AxisOptions -> State HudChart ChartTree
+axis a = do
+  t <- makeTick a
+  b <- maybe (pure mempty) (makeAxisBar (view #place a)) (view #bar a)
+  pure (group (Just "axis") [t, b])
+
+-- | alter a colour with a function
+colourHudOptions :: (Colour -> Colour) -> HudOptions -> HudOptions
+colourHudOptions f o =
+  o
+    & over #frames (fmap (second fFrame))
+    & over #titles (fmap (second (over (#style % #color) f)))
+    & over #axes (fmap (second fAxis))
+    & over #legends (fmap (second fLegend))
+  where
+    fAxis :: AxisOptions -> AxisOptions
+    fAxis a =
+      a
+        & over #bar (fmap (over (#style % #color) f))
+        & over
+          (#ticks % #gtick)
+          (fmap (first (over #color f . over #borderColor f)))
+        & over
+          (#ticks % #ttick)
+          (fmap (first (over #color f)))
+        & over
+          (#ticks % #ltick)
+          (fmap (first (over #color f)))
+    fLegend :: LegendOptions -> LegendOptions
+    fLegend a =
+      a
+        & over #textStyle (over #color f)
+        & over #frame (fmap (over #color f . over #borderColor f))
+    fFrame :: FrameOptions -> FrameOptions
+    fFrame a =
+      a
+        & over #frame (fmap (over #color f . over #borderColor f))
+
+-- | Placement of elements around (what is implicity but maybe shouldn't just be) a rectangular canvas
+data Place
+  = PlaceLeft
+  | PlaceRight
+  | PlaceTop
+  | PlaceBottom
+  | PlaceAbsolute (Point Double)
+  deriving (Show, Eq, Generic)
+
+-- | textifier
+placeText :: Place -> Text
+placeText p =
+  case p of
+    PlaceTop -> "Top"
+    PlaceBottom -> "Bottom"
+    PlaceLeft -> "Left"
+    PlaceRight -> "Right"
+    PlaceAbsolute _ -> "Absolute"
+
+-- | axis options
+data AxisOptions = AxisOptions
+  { bar :: Maybe AxisBar,
+    adjust :: Maybe Adjustments,
+    ticks :: Ticks,
+    place :: Place
+  }
+  deriving (Eq, Show, Generic)
+
+-- | The official axis
+defaultAxisOptions :: AxisOptions
+defaultAxisOptions = AxisOptions (Just defaultAxisBar) (Just defaultAdjustments) defaultTicks PlaceBottom
+
+-- | The bar on an axis representing the x or y plane.
+--
+-- >>> defaultAxisBar
+-- AxisBar {style = RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.05 0.05 0.05 0.40}, size = 4.0e-3, buffer = 1.0e-2, overhang = 2.0e-3}
+data AxisBar = AxisBar
+  { style :: RectStyle,
+    size :: Double,
+    buffer :: Double,
+    -- | extension over the edges of the axis range
+    overhang :: Double
+  }
+  deriving (Show, Eq, Generic)
+
+-- | The official axis bar
+defaultAxisBar :: AxisBar
+defaultAxisBar = AxisBar (RectStyle 0 transparent (set opac' 0.4 dark)) 0.004 0.01 0.002
+
+-- | Options for titles.  Defaults to center aligned, and placed at Top of the hud
+--
+-- >>> defaultTitle "title"
+-- Title {text = "title", style = TextStyle {size = 0.12, color = Colour 0.05 0.05 0.05 1.00, anchor = AnchorMiddle, hsize = 0.45, vsize = 1.1, vshift = -0.25, rotation = Nothing, scalex = ScaleX, frame = Nothing}, place = PlaceTop, anchor = AnchorMiddle, buffer = 4.0e-2}
+data Title = Title
+  { text :: Text,
+    style :: TextStyle,
+    place :: Place,
+    anchor :: Anchor,
+    buffer :: Double
+  }
+  deriving (Show, Eq, Generic)
+
+-- | The official hud title
+defaultTitle :: Text -> Title
+defaultTitle txt =
+  Title
+    txt
+    ( defaultTextStyle
+        & #size .~ 0.12
+    )
+    PlaceTop
+    AnchorMiddle
+    0.04
+
+-- | xy coordinate markings
+--
+-- >>> defaultTicks
+-- Ticks {style = TickRound (FormatN {fstyle = FSCommaPrec, sigFigs = Just 2, addLPad = True}) 8 TickExtend, gtick = Just (GlyphStyle {size = 3.0e-2, color = Colour 0.05 0.05 0.05 0.40, borderColor = Colour 0.05 0.05 0.05 0.40, borderSize = 4.0e-3, shape = VLineGlyph, rotation = Nothing, translate = Nothing},3.0e-2), ttick = Just (TextStyle {size = 5.0e-2, color = Colour 0.05 0.05 0.05 1.00, anchor = AnchorMiddle, hsize = 0.45, vsize = 1.1, vshift = -0.25, rotation = Nothing, scalex = ScaleX, frame = Nothing},3.3e-2), ltick = Just (LineStyle {size = 5.0e-3, color = Colour 0.05 0.05 0.05 0.05, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing},0.0)}
+data Ticks = Ticks
+  { style :: TickStyle,
+    gtick :: Maybe (GlyphStyle, Double),
+    ttick :: Maybe (TextStyle, Double),
+    ltick :: Maybe (LineStyle, Double)
+  }
+  deriving (Show, Eq, Generic)
+
+-- | The official glyph tick
+defaultGlyphTick :: GlyphStyle
+defaultGlyphTick =
+  defaultGlyphStyle
+    & #borderSize .~ 0.004
+    & #shape .~ VLineGlyph
+    & #color .~ set opac' 0.4 dark
+    & #borderColor .~ set opac' 0.4 dark
+
+-- | The official text tick
+defaultTextTick :: TextStyle
+defaultTextTick =
+  defaultTextStyle & #size .~ 0.05
+
+-- | The official line tick
+defaultLineTick :: LineStyle
+defaultLineTick =
+  defaultLineStyle
+    & #size .~ 5.0e-3
+    & #color %~ set opac' 0.05
+
+-- | The official tick
+defaultTicks :: Ticks
+defaultTicks =
+  Ticks
+    defaultTickStyle
+    (Just (defaultGlyphTick, 0.03))
+    (Just (defaultTextTick, 0.033))
+    (Just (defaultLineTick, 0))
+
+-- | Style of tick marks on an axis.
+data TickStyle
+  = -- | no ticks on axis
+    TickNone
+  | -- | specific labels (equidistant placement)
+    TickLabels [Text]
+  | -- | sensibly rounded ticks, a guide to how many, and whether to extend beyond the data bounding box
+    TickRound FormatN Int TickExtend
+  | -- | exactly n equally spaced ticks
+    TickExact FormatN Int
+  | -- | specific labels and placement
+    TickPlaced [(Double, Text)]
+  deriving (Show, Eq, Generic)
+
+-- | The official tick style
+defaultTickStyle :: TickStyle
+defaultTickStyle = TickRound defaultFormatN 8 TickExtend
+
+-- | textifier
+tickStyleText :: TickStyle -> Text
+tickStyleText TickNone = "TickNone"
+tickStyleText TickLabels {} = "TickLabels"
+tickStyleText TickRound {} = "TickRound"
+tickStyleText TickExact {} = "TickExact"
+tickStyleText TickPlaced {} = "TickPlaced"
+
+-- | Whether Ticks are allowed to extend the data range
+data TickExtend = TickExtend | NoTickExtend deriving (Eq, Show, Generic)
+
+-- | options for prettifying axis decorations
+--
+-- >>> defaultAdjustments
+-- Adjustments {maxXRatio = 8.0e-2, maxYRatio = 6.0e-2, angledRatio = 0.12, allowDiagonal = True}
+data Adjustments = Adjustments
+  { maxXRatio :: Double,
+    maxYRatio :: Double,
+    angledRatio :: Double,
+    allowDiagonal :: Bool
+  }
+  deriving (Show, Eq, Generic)
+
+-- | The official hud adjustments.
+defaultAdjustments :: Adjustments
+defaultAdjustments = Adjustments 0.08 0.06 0.12 True
+
+-- | Legend options
+--
+-- >>> defaultLegendOptions
+-- LegendOptions {size = 0.3, buffer = 0.1, vgap = 0.2, hgap = 0.1, textStyle = TextStyle {size = 0.18, color = Colour 0.05 0.05 0.05 1.00, anchor = AnchorMiddle, hsize = 0.45, vsize = 1.1, vshift = -0.25, rotation = Nothing, scalex = ScaleX, frame = Nothing}, innerPad = 0.1, outerPad = 2.0e-2, frame = Just (RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.05 0.05 0.05 1.00, color = Colour 0.05 0.05 0.05 0.00}), place = PlaceRight, overallScale = 0.25, content = []}
+--
+data LegendOptions = LegendOptions
+  { size :: Double,
+    buffer :: Double,
+    vgap :: Double,
+    hgap :: Double,
+    textStyle :: TextStyle,
+    innerPad :: Double,
+    outerPad :: Double,
+    frame :: Maybe RectStyle,
+    place :: Place,
+    overallScale :: Double,
+    content :: [(Text, Chart)]
+  }
+  deriving (Show, Eq, Generic)
+
+-- | The official legend options
+defaultLegendOptions :: LegendOptions
+defaultLegendOptions =
+  LegendOptions
+    0.3
+    0.1
+    0.2
+    0.1
+    ( defaultTextStyle
+        & #size .~ 0.18
+    )
+    0.1
+    0.02
+    (Just (RectStyle 0.01 (set opac' 1 dark) (set opac' 0 dark)))
+    PlaceRight
+    0.25
+    []
+
+-- | flip an axis from being an X dimension to a Y one or vice-versa.
+flipAxis :: AxisOptions -> AxisOptions
+flipAxis ac = case ac ^. #place of
+  PlaceBottom -> ac & #place .~ PlaceLeft
+  PlaceTop -> ac & #place .~ PlaceRight
+  PlaceLeft -> ac & #place .~ PlaceBottom
+  PlaceRight -> ac & #place .~ PlaceTop
+  PlaceAbsolute _ -> ac
+
+-- | Options for hud frames
+--
+-- >>> defaultFrameOptions
+-- FrameOptions {frame = Just (RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 1.00 1.00 1.00 0.02}), buffer = 0.0}
+data FrameOptions = FrameOptions
+  { frame :: Maybe RectStyle,
+    buffer :: Double
+  }
+  deriving (Eq, Show, Generic)
+
+-- | The official hud frame
+defaultFrameOptions :: FrameOptions
+defaultFrameOptions = FrameOptions (Just (blob (grey 1 0.02))) 0
+
+-- | Make a frame hud transformation.
+frameHud :: FrameOptions -> State HudChart ChartTree
+frameHud o = do
+  hc <- get
+  let r = padRect (view #buffer o) <$> view hudStyleBox' hc
+  case r of
+    Nothing -> pure (unnamed [])
+    Just r' -> pure $ case view #frame o of
+      Nothing -> blank r'
+      Just rs -> named "frame" [RectChart rs [r']]
+
+bar_ :: Place -> AxisBar -> CanvasBox -> HudBox -> Chart
+bar_ pl b (Rect x z y w) (Rect x' z' y' w') =
+  RectChart (view #style b) $
+    case pl of
+      PlaceTop ->
+        [ Rect
+            (x - b ^. #overhang)
+            (z + b ^. #overhang)
+            (w' + b ^. #buffer)
+            (w' + b ^. #buffer + b ^. #size)
+        ]
+      PlaceBottom ->
+        [ Rect
+            (x - b ^. #overhang)
+            (z + b ^. #overhang)
+            (y' - b ^. #size - b ^. #buffer)
+            (y' - b ^. #buffer)
+        ]
+      PlaceLeft ->
+        [ Rect
+            (x' - b ^. #size - b ^. #buffer)
+            (x' - b ^. #buffer)
+            (y - b ^. #overhang)
+            (w + b ^. #overhang)
+        ]
+      PlaceRight ->
+        [ Rect
+            (z' + (b ^. #buffer))
+            (z' + (b ^. #buffer) + (b ^. #size))
+            (y - b ^. #overhang)
+            (w + b ^. #overhang)
+        ]
+      PlaceAbsolute (Point x'' _) ->
+        [ Rect
+            (x'' + (b ^. #buffer))
+            (x'' + (b ^. #buffer) + (b ^. #size))
+            (y - b ^. #overhang)
+            (w + b ^. #overhang)
+        ]
+
+makeAxisBar :: Place -> AxisBar -> State HudChart ChartTree
+makeAxisBar pl b = do
+  cb <- gets (view canvasBox')
+  hb <- gets (view hudStyleBox')
+  let c = bar_ pl b <$> cb <*> hb
+  pure $ named "axisbar" (maybeToList c)
+
+title_ :: Title -> HudBox -> Chart
+title_ t hb =
+  TextChart
+    (style' & #rotation .~ bool (Just rot) Nothing (rot == 0))
+    [(t ^. #text, addp (placePosTitle t hb) (alignPosTitle t hb))]
+  where
+    style'
+      | t ^. #anchor == AnchorStart =
+        #anchor .~ AnchorStart $ t ^. #style
+      | t ^. #anchor == AnchorEnd =
+        #anchor .~ AnchorEnd $ t ^. #style
+      | otherwise = t ^. #style
+    rot' = fromMaybe 0 (t ^. #style % #rotation)
+    rot
+      | t ^. #place == PlaceRight = pi / 2 + rot'
+      | t ^. #place == PlaceLeft = pi / 2 + rot'
+      | otherwise = rot'
+
+placePosTitle :: Title -> HudBox -> Point Double
+placePosTitle t (Rect x z y w) =
+  case t ^. #place of
+    PlaceTop -> Point ((x + z) / 2.0) (w - y' + (t ^. #buffer))
+    PlaceBottom -> Point ((x + z) / 2.0) (y - w' - (t ^. #buffer))
+    PlaceLeft -> Point (x + y' - (t ^. #buffer)) ((y + w) / 2.0)
+    PlaceRight -> Point (z + w' + (t ^. #buffer)) ((y + w) / 2.0)
+    PlaceAbsolute p -> p
+  where
+    (Rect _ _ y' w') = styleBoxText (view #style t) (view #text t) zero
+
+alignPosTitle :: Title -> HudBox -> Point Double
+alignPosTitle t (Rect x z y w)
+  | t ^. #anchor == AnchorStart
+      && (t ^. #place == PlaceTop || t ^. #place == PlaceBottom) =
+    Point ((x - z) / 2.0) 0.0
+  | t ^. #anchor == AnchorStart
+      && t ^. #place == PlaceLeft =
+    Point 0.0 ((y - w) / 2.0)
+  | t ^. #anchor == AnchorStart
+      && t ^. #place == PlaceRight =
+    Point 0.0 ((y - w) / 2.0)
+  | t ^. #anchor == AnchorEnd
+      && (t ^. #place == PlaceTop || t ^. #place == PlaceBottom) =
+    Point ((-x + z) / 2.0) 0.0
+  | t ^. #anchor == AnchorEnd
+      && t ^. #place == PlaceLeft =
+    Point 0.0 ((-y + w) / 2.0)
+  | t ^. #anchor == AnchorEnd
+      && t ^. #place == PlaceRight =
+    Point 0.0 ((-y + w) / 2.0)
+  | otherwise = Point 0.0 0.0
+
+-- | title append transformation.
+title :: Title -> State HudChart ChartTree
+title t = do
+  hb <- gets (view hudStyleBox')
+  pure $ named "title" (maybeToList $ title_ t <$> hb)
+
+placePos :: Place -> Double -> HudBox -> Point Double
+placePos pl b (Rect x z y w) = case pl of
+  PlaceTop -> Point 0 (w + b)
+  PlaceBottom -> Point 0 (y - b)
+  PlaceLeft -> Point (x - b) 0
+  PlaceRight -> Point (z + b) 0
+  PlaceAbsolute p -> p
+
+placeRot :: Place -> Maybe Double
+placeRot pl = case pl of
+  PlaceRight -> Just (pi / 2)
+  PlaceLeft -> Just (pi / 2)
+  _ -> Nothing
+
+textPos :: Place -> TextStyle -> Double -> Point Double
+textPos pl tt b = case pl of
+  PlaceTop -> Point 0 b
+  PlaceBottom -> Point 0 (-b - 0.5 * (tt ^. #vsize) * (tt ^. #size))
+  PlaceLeft ->
+    Point
+      (-b)
+      ((tt ^. #vshift) * (tt ^. #vsize) * (tt ^. #size))
+  PlaceRight ->
+    Point
+      b
+      ((tt ^. #vshift) * (tt ^. #vsize) * (tt ^. #size))
+  PlaceAbsolute p -> p
+
+placeTextAnchor :: Place -> (TextStyle -> TextStyle)
+placeTextAnchor pl
+  | pl == PlaceLeft = #anchor .~ AnchorEnd
+  | pl == PlaceRight = #anchor .~ AnchorStart
+  | otherwise = id
+
+placeGridLines :: Place -> HudBox -> Double -> Double -> [Point Double]
+placeGridLines pl (Rect x z y w) a b
+  | pl == PlaceTop || pl == PlaceBottom = [Point a (y - b), Point a (w + b)]
+  | otherwise = [Point (x - b) a, Point (z + b) a]
+
+-- | compute tick values and labels given options, ranges and formatting
+ticksR :: TickStyle -> Range Double -> Range Double -> [(Double, Text)]
+ticksR s d r =
+  case s of
+    TickNone -> []
+    TickRound f n e -> zip (project r d <$> ticks0) (formatNs 4 f ticks0)
+      where
+        ticks0 = gridSensible OuterPos (e == NoTickExtend) r (fromIntegral n :: Integer)
+    TickExact f n -> zip (project r d <$> ticks0) (formatNs 4 f ticks0)
+      where
+        ticks0 = grid OuterPos r n
+    TickLabels ls ->
+      zip
+        ( project (Range 0 (fromIntegral $ length ls)) d
+            <$> ((\x -> x - 0.5) . fromIntegral <$> [1 .. length ls])
+        )
+        ls
+    TickPlaced xs -> zip (project r d . fst <$> xs) (snd <$> xs)
+
+-- | compute tick values in canvas space given placement, canvas box & data box
+ticksPlacedCanvas :: TickStyle -> Place -> CanvasBox -> DataBox -> [(Double, Text)]
+ticksPlacedCanvas ts pl cb db =
+  first (project (placeRange pl db) (placeRange pl cb))
+    <$> fst (makePlacedTicks ts (placeRange pl db))
+
+tickGlyph_ :: Place -> (GlyphStyle, Double) -> TickStyle -> CanvasBox -> CanvasBox -> DataBox -> Maybe Chart
+tickGlyph_ pl (g, b) ts sb cb db =
+  case l of
+    [] -> Nothing
+    l' -> Just $ GlyphChart (g & #rotation .~ placeRot pl) l'
+  where
+    l =
+      addp (placePos pl b sb) . placeOrigin pl
+        <$> fmap fst (ticksPlacedCanvas ts pl cb db)
+
+-- | aka marks
+tickGlyph ::
+  Place ->
+  (GlyphStyle, Double) ->
+  TickStyle ->
+  State HudChart ChartTree
+tickGlyph pl (g, b) ts = do
+  sb <- gets (view canvasStyleBox')
+  cb <- gets (view canvasBox')
+  db <- gets (view #dataBox)
+  let c = tickGlyph_ pl (g, b) ts <$> sb <*> cb <*> pure db
+  pure $ named "tickglyph" (catMaybes $ maybeToList c)
+
+tickText_ ::
+  Place ->
+  (TextStyle, Double) ->
+  TickStyle ->
+  CanvasBox ->
+  CanvasBox ->
+  DataBox ->
+  Maybe Chart
+tickText_ pl (txts, b) ts sb cb db =
+  case l of
+    [] -> Nothing
+    _ -> Just $ TextChart (placeTextAnchor pl txts) l
+  where
+    l =
+      swap . first (addp (addp (placePos pl b sb) (textPos pl txts b)) . placeOrigin pl)
+        <$> ticksPlacedCanvas ts pl cb db
+
+-- | aka tick labels
+tickText ::
+  Place ->
+  (TextStyle, Double) ->
+  TickStyle ->
+  State HudChart ChartTree
+tickText pl (txts, b) ts = do
+  sb <- gets (view canvasStyleBox')
+  cb <- gets (view canvasBox')
+  db <- gets (view #dataBox)
+  let c = tickText_ pl (txts, b) ts <$> sb <*> cb <*> pure db
+  pure $ named "ticktext" (catMaybes $ maybeToList c)
+
+-- | aka grid lines
+tickLine ::
+  Place ->
+  (LineStyle, Double) ->
+  TickStyle ->
+  State HudChart ChartTree
+tickLine pl (ls, b) ts = do
+  cb <- gets (view canvasBox')
+  db <- gets (view #dataBox)
+  case cb of
+    Nothing -> pure $ named "ticklines" []
+    Just cb' -> do
+      let l = (\x -> placeGridLines pl cb' x b) <$> fmap fst (ticksPlacedCanvas ts pl cb' db)
+      pure $ named "ticklines" (bool [LineChart ls l] [] (null l))
+
+-- | Create tick glyphs (marks), lines (grid) and text (labels)
+applyTicks ::
+  Place ->
+  Ticks ->
+  State HudChart ChartTree
+applyTicks pl t = do
+  g <- maybe (pure mempty) (\x -> tickGlyph pl x (t ^. #style)) (t ^. #gtick)
+  l <- maybe (pure mempty) (\x -> tickText pl x (t ^. #style)) (t ^. #ttick)
+  t' <- maybe (pure mempty) (\x -> tickLine pl x (t ^. #style)) (t ^. #ltick)
+  pure $ group (Just "ticks") [g, l, t']
+
+-- | adjust Tick for sane font sizes etc
+adjustTicks ::
+  Adjustments ->
+  HudBox ->
+  DataBox ->
+  Place ->
+  Ticks ->
+  Ticks
+adjustTicks (Adjustments mrx ma mry ad) vb cs pl t
+  | pl == PlaceBottom || pl == PlaceTop =
+    if ad
+      then
+        ( case adjustSizeX > 1 of
+            True ->
+              ( case pl of
+                  PlaceBottom -> #ttick % _Just % _1 % #anchor .~ AnchorEnd
+                  PlaceTop -> #ttick % _Just % _1 % #anchor .~ AnchorStart
+                  _ -> #ttick % _Just % _1 % #anchor .~ AnchorEnd
+              )
+                . (#ttick % _Just % _1 % #size %~ (/ adjustSizeA))
+                $ (#ttick % _Just % _1 % #rotation ?~ pi / 4) t
+            False -> (#ttick % _Just % _1 % #size %~ (/ adjustSizeA)) t
+        )
+      else t & #ttick % _Just % _1 % #size %~ (/ adjustSizeX)
+  | otherwise -- pl `elem` [PlaceLeft, PlaceRight]
+    =
+    (#ttick % _Just % _1 % #size %~ (/ adjustSizeY)) t
+  where
+    max' [] = 1
+    max' xs = maximum xs
+    ra (Rect x z y w)
+      | pl == PlaceTop || pl == PlaceBottom = Range x z
+      | otherwise = Range y w
+    asp = ra vb
+    r = ra cs
+    tickl = snd <$> ticksR (t ^. #style) asp r
+    maxWidth :: Double
+    maxWidth =
+      maybe
+        1
+        ( \tt ->
+            max' $
+              (\(Rect x z _ _) -> z - x)
+                . (\x -> styleBoxText (fst tt) x (Point 0 0))
+                <$> tickl
+        )
+        (t ^. #ttick)
+    maxHeight =
+      maybe
+        1
+        ( \tt ->
+            max' $
+              (\(Rect _ _ y w) -> w - y)
+                . (\x -> styleBoxText (fst tt) x (Point 0 0))
+                <$> tickl
+        )
+        (t ^. #ttick)
+    adjustSizeX :: Double
+    adjustSizeX = max ((maxWidth / (upper asp - lower asp)) / mrx) 1
+    adjustSizeY = max ((maxHeight / (upper asp - lower asp)) / mry) 1
+    adjustSizeA = max ((maxHeight / (upper asp - lower asp)) / ma) 1
+
+makeTick :: AxisOptions -> State HudChart ChartTree
+makeTick c = do
+  hb <- gets (view hudBox')
+  db <- gets (view #dataBox)
+  case hb of
+    Nothing -> pure (named "ticks" [])
+    Just hb' -> do
+      let adjTick = maybe (c ^. #ticks) (\x -> adjustTicks x hb' db (c ^. #place) (c ^. #ticks)) (c ^. #adjust)
+      applyTicks (c ^. #place) adjTick
+
+-- | Make a legend from 'LegendOptions'
+legend :: LegendOptions -> State HudChart ChartTree
+legend o = legendHud o (legendChart o)
+
+-- | Make a legend hud element, from a bespoke ChartTree.
+legendHud :: LegendOptions -> ChartTree -> State HudChart ChartTree
+legendHud o lcs = do
+  sb <- gets (view hudStyleBox')
+  case sb of
+    Nothing -> pure (named "legend" [])
+    Just sb' -> pure $ placeLegend o sb' (over chart' (scaleChart (o ^. #overallScale)) lcs)
+
+placeLegend :: LegendOptions -> HudBox -> ChartTree -> ChartTree
+placeLegend o hb t =
+  case view styleBox' t of
+    Nothing -> named "legend" []
+    Just sb -> t & over chart' (moveChart (placeBeside_ (o ^. #place) (view #buffer o) hb sb))
+
+placeBeside_ :: Place -> Double -> Rect Double -> Rect Double -> Point Double
+placeBeside_ pl buff (Rect x z y w) (Rect x' z' y' w') =
+  case pl of
+    PlaceTop -> Point ((x + z) / 2.0) (buff + w + (w' - y') / 2.0)
+    PlaceBottom -> Point ((x + z) / 2.0) (y - buff - (w' - y'))
+    PlaceLeft -> Point (x - buff - (z' - x')) ((y + w) / 2.0)
+    PlaceRight -> Point (z + buff) ((y + w) / 2.0)
+    PlaceAbsolute p -> p
+
+-- | frame a legend
+legendFrame :: LegendOptions -> ChartTree -> ChartTree
+legendFrame l content' =
+  group (Just "legend") [named "legendBorder" borders, rename (Just "legendContent") content']
+  where
+    borders = [outer, inner] <> frame'
+    outer = padChart (view #outerPad l) [inner]
+    frame' = foldMap (\r -> [frameChart r 0 [inner]]) (view #frame l)
+    inner = padChart (view #innerPad l) (foldOf charts' content')
+
+-- | Make the contents portion of a legend
+legendChart :: LegendOptions -> ChartTree
+legendChart l = legendFrame l content'
+  where
+    content' =
+      vert
+        (l ^. #hgap)
+        ( ( \(a, t) ->
+              hori
+                ((l ^. #vgap) + twidth - gapwidth t)
+                (fmap unnamed [[t], [a]])
+          )
+            <$> es
+        )
+    es = reverse $ uncurry (legendEntry l) <$> view #content l
+    twidth = maybe zero (\(Rect _ z _ _) -> z) (styleBoxes (snd <$> es))
+    gapwidth t = maybe 0 (\(Rect _ z _ _) -> z) (sbox t)
+
+legendText ::
+  LegendOptions ->
+  Text ->
+  Chart
+legendText l t =
+  TextChart (l ^. #textStyle & #anchor .~ AnchorStart) [(t, zero)]
+
+legendizeChart ::
+  LegendOptions ->
+  Chart ->
+  Chart
+legendizeChart l c =
+  case c of
+    (RectChart rs _) -> RectChart rs [Rect 0 (l ^. #size) 0 (l ^. #size)]
+    (TextChart ts _) -> TextChart (ts & #size .~ (l ^. #size)) [("text", zero)]
+    (GlyphChart gs _) -> GlyphChart (gs & #size .~ (l ^. #size)) [Point (0.5 * l ^. #size) (0.33 * l ^. #size)]
+    (LineChart ls _) ->
+      LineChart
+        (ls & #size %~ (/ (l ^. #overallScale)))
+        [[Point 0 (1 * l ^. #size), Point (2 * l ^. #size) (1 * l ^. #size)]]
+    (PathChart ps _) ->
+      ( let cs =
+              singletonQuad
+                ( QuadPosition
+                    (Point 0 0)
+                    (Point (l ^. #size) (l ^. #size))
+                    (Point (2 * l ^. #size) ((-1) * l ^. #size))
+                )
+         in PathChart (ps & #borderSize .~ (l ^. #size)) cs
+      )
+    (BlankChart _) -> BlankChart [Rect 0 (l ^. #size) 0 (l ^. #size)]
+
+legendEntry ::
+  LegendOptions ->
+  Text ->
+  Chart ->
+  (Chart, Chart)
+legendEntry l t c =
+  ( legendizeChart l c,
+    legendText l t
+  )
diff --git a/src/Chart/Primitive.hs b/src/Chart/Primitive.hs
new file mode 100644
--- /dev/null
+++ b/src/Chart/Primitive.hs
@@ -0,0 +1,441 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE OverloadedLabels #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -Wall #-}
+
+-- | Base 'Chart' and 'ChartTree' types and support
+module Chart.Primitive
+  ( -- * Charts
+
+    Chart (..),
+    ChartTree (..),
+    tree',
+    chart',
+    charts',
+    named,
+    unnamed,
+    rename,
+    blank,
+    group,
+    filterChartTree,
+    Orientation (..),
+    ChartAspect (..),
+
+    -- * Boxes
+
+    -- $boxes
+    box,
+    sbox,
+    projectWith,
+    maybeProjectWith,
+    moveChart,
+    scaleChart,
+    scaleStyle,
+    colourChart,
+    projectChartTree,
+    boxes,
+    box',
+    styleBoxes,
+    styleBox',
+
+    -- * Combinators
+    vert,
+    hori,
+    stack,
+    frameChart,
+    isEmptyChart,
+    padChart,
+    rectangularize,
+    glyphize,
+    overText,
+  )
+where
+
+import Chart.Data
+import Chart.Style
+import Data.Bifunctor
+import Data.Bool
+import Data.Colour
+import Data.Foldable
+import Data.Maybe
+import Data.Path
+import Data.Text (Text)
+import Data.Tree
+import GHC.Generics
+import qualified NumHask.Prelude as NH
+import Optics.Core
+import Prelude
+
+-- $setup
+--
+-- >>> :set -XOverloadedLabels
+-- >>> :set -XOverloadedStrings
+-- >>> import Chart
+-- >>> import Optics.Core
+-- >>> let r = RectChart defaultRectStyle [one]
+
+-- | There are 6 Chart primitives, unified as the Chart type.
+--
+-- - 'RectChart': a rectangle in the XY-domain. For example, a @Rect 0 1 0 1@ is the set of points on the XY Plane bounded by (0,0), (0,1), (1,0) & (1,1). Much of the library is built on Rect Double's but the base types are polymorphic.
+-- - 'LineChart': a list of points which represent connected straight lines. [Point 0 0, Point 1 1, Point 2 2, Point 3 3] is an example; three lines connected up to form a line from (0,0) to (3,3).
+-- - 'GlyphChart': a 'GlyphShape' which is a predefined shaped centered at a 'Point' in XY space.
+-- - 'TextChart': text centered at a 'Point' in XY space.
+-- - 'PathChart': specification of curvilinear paths using the SVG standards.
+-- - 'BlankChart': a rectangular space that has no visual representation.
+--
+-- What is a Chart is usually a combination of these primitives into a tree or list of charts.
+--
+-- Each Chart primitive is a product of a style (the syntactic representation of the data) and a list of data.
+--
+-- A simple example is:
+--
+-- >>> let r = RectChart defaultRectStyle [one]
+-- >>> r
+-- RectChart (RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.02 0.29 0.48 1.00, color = Colour 0.02 0.73 0.80 0.10}) [Rect -0.5 0.5 -0.5 0.5]
+--
+-- Using the defaults, this chart is rendered as:
+--
+-- > writeChartSvg "other/unit.hs" $ mempty & #hudOptions .~ defaultHudOptions & #charts .~ unnamed [r]
+--
+-- ![unit example](other/unit.svg)
+data Chart where
+  RectChart :: RectStyle -> [Rect Double] -> Chart
+  LineChart :: LineStyle -> [[Point Double]] -> Chart
+  GlyphChart :: GlyphStyle -> [Point Double] -> Chart
+  TextChart :: TextStyle -> [(Text, Point Double)] -> Chart
+  PathChart :: PathStyle -> [PathData Double] -> Chart
+  BlankChart :: [Rect Double] -> Chart
+  deriving (Eq, Show)
+
+-- | A group of charts represented by a 'Tree' of chart lists with labelled branches. The labelling is particularly useful downstream, when groupings become grouped SVG elements with classes or ids.
+newtype ChartTree = ChartTree {tree :: Tree (Maybe Text, [Chart])} deriving (Eq, Show, Generic)
+
+-- | Apply a filter to ChartTree
+filterChartTree :: (Chart -> Bool) -> ChartTree -> ChartTree
+filterChartTree p (ChartTree (Node (a, cs) xs)) =
+  ChartTree (Node (a, catMaybes (rem' <$> cs)) (tree . filterChartTree p . ChartTree <$> xs))
+  where
+    rem' x = bool Nothing (Just x) (p x)
+
+-- | Lens between ChartTree and the underlying Tree representation
+tree' :: Iso' ChartTree (Tree (Maybe Text, [Chart]))
+tree' = iso tree ChartTree
+
+-- | A traversal of each chart list in a tree.
+charts' :: Traversal' ChartTree [Chart]
+charts' = tree' % traversed % _2
+
+-- | A traversal of each chart in a tree.
+chart' :: Traversal' ChartTree Chart
+chart' = tree' % traversed % _2 % traversed
+
+-- | Convert a chart list to a tree, adding a specific text label.
+named :: Text -> [Chart] -> ChartTree
+named l cs = ChartTree $ Node (Just l, cs) []
+
+-- | Convert a chart list to a tree, with no text label.
+unnamed :: [Chart] -> ChartTree
+unnamed cs = ChartTree $ Node (Nothing, cs) []
+
+-- | Rename a top-level label in a tree.
+rename :: Maybe Text -> ChartTree -> ChartTree
+rename l (ChartTree (Node (_, cs) xs)) = ChartTree (Node (l, cs) xs)
+
+-- | A tree with no charts and no label.
+blank :: Rect Double -> ChartTree
+blank r = unnamed [BlankChart [r]]
+
+-- | Group a list of trees into a new tree.
+group :: Maybe Text -> [ChartTree] -> ChartTree
+group name cs = ChartTree $ Node (name, []) (tree <$> cs)
+
+instance Semigroup ChartTree where
+  (<>) (ChartTree x@(Node (n, cs) xs)) (ChartTree x'@(Node (n', cs') xs')) =
+    case (n, n') of
+      (Nothing, Nothing) -> ChartTree $ Node (Nothing, cs <> cs') (xs <> xs')
+      _ -> ChartTree $ Node (Nothing, []) [x, x']
+
+instance Monoid ChartTree where
+  mempty = ChartTree $ Node (Nothing, []) []
+
+-- $boxes
+--
+-- Library functionality (rescaling, combining charts, working out axes and generally putting charts together) is driven by a box model. A box is a rectangular space that bounds chart elements.
+
+-- | The 'Rect' which encloses the data elements of the chart. /Bounding box/ is a synonym.
+--
+-- >>> box r
+-- Just Rect -0.5 0.5 -0.5 0.5
+box :: Chart -> Maybe (Rect Double)
+box (RectChart _ a) = foldRect a
+box (TextChart _ a) = space1 $ snd <$> a
+box (LineChart _ a) = space1 $ mconcat a
+box (GlyphChart _ a) = space1 a
+box (PathChart _ a) = pathBoxes a
+box (BlankChart a) = foldRect a
+
+-- | The bounding box for a chart including both data and style elements.
+--
+-- >>> sbox r
+-- Just Rect -0.505 0.505 -0.505 0.505
+--
+-- In the above example, the border of the rectangle adds an extra 0.1 to the height and width of the bounding box enclosing the chart.
+sbox :: Chart -> Maybe (Rect Double)
+sbox (RectChart s a) = foldRect $ padRect (0.5 * view #borderSize s) <$> a
+sbox (TextChart s a) = foldRect $ uncurry (styleBoxText s) <$> a
+sbox (LineChart s a) = padRect (0.5 * s ^. #size) <$> (space1 $ mconcat a)
+sbox (GlyphChart s a) = foldRect $ (\p -> addPoint p (styleBoxGlyph s)) <$> a
+sbox (PathChart s a) = padRect (0.5 * view #borderSize s) <$> pathBoxes a
+sbox (BlankChart a) = foldRect a
+
+-- | projects a Chart to a new space from an old rectangular space, preserving linear metric structure.
+--
+-- >>> projectWith (fmap (2*) one) one r
+-- RectChart (RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.02 0.29 0.48 1.00, color = Colour 0.02 0.73 0.80 0.10}) [Rect -1.0 1.0 -1.0 1.0]
+projectWith :: Rect Double -> Rect Double -> Chart -> Chart
+projectWith new old (RectChart s a) = RectChart s (projectOnR new old <$> a)
+projectWith new old (TextChart s a) = TextChart (projectX s) (second (projectOnP new old) <$> a)
+  where
+    projectX :: TextStyle -> TextStyle
+    projectX s' = case view #scalex s' of
+      NoScaleX -> s' & over #hsize (* (width ox / width nx)) & over #vsize (* (width ox / width nx))
+      ScaleX -> s' & over #size (* (width nx / width ox))
+    (Ranges nx _) = new
+    (Ranges ox _) = old
+projectWith new old (LineChart s a) = LineChart s (fmap (projectOnP new old) <$> a)
+projectWith new old (GlyphChart s a) = GlyphChart s (projectOnP new old <$> a)
+projectWith new old (BlankChart a) = BlankChart (projectOnR new old <$> a)
+projectWith new old (PathChart s a) = PathChart s (projectPaths new old a)
+
+-- | Maybe project a Chart to a new rectangular space from an old rectangular space, if both Rects exist.
+maybeProjectWith :: Maybe (Rect Double) -> Maybe (Rect Double) -> Chart -> Chart
+maybeProjectWith new old = fromMaybe id (projectWith <$> new <*> old)
+
+-- | Move a chart.
+moveChart :: Point Double -> Chart -> Chart
+moveChart p (RectChart s a) = RectChart s (addPoint p <$> a)
+moveChart p (TextChart s a) = TextChart s (second (addp p) <$> a)
+moveChart p (LineChart s a) = LineChart s (fmap (addp p) <$> a)
+moveChart p (GlyphChart s a) = GlyphChart s (addp p <$> a)
+moveChart p (PathChart s a) = PathChart s (movePath p <$> a)
+moveChart p (BlankChart a) = BlankChart (addPoint p <$> a)
+
+-- | Scale a chart (effecting both the chart data and the style).
+scaleChart :: Double -> Chart -> Chart
+scaleChart p (RectChart s a) =
+  RectChart (s & #borderSize %~ (* p)) (fmap (fmap (* p)) a)
+scaleChart p (LineChart s a) =
+  LineChart (s & #size %~ (* p)) (fmap (fmap (fmap (* p))) a)
+scaleChart p (TextChart s a) =
+  TextChart (s & #size %~ (* p)) (fmap (second (fmap (* p))) a)
+scaleChart p (GlyphChart s a) =
+  GlyphChart (s & #size %~ (* p)) (fmap (fmap (* p)) a)
+scaleChart p (PathChart s a) =
+  PathChart (s & #borderSize %~ (* p)) (scalePath p <$> a)
+scaleChart p (BlankChart a) =
+  BlankChart (fmap (fmap (* p)) a)
+
+-- | Scale just the chart style.
+scaleStyle :: Double -> Chart -> Chart
+scaleStyle x (LineChart a d) = LineChart (a & #size %~ (* x)) d
+scaleStyle x (RectChart a d) = RectChart (a & #borderSize %~ (* x)) d
+scaleStyle x (TextChart a d) = TextChart (a & #size %~ (* x)) d
+scaleStyle x (GlyphChart a d) = GlyphChart (a & #size %~ (* x)) d
+scaleStyle x (PathChart a d) = PathChart (a & #borderSize %~ (* x)) d
+scaleStyle _ (BlankChart d) = BlankChart d
+
+-- | Modify chart colors, applying to both border and main colors.
+colourChart :: (Colour -> Colour) -> Chart -> Chart
+colourChart f (RectChart s d) = RectChart s' d
+  where
+    s' = s & #color %~ f & #borderColor %~ f
+colourChart f (TextChart s d) = TextChart s' d
+  where
+    s' = s & #color %~ f
+colourChart f (LineChart s d) = LineChart s' d
+  where
+    s' = s & #color %~ f
+colourChart f (GlyphChart s d) = GlyphChart s' d
+  where
+    s' = s & #color %~ f & #borderColor %~ f
+colourChart f (PathChart s d) = PathChart s' d
+  where
+    s' = s & #color %~ f & #borderColor %~ f
+colourChart _ (BlankChart d) = BlankChart d
+
+-- | Project a chart tree to a new bounding box, guarding against singleton bounds.
+projectChartTree :: Rect Double -> [Chart] -> [Chart]
+projectChartTree new cs = case styleBoxes cs of
+  Nothing -> cs
+  Just b -> projectWith new b <$> cs
+
+-- | Compute the bounding box of a list of charts.
+boxes :: [Chart] -> Maybe (Rect Double)
+boxes cs = foldRect $ mconcat $ maybeToList . box <$> cs
+
+box_ :: ChartTree -> Maybe (Rect Double)
+box_ = boxes . foldOf charts'
+
+rebox_ :: ChartTree -> Maybe (Rect Double) -> ChartTree
+rebox_ cs r =
+  cs
+    & over chart' (fromMaybe id $ projectWith <$> r <*> box_ cs)
+
+-- | Lens between a ChartTree and its bounding box.
+box' :: Lens' ChartTree (Maybe (Rect Double))
+box' =
+  lens box_ rebox_
+
+-- | Compute the bounding box of the data and style elements contained in a list of charts.
+styleBoxes :: [Chart] -> Maybe (Rect Double)
+styleBoxes cs = foldRect $ mconcat $ maybeToList . sbox <$> cs
+
+styleBox_ :: ChartTree -> Maybe (Rect Double)
+styleBox_ = styleBoxes . foldOf charts'
+
+styleRebox_ :: ChartTree -> Maybe (Rect Double) -> ChartTree
+styleRebox_ cs r =
+  cs
+    & over chart' (fromMaybe id $ projectWith <$> r' <*> box_ cs)
+  where
+    r' = (NH.-) <$> r <*> ((NH.-) <$> styleBox_ cs <*> box_ cs)
+
+-- | Lens between a style bounding box and a ChartTree tree.
+--
+-- Note that a round trip may be only approximately isomorphic ie
+--
+-- > forall c r. \c -> view styleBox' . set styleBox r c ~= r
+--
+-- - SVG is, in general, an additive model eg a border adds a constant amount no matter the scale or aspect. Text charts, in particular, can have small data boxes but large style additions to the box.
+--
+-- - rescaling of style here is, in juxtaposition, a multiplicative model.
+--
+-- In practice, this can lead to weird corner cases and unrequited distortion.
+--
+-- The example below starts with the unit chart, and a simple axis bar, with a dynamic overhang, so that the axis bar represents the x-axis extremity.
+--
+-- >>> t1 = unnamed [RectChart defaultRectStyle [one]]
+-- >>> x1 h = toChartTree $ mempty & set #charts t1 & set (#hudOptions % #chartAspect) (ChartAspect) & set (#hudOptions % #axes) [(1,defaultAxisOptions & over #bar (fmap (set #overhang h)) & set (#ticks % #ttick) Nothing & set (#ticks % #gtick) Nothing & set (#ticks % #ltick) Nothing)]
+--
+-- With a significant overhang, the axis bar dominates the extrema:
+--
+-- >>> view styleBox' $ set styleBox' (Just one) (x1 0.1)
+-- Just Rect -0.5 0.5 -0.5 0.5
+--
+-- With no overhang, the style additions caused by the chart dominates:
+--
+-- >>> view styleBox' $ set styleBox' (Just one) (x1 0)
+-- Just Rect -0.5 0.5 -0.5 0.5
+--
+-- In between:
+--
+-- >>> view styleBox' $ set styleBox' (Just one) (x1 0.002)
+-- Just Rect -0.5000199203187251 0.5000199203187251 -0.5 0.5
+--
+--
+-- If having an exact box is important, try running set styleBox' multiple times eg
+--
+-- >>> view styleBox' $ foldr ($) (x1 0.002) (replicate 10 (set styleBox' (Just one)))
+-- Just Rect -0.5 0.5000000000000001 -0.5 0.4999999999999999
+styleBox' :: Lens' ChartTree (Maybe (Rect Double))
+styleBox' =
+  lens styleBox_ styleRebox_
+
+-- | Create a frame over some charts with (additive) padding.
+--
+-- >>> frameChart defaultRectStyle 0.1 [BlankChart []]
+-- RectChart (RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.02 0.29 0.48 1.00, color = Colour 0.02 0.73 0.80 0.10}) []
+frameChart :: RectStyle -> Double -> [Chart] -> Chart
+frameChart rs p cs = RectChart rs (maybeToList (padRect p <$> styleBoxes cs))
+
+-- | Additive padding, framing or buffering for a chart list.
+padChart :: Double -> [Chart] -> Chart
+padChart p cs = BlankChart (maybeToList (padRect p <$> styleBoxes cs))
+
+-- | Whether a chart is empty of data to be represented.
+isEmptyChart :: Chart -> Bool
+isEmptyChart (RectChart _ []) = True
+isEmptyChart (LineChart _ []) = True
+isEmptyChart (GlyphChart _ []) = True
+isEmptyChart (TextChart _ []) = True
+isEmptyChart (PathChart _ []) = True
+isEmptyChart (BlankChart _) = True
+isEmptyChart _ = False
+
+-- | Horizontally stack a list of trees (proceeding to the right) with a gap between
+hori :: Double -> [ChartTree] -> ChartTree
+hori _ [] = mempty
+hori gap cs = foldl' step mempty cs
+  where
+    step x c = x <> over chart' (moveChart (Point (widthx x) (aligny x - aligny c))) c
+    widthx x = case foldOf charts' x of
+      [] -> zero
+      xs -> maybe zero (\(Rect x' z' _ _) -> z' - x' + gap) (styleBoxes xs)
+    aligny x = case foldOf charts' x of
+      [] -> zero
+      xs -> maybe zero (\(Rect _ _ y' w') -> (y' + w') / 2) (styleBoxes xs)
+
+-- | Vertically stack a list of trees (proceeding upwards), aligning them to the left
+vert :: Double -> [ChartTree] -> ChartTree
+vert _ [] = mempty
+vert gap cs = foldl' step mempty cs
+  where
+    step x c = x <> over chart' (moveChart (Point (alignx x - alignx c) (widthy x))) c
+    widthy x = case foldOf charts' x of
+      [] -> zero
+      xs -> maybe zero (\(Rect _ _ y' w') -> w' - y' + gap) (styleBoxes xs)
+    alignx x = case foldOf charts' x of
+      [] -> zero
+      xs -> maybe zero (\(Rect x' _ _ _) -> x') (styleBoxes xs)
+
+-- | Stack a list of tree charts horizontally, then vertically
+stack :: Int -> Double -> [ChartTree] -> ChartTree
+stack _ _ [] = mempty
+stack n gap cs = vert gap (hori gap <$> group' cs [])
+  where
+    group' [] acc = reverse acc
+    group' x acc = group' (drop n x) (take n x : acc)
+
+-- | Make a new chart tree out of the bounding boxes of a chart tree.
+rectangularize :: RectStyle -> ChartTree -> ChartTree
+rectangularize r c = group (Just "rectangularize") [over chart' (rectangularize_ r) c]
+
+rectangularize_ :: RectStyle -> Chart -> Chart
+rectangularize_ rs (TextChart s xs) = TextChart (s & #frame .~ Just rs) xs
+rectangularize_ rs c = RectChart rs (maybeToList $ sbox c)
+
+-- | Make a new chart tree out of the data points of a chart tree, using the supplied glyphs.
+glyphize :: GlyphStyle -> ChartTree -> ChartTree
+glyphize g c =
+  group (Just "glyphize") [over chart' (glyphize_ g) c]
+
+glyphize_ :: GlyphStyle -> Chart -> Chart
+glyphize_ g (TextChart _ xs) = GlyphChart g (snd <$> xs)
+glyphize_ g (PathChart _ xs) = GlyphChart g (pointPath <$> xs)
+glyphize_ g (LineChart _ xs) = GlyphChart g (mconcat xs)
+glyphize_ g (BlankChart xs) = GlyphChart g (mid <$> xs)
+glyphize_ g (RectChart _ xs) = GlyphChart g (mid <$> xs)
+glyphize_ g (GlyphChart _ xs) = GlyphChart g xs
+
+-- | Modify the text in a text chart.
+overText :: (TextStyle -> TextStyle) -> Chart -> Chart
+overText f (TextChart s xs) = TextChart (f s) xs
+overText _ x = x
+
+-- | Verticle or Horizontal
+data Orientation = Vert | Hori deriving (Eq, Show, Generic)
+
+-- | The basis for the x-y ratio of a chart
+--
+-- Default style features tend towards assuming that the usual height of the overall svg image is around 1, and ChartAspect is based on this assumption, so that a ChartAspect of @FixedAspect 1.5@, say, means a height of 1 and a width of 1.5.
+data ChartAspect
+  = -- | Rescale charts to a fixed x-y ratio, inclusive of hud and style features
+    FixedAspect Double
+  | -- | Rescale charts to an overall height of 1, preserving the x-y ratio of the data canvas.
+    CanvasAspect Double
+  | -- | Rescale charts to a height of 1, preserving the existing x-y ratio of the underlying charts, inclusive of hud and style.
+    ChartAspect
+  deriving (Show, Eq, Generic)
diff --git a/src/Chart/Reanimate.hs b/src/Chart/Reanimate.hs
deleted file mode 100644
--- a/src/Chart/Reanimate.hs
+++ /dev/null
@@ -1,355 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedLabels #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
-
--- | Integration of reanimate and chart-svg
-module Chart.Reanimate
-  ( ReanimateConfig (..),
-    defaultReanimateConfig,
-    animChartSvg,
-    ChartReanimate (..),
-    chartReanimate,
-    toTreeA,
-    tree,
-    treeFromFile,
-  )
-where
-
-import Chart as C hiding (Line, renderChartsWith, transform)
-import Codec.Picture.Types
-import Control.Lens hiding (transform)
-import qualified Data.Attoparsec.Text as A
-import Data.Maybe
-import Data.Text (Text, unpack)
-import GHC.Generics
-import Graphics.SvgTree as Svg hiding (Text)
-import qualified Graphics.SvgTree.PathParser as Svg
-import Linear.V2
-import NumHask.Prelude (one)
-import Reanimate as Re
-
--- | global reanimate configuration.
---
--- >>> defaultReanimateConfig
--- ReanimateConfig {duration = 5.0, background = Just "black", globalFontFamily = Just ["Arial","Helvetica","sans-serif"], globalFontStyle = Just FontStyleNormal, globalAlignment = AlignxMinYMin}
-data ReanimateConfig = ReanimateConfig
-  { duration :: Double,
-    background :: Maybe Text,
-    globalFontFamily :: Maybe [Text],
-    globalFontStyle :: Maybe Svg.FontStyle,
-    globalAlignment :: Svg.Alignment
-  }
-  deriving (Eq, Show, Generic)
-
--- |
-defaultReanimateConfig :: ReanimateConfig
-defaultReanimateConfig = ReanimateConfig 5 (Just "black") (Just ["Arial", "Helvetica", "sans-serif"]) (Just FontStyleNormal) AlignxMinYMin
-
--- | Animate a ChartSvg animation.
-animChartSvg :: ReanimateConfig -> (Double -> ChartSvg) -> Animation
-animChartSvg cfg cs =
-  mkAnimation (view #duration cfg) $ toTreeA cfg cs
-
-globalAtts :: ReanimateConfig -> Svg.DrawAttributes
-globalAtts cfg =
-  mempty
-    & maybe
-      id
-      (\x -> fontFamily .~ Just (fmap unpack x))
-      (view #globalFontFamily cfg)
-      . maybe
-        id
-        (\x -> fontStyle .~ Just x)
-        (view #globalFontStyle cfg)
-
--- | The output of the raw translation of ChartSvg to a reanimate svg tree.
-data ChartReanimate = ChartReanimate
-  { trees :: [Tree],
-    box :: Rect Double,
-    size :: C.Point Double
-  }
-  deriving (Eq, Show, Generic)
-
--- | Render a 'ChartSvg' to 'Tree's, the fitted chart viewbox, and the suggested SVG dimensions
-chartReanimate :: ChartSvg -> ChartReanimate
-chartReanimate cs = ChartReanimate ts rect' size'
-  where
-    (cl'', rect', size') = renderToCRS so cl'
-    so = view #svgOptions cs
-    cl' = renderToCharts cs
-    ts = tree <$> cl''
-
--- | convert a ChartSvg animation to a Tree animation.
-toTreeA :: ReanimateConfig -> (Double -> ChartSvg) -> Double -> Tree
-toTreeA cfg cs x =
-  reCss (cs x & view (#svgOptions . #cssOptions)) $
-    mkGroup $
-      (mkBackground . unpack <$> maybeToList (view #background cfg))
-        <> [ ( \cr ->
-                 let (Rect x z y w) =
-                       view #box cr
-                  in withViewBox'
-                       (x, y, z - x, w - y)
-                       (PreserveAspectRatio False (view #globalAlignment cfg) Nothing)
-                       $ flipYAxis $
-                         groupTrees (globalAtts cfg) $ view #trees cr
-             )
-               $ chartReanimate
-                 (cs x)
-           ]
-
-reCss :: CssOptions -> (Tree -> Tree)
-reCss NoCssOptions = id
-reCss UseCssCrisp = Svg.cssApply (Svg.cssRulesOfText "* { shape-rendering: crispEdges; }")
-reCss UseGeometricPrecision = Svg.cssApply (Svg.cssRulesOfText "* { shape-rendering: geometricPrecision; }")
-
-withViewBox' :: (Double, Double, Double, Double) -> Svg.PreserveAspectRatio -> Tree -> Tree
-withViewBox' vbox par child =
-  Re.translate (-screenWidth / 2) (-screenHeight / 2) $
-    svgTree
-      Document
-        { _documentViewBox = Just vbox,
-          _documentWidth = Just (Num screenWidth),
-          _documentHeight = Just (Num screenHeight),
-          _documentElements = [child],
-          _documentDescription = "",
-          _documentLocation = "",
-          _documentAspectRatio = par
-        }
-
--- | Rectange svg
-treeRect :: Rect Double -> Tree
-treeRect a =
-  RectangleTree $ rectSvg a defaultSvg
-
--- | Text svg
-treeText :: TextStyle -> Text -> C.Point Double -> Tree
-treeText s t p =
-  TextTree Nothing (textAt (pointSvg p) t)
-    & maybe id (\x -> drawAttributes %~ rotatePDA x p) (s ^. #rotation)
-
--- | GlyphShape to svg Tree
-treeShape :: GlyphShape -> Double -> C.Point Double -> Tree
-treeShape CircleGlyph s p =
-  CircleTree $ Circle mempty (pointSvg p) (Num (s / 2))
-treeShape SquareGlyph s p = treeRect (move p ((s *) <$> one))
-treeShape (RectSharpGlyph x') s p =
-  treeRect (move p (C.scale (C.Point s (x' * s)) one))
-treeShape (RectRoundedGlyph x'' rx ry) s p =
-  RectangleTree
-    . rectSvg (addPoint p $ C.scale (C.Point s (x'' * s)) one)
-    . (rectCornerRadius .~ (Just $ Num rx, Just $ Num ry))
-    $ defaultSvg
-treeShape (TriangleGlyph (C.Point xa ya) (C.Point xb yb) (C.Point xc yc)) s p =
-  PolygonTree
-    . (polygonPoints .~ rps)
-    $ (drawAttributes %~ translateDA p) defaultSvg
-  where
-    rps =
-      [ V2 (s * xa) (-s * ya),
-        V2 (s * xb) (-s * yb),
-        V2 (s * xc) (-s * yc)
-      ]
-treeShape (EllipseGlyph x') s p =
-  EllipseTree $
-    Ellipse
-      mempty
-      (pointSvg p)
-      (Num $ s / 2)
-      (Num $ (x' * s) / 2)
-treeShape (VLineGlyph x') s (C.Point x y) =
-  LineTree $
-    Line
-      (mempty & strokeWidth .~ Just (Num x'))
-      (pointSvg (C.Point x (y - s / 2)))
-      (pointSvg (C.Point x (y + s / 2)))
-treeShape (HLineGlyph x') s (C.Point x y) =
-  LineTree $
-    Line
-      (mempty & strokeWidth .~ Just (Num x'))
-      (pointSvg (C.Point (x - s / 2) y))
-      (pointSvg (C.Point (x + s / 2) y))
-treeShape (PathGlyph path) s p =
-  Svg.PathTree
-    ( Svg.Path
-        ( Svg.defaultSvg
-            & (Svg.drawAttributes %~ scaleDA (C.Point s s) . translateDA p)
-        )
-        (either mempty id $ A.parseOnly Svg.pathParser path)
-    )
-
--- | GlyphStyle to svg Tree
-treeGlyph :: GlyphStyle -> C.Point Double -> Tree
-treeGlyph s p =
-  treeShape (s ^. #shape) (s ^. #size) p
-    & maybe id (\x -> drawAttributes %~ rotatePDA x p) (s ^. #rotation)
-
--- | line svg
-treeLine :: [C.Point Double] -> Tree
-treeLine xs =
-  PolyLineTree
-    . (polyLinePoints .~ ((\(C.Point x y) -> V2 x (-y)) <$> xs))
-    $ defaultSvg
-
--- | GlyphStyle to svg Tree
-treePath :: [PathInfo Double] -> [C.Point Double] -> Tree
-treePath s p =
-  PathTree $
-    Path
-      mempty
-      ( zipWith
-          (curry toPathCommand)
-          s
-          (fmap (\(C.Point x y) -> C.Point x (-y)) p)
-      )
-
--- | convert a 'Chart' to a 'Tree'
-tree :: Chart Double -> Tree
-tree (Chart (TextA s ts) xs) =
-  groupTrees (daText s) (zipWith (treeText s) ts (toPoint <$> xs))
-tree (Chart (GlyphA s) xs) =
-  groupTrees (daGlyph s) (treeGlyph s . toPoint <$> xs)
-tree (Chart (LineA s) xs) =
-  groupTrees (daLine s) [treeLine (toPoint <$> xs)]
-tree (Chart (RectA s) xs) =
-  groupTrees (daRect s) (treeRect <$> (toRect <$> xs))
-tree (Chart (PathA s pis) xs) =
-  groupTrees (daPath s) [treePath pis (toPoint <$> xs)]
-tree (Chart BlankA _) =
-  groupTrees mempty []
-
--- | add drawing attributes as a group svg wrapping a [Tree]
-groupTrees :: DrawAttributes -> [Tree] -> Tree
-groupTrees da' tree' =
-  GroupTree (drawAttributes %~ (<> da') $ groupChildren .~ tree' $ defaultSvg)
-
--- * DrawAttribute computations
-
-daRect :: RectStyle -> DrawAttributes
-daRect o =
-  mempty
-    & (strokeWidth .~ Just (Num (o ^. #borderSize)))
-    & (strokeColor .~ Just (ColorRef (toPixelRGBA8 $ o ^. #borderColor)))
-    & (strokeOpacity ?~ realToFrac (opac $ o ^. #borderColor))
-    & (fillColor .~ Just (ColorRef (toPixelRGBA8 $ o ^. #color)))
-    & (fillOpacity ?~ realToFrac (opac $ o ^. #color))
-
-daText :: () => TextStyle -> DrawAttributes
-daText o =
-  mempty
-    & (fontSize .~ Just (Num (o ^. #size)))
-    & (strokeWidth .~ Just (Num 0))
-    & (strokeColor .~ Just FillNone)
-    & (fillColor .~ Just (ColorRef (toPixelRGBA8 $ o ^. #color)))
-    & (fillOpacity ?~ realToFrac (opac $ o ^. #color))
-    & (textAnchor .~ Just (toTextAnchor $ o ^. #anchor))
-  where
-    toTextAnchor :: Anchor -> Svg.TextAnchor
-    toTextAnchor AnchorMiddle = TextAnchorMiddle
-    toTextAnchor AnchorStart = TextAnchorStart
-    toTextAnchor AnchorEnd = TextAnchorEnd
-
-daGlyph :: GlyphStyle -> DrawAttributes
-daGlyph o =
-  mempty
-    & (strokeWidth .~ Just (Num (o ^. #borderSize)))
-    & ( strokeColor
-          .~ Just (ColorRef (toPixelRGBA8 $ o ^. #borderColor))
-      )
-    & (strokeOpacity ?~ realToFrac (opac $ o ^. #borderColor))
-    & (fillColor .~ Just (ColorRef (toPixelRGBA8 $ o ^. #color)))
-    & (fillOpacity ?~ realToFrac (opac $ o ^. #color))
-    & maybe id (\(C.Point x y) -> transform ?~ [Translate x (-y)]) (o ^. #translate)
-
-daLine :: LineStyle -> DrawAttributes
-daLine o =
-  mempty
-    & (strokeWidth .~ Just (Num (o ^. #width)))
-    & (strokeColor .~ Just (ColorRef (toPixelRGBA8 $ o ^. #color)))
-    & (strokeOpacity ?~ realToFrac (opac $ o ^. #color))
-    & (fillColor .~ Just FillNone)
-    & maybe
-      id
-      (\x -> strokeLineCap .~ Just (fromLineCap' x))
-      (o ^. #linecap)
-    & maybe
-      id
-      (\x -> strokeLineJoin .~ Just (fromLineJoin' x))
-      (o ^. #linejoin)
-    & maybe
-      id
-      (\x -> strokeOffset .~ Just (Num x))
-      (o ^. #dashoffset)
-    & maybe
-      id
-      (\xs -> strokeDashArray .~ Just (Num <$> xs))
-      (o ^. #dasharray)
-
-fromLineCap' :: LineCap -> Svg.Cap
-fromLineCap' LineCapButt = CapButt
-fromLineCap' LineCapRound = CapRound
-fromLineCap' LineCapSquare = CapSquare
-
-fromLineJoin' :: C.LineJoin -> Svg.LineJoin
-fromLineJoin' LineJoinMiter = JoinMiter
-fromLineJoin' LineJoinBevel = JoinBevel
-fromLineJoin' LineJoinRound = JoinRound
-
-daPath :: PathStyle -> DrawAttributes
-daPath o =
-  mempty
-    & (strokeWidth .~ Just (Num (o ^. #borderSize)))
-    & ( strokeColor
-          .~ Just (ColorRef (toPixelRGBA8 $ o ^. #borderColor))
-      )
-    & (strokeOpacity ?~ realToFrac (opac $ o ^. #borderColor))
-    & (fillColor .~ Just (ColorRef (toPixelRGBA8 $ o ^. #color)))
-    & (fillOpacity ?~ realToFrac (opac $ o ^. #color))
-
--- * svg primitives
-
--- | Convert to reanimate color primitive.
-toPixelRGBA8 :: Colour -> PixelRGBA8
-toPixelRGBA8 (Colour r g b o) =
-  PixelRGBA8
-    (fromIntegral (floor $ r * 256 :: Int))
-    (fromIntegral (floor $ g * 256 :: Int))
-    (fromIntegral (floor $ b * 256 :: Int))
-    (fromIntegral (floor $ o * 256 :: Int))
-
--- | convert a point to the svg co-ordinate system
--- The svg coordinate system has the y-axis going from top to bottom.
-pointSvg :: C.Point Double -> (Svg.Number, Svg.Number)
-pointSvg (C.Point x y) = (Num x, Num (-y))
-
--- | A DrawAttributes to rotate around a point by x degrees.
-rotatePDA :: (HasDrawAttributes s) => Double -> C.Point Double -> s -> s
-rotatePDA a (C.Point x y) s = s & transform %~ (Just . maybe r (<> r))
-  where
-    r = [Rotate (-a * 180 / pi) (Just (x, -y))]
-
--- | A DrawAttributes to translate by a Point.
-translateDA :: (HasDrawAttributes s) => C.Point Double -> s -> s
-translateDA (C.Point x' y') =
-  transform
-    %~ (\x -> Just $ maybe [Translate x' (-y')] (<> [Translate x' (-y')]) x)
-
--- | A DrawAttributes to translate by a Point.
-scaleDA :: (HasDrawAttributes s) => C.Point Double -> s -> s
-scaleDA (C.Point x' y') =
-  transform
-    %~ (\x -> Just $ maybe [Scale x' (Just y')] (<> [Scale x' (Just y')]) x)
-
--- | convert a Rect to the svg co-ordinate system
-rectSvg :: Rect Double -> Svg.Rectangle -> Svg.Rectangle
-rectSvg (Rect x z y w) =
-  (rectUpperLeftCorner .~ (Num x, Num (-w)))
-    . (rectWidth .~ Just (Num (z - x)))
-    . (rectHeight .~ Just (Num (w - y)))
-
--- | import a Tree from a file
-treeFromFile :: FilePath -> IO Tree
-treeFromFile fp = do
-  t <- Svg.loadSvgFile fp
-  pure $ maybe Svg.None Re.unbox t
diff --git a/src/Chart/Render.hs b/src/Chart/Render.hs
deleted file mode 100644
--- a/src/Chart/Render.hs
+++ /dev/null
@@ -1,411 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE OverloadedLabels #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-{-# OPTIONS_GHC -Wall #-}
-
--- | Rendering charts to SVG.
---
--- Note that type signatures are tightened to Double as sane SVG rendering suggests.
-module Chart.Render
-  ( ChartSvg (..),
-    renderToCharts,
-    renderToCRS,
-    chartSvg,
-    chartSvgDefault,
-    chartSvgHud,
-    renderChartsWith,
-    renderHudChart,
-    writeChartSvg,
-    writeChartSvgDefault,
-    writeChartSvgHud,
-    svg2Tag,
-    cssCrisp,
-    geometricPrecision,
-    svg,
-    terms,
-    makeAttribute,
-
-    -- * low-level conversions
-    attsRect,
-    attsText,
-    attsGlyph,
-    attsLine,
-    attsPath,
-    svgShape,
-  )
-where
-
-import Chart.Types
-import Control.Lens hiding (transform)
-import Data.Colour
-import Data.Generics.Labels ()
-import Data.Path
-import Data.Text (Text, pack, unpack)
-import qualified Data.Text as Text
-import qualified Data.Text.Lazy as Lazy
-import Lucid
-import Lucid.Base
-import qualified Lucid.Base as Lucid
-import NumHask.Prelude
-import NumHask.Space as NH hiding (Element)
-
--- $setup
--- >>> import Control.Lens
--- >>> import Chart
-
--- | Specification of a chart for rendering to SVG
-data ChartSvg = ChartSvg
-  { svgOptions :: SvgOptions,
-    hudOptions :: HudOptions,
-    hudList :: [Hud Double],
-    chartList :: [Chart Double]
-  }
-  deriving (Generic)
-
-instance Semigroup ChartSvg where
-  (<>) (ChartSvg _ o h c) (ChartSvg s' o' h' c') =
-    ChartSvg s' (o <> o') (h <> h') (c <> c')
-
-instance Monoid ChartSvg where
-  mempty = ChartSvg defaultSvgOptions mempty [] []
-
--- * rendering
-
--- | @svg@ element + svg 2 attributes
-svg2Tag :: Term [Attribute] (s -> t) => s -> t
-svg2Tag m =
-  svg_
-    [ Lucid.makeAttribute "xmlns" "http://www.w3.org/2000/svg",
-      Lucid.makeAttribute "xmlns:xlink" "http://www.w3.org/1999/xlink"
-    ]
-    m
-
-renderToSvg :: CssOptions -> Point Double -> Rect Double -> [Chart Double] -> Html ()
-renderToSvg csso (Point w' h') (Rect x z y w) cs =
-  with
-    ( svg2Tag
-        ( cssText csso
-            <> mconcat (svg <$> cs)
-        )
-    )
-    [ width_ (pack $ show w'),
-      height_ (pack $ show h'),
-      makeAttribute "viewBox" (pack $ show x <> " " <> show (-w) <> " " <> show (z - x) <> " " <> show (w - y))
-    ]
-
-cssText :: CssOptions -> Html ()
-cssText UseCssCrisp = cssCrisp
-cssText UseGeometricPrecision = geometricPrecision
-cssText NoCssOptions = mempty
-
--- | crisp edges css
-cssCrisp :: Html ()
-cssCrisp = style_ [type_ "text/css"] ("* { shape-rendering: crispEdges; }" :: Text)
-
--- | crisp edges css
-geometricPrecision :: Html ()
-geometricPrecision = style_ [type_ "text/css"] ("* { shape-rendering: geometricPrecision; }" :: Text)
-
-makeCharts :: ChartAspect -> HudOptions -> [Chart Double] -> [Chart Double]
-makeCharts asp ho cs =
-  let (hs', hc') = makeHud (padBox $ dataBoxes cs) ho
-   in runHud (initialCanvas asp (cs <> hc')) hs' (cs <> hc')
-
-renderToCRS :: SvgOptions -> [Chart Double] -> ([Chart Double], Rect Double, Point Double)
-renderToCRS so cs = (cs', rect', size')
-  where
-    rect' = styleBoxesS cs' & maybe id padRect (so ^. #outerPad)
-    cs' =
-      cs
-        & runHud penult [chartAspectHud (so ^. #chartAspect)]
-        & maybe
-          id
-          (\x -> frameChart x (fromMaybe 0 (so ^. #innerPad)))
-          (so ^. #chartFrame)
-    Point w h = NH.width rect'
-    size' = Point ((so ^. #svgHeight) / h * w) (so ^. #svgHeight)
-    penult = case so ^. #chartAspect of
-      FixedAspect _ -> styleBoxesS cs
-      CanvasAspect _ -> dataBoxesS cs
-      ChartAspect -> styleBoxesS cs
-      UnadjustedAspect -> dataBoxesS cs
-
--- | Consume the ChartSvg and produce the combined huds and charts as a chart list.
-renderToCharts :: ChartSvg -> [Chart Double]
-renderToCharts cs = makeCharts (view (#svgOptions . #chartAspect) cs) (view #hudOptions cs) (view #chartList cs)
-
--- | render Charts with the supplied options.
-renderChartsWith :: SvgOptions -> [Chart Double] -> Text
-renderChartsWith so cs =
-  Lazy.toStrict $ renderText (renderToSvg (so ^. #cssOptions) size' rect' cs'')
-  where
-    rect' = styleBoxesS cs' & maybe id padRect (so ^. #outerPad)
-    cs' =
-      cs
-        & runHud penult [chartAspectHud (so ^. #chartAspect)]
-        & maybe
-          id
-          (\x -> frameChart x (fromMaybe 0 (so ^. #innerPad)))
-          (so ^. #chartFrame)
-    cs'' =
-      foldMap (\c -> [Chart (RectA (blob c)) [RectXY rect']]) (so ^. #background) <> cs'
-    Point w h = NH.width rect'
-    size' = Point ((so ^. #svgHeight) / h * w) (so ^. #svgHeight)
-    penult = case so ^. #chartAspect of
-      FixedAspect _ -> styleBoxesS cs
-      CanvasAspect _ -> dataBoxesS cs
-      ChartAspect -> styleBoxesS cs
-      UnadjustedAspect -> dataBoxesS cs
-
--- | render charts with the supplied svg options and huds
-renderHudChart :: SvgOptions -> [Hud Double] -> [Chart Double] -> Text
-renderHudChart so hs cs = renderChartsWith so (runHud (initialCanvas (so ^. #chartAspect) cs) hs cs)
-
--- | Render a chart using the supplied svg and hud config.
---
--- >>> chartSvg mempty
--- "<svg height=\"300.0\" width=\"300.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-0.52 -0.52 1.04 1.04\"></svg>"
-chartSvg :: ChartSvg -> Text
-chartSvg (ChartSvg so ho hs cs) = renderHudChart so (hs <> hs') (cs <> cs')
-  where
-    (hs', cs') = makeHud (padBox $ dataBoxes cs) ho
-
--- | Render a chart using the default svg options and no hud.
---
--- >>> chartSvgDefault [] == chartSvg mempty
--- True
-chartSvgDefault :: [Chart Double] -> Text
-chartSvgDefault cs = chartSvg $ mempty & #chartList .~ cs
-
--- | Render a chart using default svg and hud options.
---
--- >>> chartSvgHud [] == (chartSvg $ mempty & #hudOptions .~ defaultHudOptions)
--- True
-chartSvgHud :: [Chart Double] -> Text
-chartSvgHud cs =
-  chartSvg $
-    mempty
-      & #hudOptions .~ defaultHudOptions
-      & #chartList .~ cs
-
--- | Write to a file.
-writeChartSvg :: FilePath -> ChartSvg -> IO ()
-writeChartSvg fp cs =
-  writeFile fp (unpack $ chartSvg cs)
-
--- | Write a chart to a file with default svg options and no hud.
-writeChartSvgDefault :: FilePath -> [Chart Double] -> IO ()
-writeChartSvgDefault fp cs = writeChartSvg fp (mempty & #chartList .~ cs)
-
--- | Write a chart to a file with default svg and hud options.
-writeChartSvgHud :: FilePath -> [Chart Double] -> IO ()
-writeChartSvgHud fp cs =
-  writeChartSvg
-    fp
-    ( mempty
-        & #chartList .~ cs
-        & #hudOptions .~ defaultHudOptions
-    )
-
--- | Rectangle svg
-svgRect :: Rect Double -> Lucid.Html ()
-svgRect (Rect x z y w) =
-  terms
-    "rect"
-    [ width_ (pack $ show $ z - x),
-      height_ (pack $ show $ w - y),
-      term "x" (pack $ show x),
-      term "y" (pack $ show $ -w)
-    ]
-
--- | Text svg
-svgText :: TextStyle -> Text -> Point Double -> Lucid.Html ()
-svgText s t p@(Point x y) =
-  term
-    "text"
-    ( [ term "x" (pack $ show x),
-        term "y" (pack $ show $ -y)
-      ]
-        <> foldMap (\x' -> [term "transform" (toRotateText x' p)]) (s ^. #rotation)
-    )
-    (toHtmlRaw t)
-
--- | line svg
-svgLine :: [Point Double] -> Lucid.Html ()
-svgLine [] = mempty
-svgLine xs = terms "polyline" [term "points" (toPointsText xs)]
-  where
-    toPointsText xs' = Text.intercalate "\n" $ (\(Point x y) -> pack (show x <> "," <> show (-y))) <$> xs'
-
--- | GlyphShape to svg Tree
-svgShape :: GlyphShape -> Double -> Point Double -> Lucid.Html ()
-svgShape CircleGlyph s (Point x y) =
-  terms
-    "circle"
-    [ term "cx" (pack $ show x),
-      term "cy" (pack $ show $ -y),
-      term "r" (pack $ show $ 0.5 * s)
-    ]
-svgShape SquareGlyph s p =
-  svgRect (move p ((s *) <$> one))
-svgShape (RectSharpGlyph x') s p =
-  svgRect (move p (NH.scale (Point s (x' * s)) one))
-svgShape (RectRoundedGlyph x' rx ry) s p =
-  terms
-    "rect"
-    [ term "width" (pack $ show $ z - x),
-      term "height" (pack $ show $ w - y),
-      term "x" (pack $ show x),
-      term "y" (pack $ show $ -w),
-      term "rx" (pack $ show rx),
-      term "ry" (pack $ show ry)
-    ]
-  where
-    (Rect x z y w) = move p (NH.scale (Point s (x' * s)) one)
-svgShape (TriangleGlyph (Point xa ya) (Point xb yb) (Point xc yc)) s p =
-  terms
-    "polygon"
-    [ term "transform" (toTranslateText p),
-      term "points" (pack $ show (s * xa) <> "," <> show (-(s * ya)) <> " " <> show (s * xb) <> "," <> show (-(s * yb)) <> " " <> show (s * xc) <> "," <> show (-(s * yc)))
-    ]
-svgShape (EllipseGlyph x') s (Point x y) =
-  terms
-    "ellipse"
-    [ term "cx" ((pack . show) x),
-      term "cy" ((pack . show) $ -y),
-      term "rx" ((pack . show) $ 0.5 * s),
-      term "ry" ((pack . show) $ 0.5 * s * x')
-    ]
-svgShape (VLineGlyph _) s (Point x y) =
-  terms "polyline" [term "points" (pack $ show x <> "," <> show (-(y - s / 2)) <> "\n" <> show x <> "," <> show (-(y + s / 2)))]
-svgShape (HLineGlyph _) s (Point x y) =
-  terms "polyline" [term "points" (pack $ show (x - s / 2) <> "," <> show (-y) <> "\n" <> show (x + s / 2) <> "," <> show (-y))]
-svgShape (PathGlyph path) s p =
-  terms "path" [term "d" path, term "transform" (toTranslateText p <> " " <> toScaleText s)]
-
--- | GlyphStyle to svg Tree
-svgGlyph :: GlyphStyle -> Point Double -> Lucid.Html ()
-svgGlyph s p =
-  svgShape (s ^. #shape) (s ^. #size) p
-    & maybe id (\r -> term "g" [term "transform" (toRotateText r p)]) (s ^. #rotation)
-
--- | Path svg
-svgPath :: [PathInfo Double] -> [Point Double] -> Lucid.Html ()
-svgPath _ [] = mempty
-svgPath _ [_] = mempty
-svgPath infos ps =
-  terms "path" [term "d" (toPathAbsolutes (zip infos ps))]
-
-svgAtts :: Annotation -> [Attribute]
-svgAtts (TextA s _) = attsText s
-svgAtts (GlyphA s) = attsGlyph s
-svgAtts (LineA s) = attsLine s
-svgAtts (RectA s) = attsRect s
-svgAtts (PathA s _) = attsPath s
-svgAtts BlankA = mempty
-
-svgHtml :: Chart Double -> Lucid.Html ()
-svgHtml (Chart (TextA s ts) xs) =
-  mconcat $ zipWith (\t p -> svgText s t (toPoint p)) ts xs
-svgHtml (Chart (GlyphA s) xs) =
-  mconcat $ svgGlyph s . toPoint <$> xs
-svgHtml (Chart (LineA _) xs) =
-  svgLine $ toPoint <$> xs
-svgHtml (Chart (RectA _) xs) =
-  mconcat $ svgRect . toRect <$> xs
-svgHtml (Chart (PathA _ infos) xs) =
-  svgPath infos $ toPoint <$> xs
-svgHtml (Chart BlankA _) = mempty
-
--- | Low-level conversion of a Chart to svg
-svg :: Chart Double -> Lucid.Html ()
-svg c = term "g" (svgAtts $ c ^. #annotation) (svgHtml c)
-
--- | Make Lucid Html given term and attributes
-terms :: Text -> [Lucid.Attribute] -> Lucid.Html ()
-terms t = with $ makeXmlElementNoEnd t
-
--- | RectStyle to Attributes
-attsRect :: RectStyle -> [Lucid.Attribute]
-attsRect o =
-  [ term "stroke-width" (pack $ show $ o ^. #borderSize),
-    term "stroke" (hex $ o ^. #borderColor),
-    term "stroke-opacity" (pack $ show $ opac $ o ^. #borderColor),
-    term "fill" (hex $ o ^. #color),
-    term "fill-opacity" (pack $ show $ opac $ o ^. #color)
-  ]
-
--- | TextStyle to Attributes
-attsText :: TextStyle -> [Lucid.Attribute]
-attsText o =
-  [ term "stroke-width" "0.0",
-    term "stroke" "none",
-    term "fill" (toHex $ o ^. #color),
-    term "fill-opacity" (pack $ show $ opac $ o ^. #color),
-    term "font-size" (pack $ show $ o ^. #size),
-    term "text-anchor" (toTextAnchor $ o ^. #anchor)
-  ]
-  where
-    toTextAnchor :: Anchor -> Text
-    toTextAnchor AnchorMiddle = "middle"
-    toTextAnchor AnchorStart = "start"
-    toTextAnchor AnchorEnd = "end"
-
--- | GlyphStyle to Attributes
-attsGlyph :: GlyphStyle -> [Lucid.Attribute]
-attsGlyph o =
-  [ term "stroke-width" (pack $ show $ o ^. #borderSize),
-    term "stroke" (toHex $ o ^. #borderColor),
-    term "stroke-opacity" (pack $ show $ opac $ o ^. #borderColor),
-    term "fill" (toHex $ o ^. #color),
-    term "fill-opacity" (pack $ show $ opac $ o ^. #color)
-  ]
-    <> foldMap ((: []) . term "transform" . toTranslateText) (o ^. #translate)
-
--- | LineStyle to Attributes
-attsLine :: LineStyle -> [Lucid.Attribute]
-attsLine o =
-  [ term "stroke-width" (pack $ show $ o ^. #width),
-    term "stroke" (toHex $ o ^. #color),
-    term "stroke-opacity" (pack $ show $ opac $ o ^. #color),
-    term "fill" "none"
-  ]
-    <> foldMap (\x -> [term "stroke-linecap" (fromLineCap x)]) (o ^. #linecap)
-    <> foldMap (\x -> [term "stroke-linejoin" (fromLineJoin x)]) (o ^. #linejoin)
-    <> foldMap (\x -> [term "stroke-dasharray" (fromDashArray x)]) (o ^. #dasharray)
-    <> foldMap (\x -> [term "stroke-dashoffset" (pack $ show x)]) (o ^. #dashoffset)
-
--- | PathStyle to Attributes
-attsPath :: PathStyle -> [Lucid.Attribute]
-attsPath o =
-  [ term "stroke-width" (pack $ show $ o ^. #borderSize),
-    term "stroke" (hex $ o ^. #borderColor),
-    term "stroke-opacity" (pack $ show $ opac $ o ^. #borderColor),
-    term "fill" (hex $ o ^. #color),
-    term "fill-opacity" (pack $ show $ opac $ o ^. #color)
-  ]
-
--- | includes a flip of the y dimension.
-toTranslateText :: Point Double -> Text
-toTranslateText (Point x y) =
-  pack $
-    "translate(" <> show x <> ", " <> show (-y) <> ")"
-
--- | includes reference changes:
---
--- - from radians to degrees
---
--- - from counter-clockwise is a positive rotation to clockwise is positive
---
--- - flip y dimension
-toRotateText :: Double -> Point Double -> Text
-toRotateText r (Point x y) =
-  pack $
-    "rotate(" <> show (-r * 180 / pi) <> ", " <> show x <> ", " <> show (-y) <> ")"
-
-toScaleText :: Double -> Text
-toScaleText x =
-  pack $
-    "scale(" <> show x <> ")"
diff --git a/src/Chart/Style.hs b/src/Chart/Style.hs
new file mode 100644
--- /dev/null
+++ b/src/Chart/Style.hs
@@ -0,0 +1,354 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE OverloadedLabels #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -Wall #-}
+
+-- | Stylistic or syntactical options for chart elements.
+--
+module Chart.Style
+  ( -- * RectStyle
+    RectStyle (..),
+    defaultRectStyle,
+    blob,
+    clear,
+    border,
+
+    -- * TextStyle
+    TextStyle (..),
+    defaultTextStyle,
+    styleBoxText,
+    ScaleX (..),
+
+    -- * GlyphStyle
+    GlyphStyle (..),
+    defaultGlyphStyle,
+    styleBoxGlyph,
+    gpalette1,
+    ScaleBorder (..),
+    GlyphShape (..),
+    glyphText,
+
+    -- * LineStyle
+    LineStyle (..),
+    defaultLineStyle,
+    LineCap (..),
+    fromLineCap,
+    toLineCap,
+    LineJoin (..),
+    fromLineJoin,
+    toLineJoin,
+    fromDashArray,
+    Anchor (..),
+    fromAnchor,
+    toAnchor,
+
+    -- * PathStyle
+    PathStyle (..),
+    defaultPathStyle,
+  )
+where
+
+import Chart.Data
+import Data.Colour
+import qualified Data.List as List
+import Data.Maybe
+import Data.Path
+import Data.Path.Parser
+import Data.String
+import Data.Text (Text, pack)
+import qualified Data.Text as Text
+import GHC.Generics
+import Optics.Core
+import Text.HTML.TagSoup (maybeTagText, parseTags)
+import Prelude
+
+-- $setup
+--
+-- >>> :set -XOverloadedLabels
+-- >>> :set -XOverloadedStrings
+-- >>> import Chart
+-- >>> import Optics.Core
+
+-- | Rectangle styling
+--
+-- >>> defaultRectStyle
+-- RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.02 0.29 0.48 1.00, color = Colour 0.02 0.73 0.80 0.10}
+--
+-- ![unit example](other/unit.svg)
+data RectStyle = RectStyle
+  { borderSize :: Double,
+    borderColor :: Colour,
+    color :: Colour
+  }
+  deriving (Show, Eq, Generic)
+
+-- | the style
+defaultRectStyle :: RectStyle
+defaultRectStyle = RectStyle 0.01 (palette1a 1 1) (palette1a 0 0.1)
+
+-- | solid rectangle, no border
+--
+-- >>> blob black
+-- RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.00 0.00 0.00 1.00}
+blob :: Colour -> RectStyle
+blob = RectStyle 0 transparent
+
+-- | transparent rect
+--
+-- >>> clear
+-- RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.00 0.00 0.00 0.00}
+clear :: RectStyle
+clear = RectStyle 0 transparent transparent
+
+-- | transparent rectangle, with border
+--
+-- >>> border 0.01 transparent
+-- RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.00 0.00 0.00 0.00}
+border :: Double -> Colour -> RectStyle
+border s c = RectStyle s c transparent
+
+-- | Text styling
+--
+-- >>> defaultTextStyle
+-- TextStyle {size = 0.12, color = Colour 0.05 0.05 0.05 1.00, anchor = AnchorMiddle, hsize = 0.45, vsize = 1.1, vshift = -0.25, rotation = Nothing, scalex = ScaleX, frame = Nothing}
+data TextStyle = TextStyle
+  { size :: Double,
+    color :: Colour,
+    anchor :: Anchor,
+    hsize :: Double,
+    vsize :: Double,
+    vshift :: Double,
+    rotation :: Maybe Double,
+    scalex :: ScaleX,
+    frame :: Maybe RectStyle
+  }
+  deriving (Show, Eq, Generic)
+
+-- | Whether to scale text given X-axis scaling
+data ScaleX = ScaleX | NoScaleX deriving (Eq, Show, Generic)
+
+-- | position anchor
+data Anchor = AnchorMiddle | AnchorStart | AnchorEnd deriving (Eq, Show, Generic)
+
+-- | text
+fromAnchor :: (IsString s) => Anchor -> s
+fromAnchor AnchorMiddle = "Middle"
+fromAnchor AnchorStart = "Start"
+fromAnchor AnchorEnd = "End"
+
+-- | from text
+toAnchor :: (Eq s, IsString s) => s -> Anchor
+toAnchor "Middle" = AnchorMiddle
+toAnchor "Start" = AnchorStart
+toAnchor "End" = AnchorEnd
+toAnchor _ = AnchorMiddle
+
+-- | the offical text style
+defaultTextStyle :: TextStyle
+defaultTextStyle =
+  TextStyle 0.12 dark AnchorMiddle 0.45 1.1 (-0.25) Nothing ScaleX Nothing
+
+-- | the extra area from text styling
+styleBoxText ::
+  TextStyle ->
+  Text ->
+  Point Double ->
+  Rect Double
+styleBoxText o t p = mpad $ move p $ maybe flat (`rotationBound` flat) (o ^. #rotation)
+  where
+    flat = Rect ((-x' / 2.0) + x' * a') (x' / 2 + x' * a') (-y' / 2 + n1') (y' / 2 + n1')
+    s = o ^. #size
+    h = o ^. #hsize
+    v = o ^. #vsize
+    n1 = o ^. #vshift
+    x' = s * h * fromIntegral (sum $ maybe 0 Text.length . maybeTagText <$> parseTags t)
+    y' = s * v
+    n1' = -s * n1
+    a' = case o ^. #anchor of
+      AnchorStart -> 0.5
+      AnchorEnd -> -0.5
+      AnchorMiddle -> 0.0
+    mpad = case view #frame o of
+      Nothing -> id
+      Just f -> padRect (0.5 * view #borderSize f * view #size o)
+
+-- | Glyph styling
+--
+-- >>> defaultGlyphStyle
+-- GlyphStyle {size = 3.0e-2, color = Colour 0.02 0.73 0.80 0.20, borderColor = Colour 0.02 0.29 0.48 1.00, borderSize = 3.0e-3, shape = SquareGlyph, rotation = Nothing, translate = Nothing}
+--
+-- ![glyph example](other/glyphs.svg)
+data GlyphStyle = GlyphStyle
+  { -- | glyph radius
+    size :: Double,
+    -- | fill color
+    color :: Colour,
+    -- | stroke color
+    borderColor :: Colour,
+    -- | stroke width (adds a bit to the bounding box)
+    borderSize :: Double,
+    shape :: GlyphShape,
+    rotation :: Maybe Double,
+    translate :: Maybe (Point Double)
+  }
+  deriving (Show, Eq, Generic)
+
+-- | the offical glyph style
+defaultGlyphStyle :: GlyphStyle
+defaultGlyphStyle =
+  GlyphStyle
+    0.03
+    (palette1a 0 0.2)
+    (set lightness' 0.4 $ palette1a 1 1)
+    0.003
+    SquareGlyph
+    Nothing
+    Nothing
+
+-- | Should glyph borders be scaled?
+data ScaleBorder = ScaleBorder | NoScaleBorder deriving (Show, Eq, Generic)
+
+-- | glyph shapes
+data GlyphShape
+  = CircleGlyph
+  | SquareGlyph
+  | EllipseGlyph Double
+  | RectSharpGlyph Double
+  | RectRoundedGlyph Double Double Double
+  | -- | line width is determined by borderSize
+    TriangleGlyph (Point Double) (Point Double) (Point Double)
+  | VLineGlyph
+  | HLineGlyph
+  | PathGlyph Text ScaleBorder
+  deriving (Show, Eq, Generic)
+
+-- | textifier
+glyphText :: GlyphShape -> Text
+glyphText sh =
+  case sh of
+    CircleGlyph -> "Circle"
+    SquareGlyph -> "Square"
+    TriangleGlyph {} -> "Triangle"
+    EllipseGlyph _ -> "Ellipse"
+    RectSharpGlyph _ -> "RectSharp"
+    RectRoundedGlyph {} -> "RectRounded"
+    VLineGlyph -> "VLine"
+    HLineGlyph -> "HLine"
+    PathGlyph _ _ -> "Path"
+
+-- | the extra area from glyph styling
+styleBoxGlyph :: GlyphStyle -> Rect Double
+styleBoxGlyph s = move p' $
+  rot' $
+    sw $ case sh of
+      CircleGlyph -> (sz *) <$> one
+      SquareGlyph -> (sz *) <$> one
+      EllipseGlyph a -> scale (Point sz (a * sz)) one
+      RectSharpGlyph a -> scale (Point sz (a * sz)) one
+      RectRoundedGlyph a _ _ -> scale (Point sz (a * sz)) one
+      VLineGlyph -> scale (Point (s ^. #borderSize) sz) one
+      HLineGlyph -> scale (Point sz (s ^. #borderSize)) one
+      TriangleGlyph a b c -> (sz *) <$> unsafeSpace1 ([a, b, c] :: [Point Double])
+      PathGlyph path' _ -> maybe zero (fmap (sz *)) (pathBoxes . svgToPathData $ path')
+  where
+    sh = s ^. #shape
+    sz = s ^. #size
+    sw = padRect (0.5 * s ^. #borderSize)
+    p' = fromMaybe (Point 0.0 0.0) (s ^. #translate)
+    rot' = maybe id rotationBound (view #rotation s)
+
+-- | Infinite list of glyph shapes
+--
+-- >>> gpalette1 0
+-- CircleGlyph
+gpalette1 :: Int -> GlyphShape
+gpalette1 x = cycle gpalette1_ List.!! x
+
+-- | finite list of glyphs
+gpalette1_ :: [GlyphShape]
+gpalette1_ =
+  [ CircleGlyph,
+    SquareGlyph,
+    RectSharpGlyph 0.75,
+    RectRoundedGlyph 0.75 0.01 0.01,
+    EllipseGlyph 0.75,
+    VLineGlyph,
+    HLineGlyph,
+    TriangleGlyph (Point 0.0 0.0) (Point 1 1) (Point 1 0),
+    PathGlyph "M0.05,-0.03660254037844387 A0.1 0.1 0.0 0 1 0.0,0.05 0.1 0.1 0.0 0 1 -0.05,-0.03660254037844387 0.1 0.1 0.0 0 1 0.05,-0.03660254037844387 Z" ScaleBorder
+  ]
+
+-- | line cap style
+data LineCap = LineCapButt | LineCapRound | LineCapSquare deriving (Eq, Show, Generic)
+
+-- | textifier
+fromLineCap :: (IsString s) => LineCap -> s
+fromLineCap LineCapButt = "butt"
+fromLineCap LineCapRound = "round"
+fromLineCap LineCapSquare = "square"
+
+-- | readifier
+toLineCap :: (Eq s, IsString s) => s -> LineCap
+toLineCap "butt" = LineCapButt
+toLineCap "round" = LineCapRound
+toLineCap "square" = LineCapSquare
+toLineCap _ = LineCapButt
+
+-- | line cap style
+data LineJoin = LineJoinMiter | LineJoinBevel | LineJoinRound deriving (Eq, Show, Generic)
+
+-- | textifier
+fromLineJoin :: (IsString s) => LineJoin -> s
+fromLineJoin LineJoinMiter = "miter"
+fromLineJoin LineJoinBevel = "bevel"
+fromLineJoin LineJoinRound = "round"
+
+-- | readifier
+toLineJoin :: (Eq s, IsString s) => s -> LineJoin
+toLineJoin "miter" = LineJoinMiter
+toLineJoin "bevel" = LineJoinBevel
+toLineJoin "round" = LineJoinRound
+toLineJoin _ = LineJoinMiter
+
+-- | Convert a dash representation from a list to text
+fromDashArray :: [Double] -> Text
+fromDashArray xs = Text.intercalate " " $ pack . show <$> xs
+
+-- | line style
+--
+-- >>> defaultLineStyle
+-- LineStyle {size = 1.2e-2, color = Colour 0.05 0.05 0.05 1.00, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing}
+--
+-- ![line example](other/line.svg)
+--
+-- See also <https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute>
+data LineStyle = LineStyle
+  { size :: Double,
+    color :: Colour,
+    linecap :: Maybe LineCap,
+    linejoin :: Maybe LineJoin,
+    dasharray :: Maybe [Double],
+    dashoffset :: Maybe Double
+  }
+  deriving (Show, Eq, Generic)
+
+-- | the official default line style
+defaultLineStyle :: LineStyle
+defaultLineStyle = LineStyle 0.012 dark Nothing Nothing Nothing Nothing
+
+-- | Path styling
+--
+-- >>> defaultPathStyle
+-- PathStyle {borderSize = 1.0e-2, borderColor = Colour 0.02 0.29 0.48 1.00, color = Colour 0.66 0.07 0.55 1.00}
+data PathStyle = PathStyle
+  { borderSize :: Double,
+    borderColor :: Colour,
+    color :: Colour
+  }
+  deriving (Show, Eq, Generic)
+
+-- | the style
+defaultPathStyle :: PathStyle
+defaultPathStyle =
+  PathStyle 0.01 (palette1 1) (palette1 2)
diff --git a/src/Chart/Surface.hs b/src/Chart/Surface.hs
--- a/src/Chart/Surface.hs
+++ b/src/Chart/Surface.hs
@@ -1,14 +1,12 @@
-{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedLabels #-}
-{-# LANGUAGE RebindableSyntax #-}
+{-# LANGUAGE OverloadedStrings #-}
 {-# OPTIONS_GHC -Wall #-}
 
 -- | Surface chart combinators.
 --
--- A common chart is to present a set of rectangles on the XY plane with colour representing values of the underlying data; a surface chart (often called a heatmap).
+-- A common chart is to present a set of rectangles on the XY plane with colour representing values of the underlying data. This library uses the term /surface/ chart but it is often referred to as a heatmap.
 --
--- 'SurfaceData', the rectangle and the color value, is a different shape to the usual data elements of a chart, so there is a bit more wrangling to do compared with other chart types.
 module Chart.Surface
   ( SurfaceData (..),
     SurfaceOptions (..),
@@ -21,20 +19,23 @@
     surfacefl,
     SurfaceLegendOptions (..),
     defaultSurfaceLegendOptions,
+    surfaceAxisOptions,
   )
 where
 
-import Chart.Types
-import Control.Lens
+import Chart.Data
+import Chart.Hud
+import Chart.Primitive
+import Chart.Style
 import Data.Bifunctor
+import Data.Bool
 import Data.Colour
+import Data.Foldable
 import Data.FormatN
-import Data.Generics.Labels ()
 import Data.Text (Text)
 import GHC.Generics
-import GHC.OverloadedLabels
-import NumHask.Prelude
-import NumHask.Space
+import Optics.Core
+import Prelude
 
 -- | Options for a Surface chart.
 data SurfaceOptions = SurfaceOptions
@@ -52,10 +53,10 @@
 defaultSurfaceOptions =
   SurfaceOptions defaultSurfaceStyle (Point 10 10) one
 
--- | A surface chart is a specialization of a 'RectA' chart
+-- | A surface chart is a specialization of a 'RectChart'
 --
 -- >>> defaultSurfaceStyle
--- SurfaceStyle {surfaceColors = [Colour 0.69 0.35 0.16 1.00,Colour 0.65 0.81 0.89 1.00], surfaceRectStyle = RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.05 0.05 0.05 1.00}}
+-- SurfaceStyle {surfaceColors = [Colour 0.02 0.73 0.80 1.00,Colour 0.02 0.29 0.48 1.00], surfaceRectStyle = RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.05 0.05 0.05 1.00}}
 --
 -- ![surface example](other/surface.svg)
 data SurfaceStyle = SurfaceStyle
@@ -68,7 +69,7 @@
 -- | The official surface style.
 defaultSurfaceStyle :: SurfaceStyle
 defaultSurfaceStyle =
-  SurfaceStyle (take 2 palette1_) (blob dark)
+  SurfaceStyle (palette1 <$> [0 .. 1]) (blob dark)
 
 -- | Main surface data elements
 data SurfaceData = SurfaceData
@@ -80,42 +81,45 @@
   deriving (Show, Eq, Generic)
 
 -- | surface chart without any hud trimmings
-surfaces :: RectStyle -> [SurfaceData] -> [Chart Double]
+surfaces :: RectStyle -> [SurfaceData] -> [Chart]
 surfaces rs ps =
   ( \(SurfaceData r c) ->
-      Chart
-        (RectA (rs & #color .~ c))
-        [RectXY r]
+      RectChart
+        (rs & #color .~ c)
+        [r]
   )
     <$> ps
 
--- | create surface data from a function on a Point
+-- | Create surface data from a function on a Point
 mkSurfaceData ::
   (Point Double -> Double) ->
   Rect Double ->
   Grid (Rect Double) ->
   [Colour] ->
   ([SurfaceData], Range Double)
-mkSurfaceData f r g cs = ((\(x, y) -> SurfaceData x (blends y cs)) <$> ps', space1 rs)
+mkSurfaceData f r g cs = ((\(x, y) -> SurfaceData x (mixes y cs)) <$> ps', unsafeSpace1 rs)
   where
     ps = gridF f r g
     rs = snd <$> ps
-    rs' = project (space1 rs :: Range Double) (Range 0 1) <$> rs
+    rs' = project (unsafeSpace1 rs :: Range Double) (Range 0 1) <$> rs
     ps' = zip (fst <$> ps) rs'
 
--- | create a surface chart from a function.
-surfacef :: (Point Double -> Double) -> SurfaceOptions -> ([Chart Double], Range Double)
+-- | Create a surface chart from a function.
+surfacef :: (Point Double -> Double) -> SurfaceOptions -> ([Chart], Range Double)
 surfacef f cfg =
-  first (surfaces (cfg ^. #soStyle . #surfaceRectStyle)) $
+  first (surfaces (cfg ^. #soStyle % #surfaceRectStyle)) $
     mkSurfaceData
       f
       (cfg ^. #soRange)
       (cfg ^. #soGrain)
-      (cfg ^. #soStyle . #surfaceColors)
+      (toList $ cfg ^. #soStyle % #surfaceColors)
 
 -- | Create a surface chart and accompanying legend from a function.
-surfacefl :: (Point Double -> Double) -> SurfaceOptions -> SurfaceLegendOptions -> ([Chart Double], [Hud Double])
-surfacefl f po slo = (cs, [legendHud (slo ^. #sloLegendOptions) (surfaceLegendChart dr slo)])
+surfacefl :: (Point Double -> Double) -> SurfaceOptions -> SurfaceLegendOptions -> ([Chart], [Hud])
+surfacefl f po slo =
+  ( cs,
+    [Hud 10 (legendHud (slo ^. #sloLegendOptions) (surfaceLegendChart dr slo))]
+  )
   where
     (cs, dr) = surfacef f po
 
@@ -132,93 +136,87 @@
   }
   deriving (Eq, Show, Generic)
 
-surfaceAxisOptions :: AxisOptions
-surfaceAxisOptions =
+-- | 'AxisOptions' for a surface chart.
+surfaceAxisOptions :: Colour -> AxisOptions
+surfaceAxisOptions c =
   AxisOptions
     Nothing
     Nothing
-    ( Tick
-        (TickRound (FormatPrec (Just 3)) 4 NoTickExtend)
-        (Just (defaultGlyphTick & #color .~ dark & #shape .~ VLineGlyph 0.005, 0.01))
-        (Just (defaultTextTick, 0.03))
+    ( Ticks
+        (TickRound (FormatN FSPrec (Just 3) True) 4 NoTickExtend)
+        (Just (defaultGlyphTick & #borderColor .~ c & #color .~ c & #shape .~ VLineGlyph, 0.01))
+        (Just (defaultTextTick & #color .~ c, 0.03))
         Nothing
     )
     PlaceRight
 
 -- | official surface legend options
-defaultSurfaceLegendOptions :: Text -> SurfaceLegendOptions
-defaultSurfaceLegendOptions t =
-  SurfaceLegendOptions defaultSurfaceStyle t 0.05 100 surfaceAxisOptions surfaceLegendOptions
+defaultSurfaceLegendOptions :: Colour -> Text -> SurfaceLegendOptions
+defaultSurfaceLegendOptions c t =
+  SurfaceLegendOptions defaultSurfaceStyle t 0.05 100 (surfaceAxisOptions c) surfaceLegendOptions
 
 surfaceLegendOptions :: LegendOptions
 surfaceLegendOptions =
   defaultLegendOptions
-    & #lplace .~ PlaceRight
-    & #lscale .~ 0.7
-    & #lsize .~ 0.5
+    & #place .~ PlaceRight
+    & #overallScale .~ 0.9
+    & #size .~ 0.5
     & #vgap .~ 0.05
     & #hgap .~ 0.01
     & #innerPad .~ 0.05
     & #outerPad .~ 0.02
-    & #ltext . #hsize .~ 0.5
-    & #legendFrame .~ Nothing
+    & #textStyle % #hsize .~ 0.5
+    & #textStyle % #size .~ 0.1
+    & #frame .~ Nothing
 
 -- | Creation of the classical heatmap glyph within a legend context.
-surfaceLegendChart :: Range Double -> SurfaceLegendOptions -> [Chart Double]
+surfaceLegendChart :: Range Double -> SurfaceLegendOptions -> ChartTree
 surfaceLegendChart dataRange l =
-  padChart (l ^. #sloLegendOptions . #outerPad)
-    . maybe id (\x -> frameChart x (l ^. #sloLegendOptions . #innerPad)) (l ^. #sloLegendOptions . #legendFrame)
-    $ hs
+  legendFrame (view #sloLegendOptions l) hs
   where
-    a = makeSurfaceTick l pchart
+    a = makeSurfaceTick l (named "pchart" pchart)
     pchart
-      | l ^. #sloLegendOptions . #lplace == PlaceBottom
-          || l ^. #sloLegendOptions . #lplace == PlaceTop =
+      | l ^. #sloLegendOptions % #place == PlaceBottom
+          || l ^. #sloLegendOptions % #place == PlaceTop =
         vertGlyph
       | otherwise = horiGlyph
-    t = Chart (TextA (l ^. #sloLegendOptions . #ltext & #anchor .~ AnchorStart) [l ^. #sloTitle]) [zero]
-    hs = vert (l ^. #sloLegendOptions . #vgap) [a, [t]]
-    vertGlyph :: [Chart Double]
+    t = TextChart (l ^. #sloLegendOptions % #textStyle & #anchor .~ AnchorStart) [(l ^. #sloTitle, zero)]
+    hs = vert (l ^. #sloLegendOptions % #vgap) [a, unnamed [t]]
+    vertGlyph :: [Chart]
     vertGlyph =
       zipWith
-        (\r c -> Chart (RectA $ blob c) [RectXY r])
+        (\r c -> RectChart (blob c) [r])
         ( (\xr -> Ranges xr (Range 0 (l ^. #sloWidth)))
             <$> gridSpace
               dataRange
               (l ^. #sloResolution)
         )
-        ( (\x -> blends x (l ^. #sloStyle . #surfaceColors))
+        ( (\x -> mixes x (toList $ l ^. #sloStyle % #surfaceColors))
             <$> grid MidPos (Range 0 1) (l ^. #sloResolution)
         )
-    horiGlyph :: [Chart Double]
+    horiGlyph :: [Chart]
     horiGlyph =
       zipWith
-        (\r c -> Chart (RectA $ blob c) [RectXY r])
+        (\r c -> RectChart (blob c) [r])
         ( (\yr -> Ranges (Range 0 (l ^. #sloWidth)) yr)
             <$> gridSpace
               dataRange
               (l ^. #sloResolution)
         )
-        ( (\x -> blends x (l ^. #sloStyle . #surfaceColors))
+        ( (\x -> mixes x (toList $ l ^. #sloStyle % #surfaceColors))
             <$> grid MidPos (Range 0 1) (l ^. #sloResolution)
         )
 
 isHori :: SurfaceLegendOptions -> Bool
 isHori l =
-  l ^. #sloLegendOptions . #lplace == PlaceBottom
-    || l ^. #sloLegendOptions . #lplace == PlaceTop
+  l ^. #sloLegendOptions % #place == PlaceBottom
+    || l ^. #sloLegendOptions % #place == PlaceTop
 
-makeSurfaceTick :: SurfaceLegendOptions -> [Chart Double] -> [Chart Double]
-makeSurfaceTick l pchart = phud
-  where
-    r = fromMaybe one (styleBoxes pchart)
-    r' = bool (Rect 0 (l ^. #sloWidth) 0 (l ^. #sloLegendOptions . #lsize)) (Rect 0 (l ^. #sloLegendOptions . #lsize) 0 (l ^. #sloWidth)) (isHori l)
-    (hs, _) =
-      makeHud
-        r
-        ( mempty & #hudAxes
-            .~ [ l ^. #sloAxisOptions
-                   & #place .~ bool PlaceRight PlaceBottom (isHori l)
-               ]
-        )
-    phud = runHudWith r' r hs pchart
+makeSurfaceTick :: SurfaceLegendOptions -> ChartTree -> ChartTree
+makeSurfaceTick l pchart = case view styleBox' pchart of
+  Nothing -> pchart
+  Just r' -> phud
+    where
+      r'' = bool (Rect 0 (l ^. #sloWidth) 0 (l ^. #sloLegendOptions % #size)) (Rect 0 (l ^. #sloLegendOptions % #size) 0 (l ^. #sloWidth)) (isHori l)
+      (hs, db) = toHuds (mempty & set #chartAspect ChartAspect & set #axes [(9, l ^. #sloAxisOptions & #place .~ bool PlaceRight PlaceBottom (isHori l))]) r'
+      phud = runHudWith r'' db hs pchart
diff --git a/src/Chart/Svg.hs b/src/Chart/Svg.hs
new file mode 100644
--- /dev/null
+++ b/src/Chart/Svg.hs
@@ -0,0 +1,471 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE OverloadedLabels #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE QuasiQuotes #-}
+{-# OPTIONS_GHC -Wall #-}
+
+-- | Conversion from a chart to SVG.
+--
+module Chart.Svg
+  ( -- * ChartSvg
+    ChartSvg (..),
+    toChartTree,
+    writeChartSvg,
+    chartSvg,
+    initialCanvas,
+
+    -- * SVG Options
+    SvgOptions (..),
+    defaultSvgOptions,
+
+    -- * SVG Style primitives
+    CssOptions (..),
+    defaultCssOptions,
+    CssShapeRendering (..),
+    CssPreferColorScheme (..),
+    cssShapeRendering,
+    cssPreferColorScheme,
+  )
+where
+
+import Chart.Data
+import Chart.Hud
+import Chart.Primitive
+import Chart.Style
+import Data.Colour
+import Data.Maybe
+import Data.Path
+import Data.Path.Parser
+import Data.Text (Text, pack, unpack)
+import qualified Data.Text as Text
+import qualified Data.Text.Lazy as Lazy
+import Data.Tree
+import GHC.Generics
+import Lucid
+import Lucid.Base
+import NeatInterpolation
+import Optics.Core
+import Prelude
+
+-- $setup
+--
+-- >>> :set -XOverloadedLabels
+-- >>> :set -XOverloadedStrings
+-- >>> import Chart
+-- >>> import Optics.Core
+
+-- helpers
+--
+draw :: Chart -> Html ()
+draw (RectChart _ a) = mconcat $ svgRect_ <$> a
+draw (TextChart s a) = mconcat $ uncurry (svgText_ s) <$> a
+draw (LineChart _ as) = svgLine_ as
+draw (GlyphChart s a) = mconcat $ svgGlyph_ s <$> a
+draw (PathChart _ a) = svgPath_ a
+draw (BlankChart _) = mempty
+
+atts :: Chart -> [Attribute]
+atts (RectChart s _) = attsRect s
+atts (TextChart s _) = attsText s
+atts (LineChart s _) = attsLine s
+atts (GlyphChart s _) = attsGlyph s
+atts (PathChart s _) = attsPath s
+atts (BlankChart _) = mempty
+
+svgChartTree :: ChartTree -> Lucid.Html ()
+svgChartTree cs
+  | isNothing label && null cs' = mconcat $ svgChartTree . ChartTree <$> xs
+  | otherwise = term "g" (foldMap (\x -> [term "class" x]) label) content'
+  where
+    (ChartTree (Node (label, cs') xs)) = filterChartTree (not . isEmptyChart) cs
+    content' = (mconcat $ svg <$> cs') <> (mconcat $ svgChartTree . ChartTree <$> xs)
+
+-- ** ChartSvg
+
+-- | Specification of a chart ready to be rendered to SVG includes:
+--
+-- - svg options
+--
+-- - hud options
+--
+-- - any extra hud elements beyond the usual options
+--
+-- - an underlying chart tree.
+--
+-- See Data.Examples for usage.
+data ChartSvg = ChartSvg
+  { svgOptions :: SvgOptions,
+    hudOptions :: HudOptions,
+    extraHuds :: [Hud],
+    charts :: ChartTree
+  }
+  deriving (Generic)
+
+instance Semigroup ChartSvg where
+  (<>) (ChartSvg _ o h c) (ChartSvg s' o' h' c') =
+    ChartSvg s' (o <> o') (h <> h') (c <> c')
+
+instance Monoid ChartSvg where
+  mempty = ChartSvg defaultSvgOptions mempty mempty mempty
+
+-- * rendering
+
+-- | @svg@ element + svg 2 attributes
+svg2Tag :: Term [Attribute] (s -> t) => s -> t
+svg2Tag m =
+  svg_
+    [ makeAttribute "xmlns" "http://www.w3.org/2000/svg",
+      makeAttribute "xmlns:xlink" "http://www.w3.org/1999/xlink"
+    ]
+    m
+
+renderToText :: Html () -> Text
+renderToText = Lazy.toStrict . renderText
+
+renderToSvg :: SvgOptions -> ChartTree -> Html ()
+renderToSvg so cs =
+  with
+    (svg2Tag (cssText (view #cssOptions so) <> svgChartTree cs))
+    [ width_ (pack $ show w''),
+      height_ (pack $ show h''),
+      makeAttribute "viewBox" (pack $ show x <> " " <> show (-w) <> " " <> show (z - x) <> " " <> show (w - y))
+    ]
+  where
+    r@(Rect x z y w) = singletonGuard (view styleBox' cs)
+    Point w' h' = width r
+    Point w'' h'' = Point ((so ^. #svgHeight) / h' * w') (so ^. #svgHeight)
+
+-- | Low-level conversion of a Chart to svg
+svg :: Chart -> Lucid.Html ()
+svg (BlankChart _) = mempty
+svg c = term "g" (atts c) (draw c)
+
+cssText :: CssOptions -> Html ()
+cssText csso =
+  style_ [] $
+    cssShapeRendering (csso ^. #shapeRendering)
+      <> cssPreferColorScheme (light, dark) (csso ^. #preferColorScheme)
+      <> csso ^. #cssExtra
+
+-- | CSS shape rendering text snippet
+cssShapeRendering :: CssShapeRendering -> Text
+cssShapeRendering UseGeometricPrecision = "svg { shape-rendering: geometricPrecision; }"
+cssShapeRendering UseCssCrisp = "svg { shape-rendering: crispEdges; }"
+cssShapeRendering NoShapeRendering = mempty
+
+-- | CSS prefer-color-scheme text snippet
+cssPreferColorScheme :: (Colour, Colour) -> CssPreferColorScheme -> Text
+cssPreferColorScheme (cl, cd) PreferHud =
+  [trimming|
+svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: $hexDark;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: $hexDark;
+  }
+  .legendBorder g {
+    fill: $hexLight;
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: $hexLight;
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: $hexLight;
+  }
+  .legendBorder g {
+    fill: $hexDark;
+  }
+}
+|]
+  where
+    hexLight = hex cl
+    hexDark = hex cd
+cssPreferColorScheme (bglight, _) PreferLight =
+  [trimming|
+    svg {
+      color-scheme: light dark;
+    }
+    @media (prefers-color-scheme:dark) {
+      svg {
+        background-color: $c;
+      }
+    }
+  |]
+  where
+    c = hex bglight
+cssPreferColorScheme (_, bgdark) PreferDark =
+  [trimming|
+    svg {
+      color-scheme: light dark;
+    }
+    @media (prefers-color-scheme:light) {
+      svg {
+        background-color: $c;
+      }
+    }
+  |]
+  where
+    c = hex bgdark
+cssPreferColorScheme _ PreferNormal = mempty
+
+-- | consume the huds transforming a 'ChartSvg' to a 'ChartTree'
+toChartTree :: ChartSvg -> ChartTree
+toChartTree cs =
+  runHudWith
+    (initialCanvas (view (#hudOptions % #chartAspect) cs) (view #charts cs))
+    db'
+    hs'
+    (view #charts cs <> blank db')
+  where
+    (hs, db') = toHuds (view #hudOptions cs) (singletonGuard $ view (#charts % box') cs)
+    hs' =
+      hs
+        <> view #extraHuds cs
+
+-- | The initial canvas before applying Huds
+--
+-- >>> initialCanvas (FixedAspect 1.5) (unnamed [RectChart defaultRectStyle [one]])
+-- Rect -0.75 0.75 -0.5 0.5
+initialCanvas :: ChartAspect -> ChartTree -> CanvasBox
+initialCanvas (FixedAspect a) _ = aspect a
+initialCanvas (CanvasAspect a) _ = aspect a
+initialCanvas ChartAspect cs = singletonGuard $ view box' cs
+
+-- | Render a chart using the supplied svg and hud config.
+--
+-- >>> chartSvg mempty
+-- "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"450.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"-0.75 -0.5 1.5 1.0\" height=\"300.0\"><style>svg {\n  color-scheme: light dark;\n}\n{\n  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {\n    fill: #0d0d0d;\n  }\n  .ticklines g, .tickglyph g, .legendBorder g {\n    stroke: #0d0d0d;\n  }\n  .legendBorder g {\n    fill: #f0f0f0;\n  }\n}\n@media (prefers-color-scheme:dark) {\n  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {\n    fill: #f0f0f0;\n  }\n  .ticklines g, .tickglyph g, .legendBorder g {\n    stroke: #f0f0f0;\n  }\n  .legendBorder g {\n    fill: #0d0d0d;\n  }\n}</style><g class=\"chart\"></g><g class=\"hud\"></g></svg>"
+chartSvg :: ChartSvg -> Text
+chartSvg cs = renderToText (renderToSvg (view #svgOptions cs) (toChartTree cs))
+
+-- | Write to a file.
+writeChartSvg :: FilePath -> ChartSvg -> IO ()
+writeChartSvg fp cs =
+  writeFile fp (unpack $ chartSvg cs)
+
+-- | Make Lucid Html given term and attributes
+terms :: Text -> [Lucid.Attribute] -> Lucid.Html ()
+terms t = with $ makeXmlElementNoEnd t
+
+-- | Rectangle svg
+svgRect_ :: Rect Double -> Lucid.Html ()
+svgRect_ (Rect x z y w) =
+  terms
+    "rect"
+    [ width_ (pack $ show $ z - x),
+      height_ (pack $ show $ w - y),
+      term "x" (pack $ show x),
+      term "y" (pack $ show $ -w)
+    ]
+
+-- | Text svg
+svgText_ :: TextStyle -> Text -> Point Double -> Lucid.Html ()
+svgText_ s t p@(Point x y) =
+  term
+    "text"
+    ( [ term "x" (pack $ show x),
+        term "y" (pack $ show $ -y)
+      ]
+        <> foldMap (\x' -> [term "transform" (toRotateText x' p)]) (s ^. #rotation)
+    )
+    (toHtmlRaw t)
+    <> case view #frame s of
+      Nothing -> mempty
+      Just f -> svg (RectChart (f & over #borderSize (* view #size s)) [styleBoxText s t p])
+
+-- | line svg
+svgLine_ :: [[Point Double]] -> Lucid.Html ()
+svgLine_ xss =
+  mconcat $
+    (\xs -> terms "polyline" [term "points" (toPointsText xs)]) <$> xss
+  where
+    toPointsText xs' = Text.intercalate "\n" $ (\(Point x y) -> pack (show x <> "," <> show (-y))) <$> xs'
+
+-- | GlyphShape to svg Tree
+svgShape_ :: GlyphShape -> Double -> Point Double -> Lucid.Html ()
+svgShape_ CircleGlyph s (Point x y) =
+  terms
+    "circle"
+    [ term "cx" (pack $ show x),
+      term "cy" (pack $ show $ -y),
+      term "r" (pack $ show $ 0.5 * s)
+    ]
+svgShape_ SquareGlyph s p =
+  svgRect_ (move p ((s *) <$> one))
+svgShape_ (RectSharpGlyph x') s p =
+  svgRect_ (move p (scale (Point s (x' * s)) one))
+svgShape_ (RectRoundedGlyph x' rx ry) s p =
+  terms
+    "rect"
+    [ term "width" (pack $ show $ z - x),
+      term "height" (pack $ show $ w - y),
+      term "x" (pack $ show x),
+      term "y" (pack $ show $ -w),
+      term "rx" (pack $ show rx),
+      term "ry" (pack $ show ry)
+    ]
+  where
+    (Rect x z y w) = move p (scale (Point s (x' * s)) one)
+svgShape_ (TriangleGlyph (Point xa ya) (Point xb yb) (Point xc yc)) s p =
+  terms
+    "polygon"
+    [ term "transform" (toTranslateText p),
+      term "points" (pack $ show (s * xa) <> "," <> show (-(s * ya)) <> " " <> show (s * xb) <> "," <> show (-(s * yb)) <> " " <> show (s * xc) <> "," <> show (-(s * yc)))
+    ]
+svgShape_ (EllipseGlyph x') s (Point x y) =
+  terms
+    "ellipse"
+    [ term "cx" ((pack . show) x),
+      term "cy" ((pack . show) $ -y),
+      term "rx" ((pack . show) $ 0.5 * s),
+      term "ry" ((pack . show) $ 0.5 * s * x')
+    ]
+svgShape_ VLineGlyph s (Point x y) =
+  terms "polyline" [term "points" (pack $ show x <> "," <> show (-(y - s / 2)) <> "\n" <> show x <> "," <> show (-(y + s / 2)))]
+svgShape_ HLineGlyph s (Point x y) =
+  terms "polyline" [term "points" (pack $ show (x - s / 2) <> "," <> show (-y) <> "\n" <> show (x + s / 2) <> "," <> show (-y))]
+svgShape_ (PathGlyph path _) s p =
+  terms "path" [term "d" path, term "transform" (toTranslateText p <> " " <> toScaleText s)]
+
+-- | GlyphStyle to svg Tree
+svgGlyph_ :: GlyphStyle -> Point Double -> Lucid.Html ()
+svgGlyph_ s p =
+  svgShape_ (s ^. #shape) (s ^. #size) p
+    & maybe id (\r -> term "g" [term "transform" (toRotateText r p)]) (s ^. #rotation)
+
+-- | Path svg
+svgPath_ :: [PathData Double] -> Lucid.Html ()
+svgPath_ ps =
+  terms "path" [term "d" (pathDataToSvg ps)]
+
+-- | RectStyle to Attributes
+attsRect :: RectStyle -> [Lucid.Attribute]
+attsRect o =
+  [ term "stroke-width" (pack $ show $ o ^. #borderSize),
+    term "stroke" (showRGB $ o ^. #borderColor),
+    term "stroke-opacity" (pack $ show $ opac $ o ^. #borderColor),
+    term "fill" (showRGB $ o ^. #color),
+    term "fill-opacity" (pack $ show $ opac $ o ^. #color)
+  ]
+
+-- | TextStyle to Attributes
+attsText :: TextStyle -> [Lucid.Attribute]
+attsText o =
+  [ term "stroke-width" "0.0",
+    term "stroke" "none",
+    term "fill" (showRGB $ o ^. #color),
+    term "fill-opacity" (pack $ show $ opac $ o ^. #color),
+    term "font-size" (pack $ show $ o ^. #size),
+    term "text-anchor" (toTextAnchor $ o ^. #anchor)
+  ]
+  where
+    toTextAnchor :: Anchor -> Text
+    toTextAnchor AnchorMiddle = "middle"
+    toTextAnchor AnchorStart = "start"
+    toTextAnchor AnchorEnd = "end"
+
+-- | GlyphStyle to Attributes
+attsGlyph :: GlyphStyle -> [Lucid.Attribute]
+attsGlyph o =
+  [ term "stroke-width" (pack $ show sw),
+    term "stroke" (showRGB $ o ^. #borderColor),
+    term "stroke-opacity" (pack $ show $ opac $ o ^. #borderColor),
+    term "fill" (showRGB $ o ^. #color),
+    term "fill-opacity" (pack $ show $ opac $ o ^. #color)
+  ]
+    <> foldMap ((: []) . term "transform" . toTranslateText) (o ^. #translate)
+  where
+    sw = case o ^. #shape of
+      PathGlyph _ NoScaleBorder -> o ^. #borderSize
+      PathGlyph _ ScaleBorder -> min 0.2 (o ^. #borderSize / o ^. #size)
+      _ -> o ^. #borderSize
+
+-- | LineStyle to Attributes
+attsLine :: LineStyle -> [Lucid.Attribute]
+attsLine o =
+  [ term "stroke-width" (pack $ show $ o ^. #size),
+    term "stroke" (showRGB $ o ^. #color),
+    term "stroke-opacity" (pack $ show $ opac $ o ^. #color),
+    term "fill" "none"
+  ]
+    <> foldMap (\x -> [term "stroke-linecap" (fromLineCap x)]) (o ^. #linecap)
+    <> foldMap (\x -> [term "stroke-linejoin" (fromLineJoin x)]) (o ^. #linejoin)
+    <> foldMap (\x -> [term "stroke-dasharray" (fromDashArray x)]) (o ^. #dasharray)
+    <> foldMap (\x -> [term "stroke-dashoffset" (pack $ show x)]) (o ^. #dashoffset)
+
+-- | PathStyle to Attributes
+attsPath :: PathStyle -> [Lucid.Attribute]
+attsPath o =
+  [ term "stroke-width" (pack $ show $ o ^. #borderSize),
+    term "stroke" (showRGB $ o ^. #borderColor),
+    term "stroke-opacity" (pack $ show $ opac $ o ^. #borderColor),
+    term "fill" (showRGB $ o ^. #color),
+    term "fill-opacity" (pack $ show $ opac $ o ^. #color)
+  ]
+
+-- | includes a flip of the y dimension.
+toTranslateText :: Point Double -> Text
+toTranslateText (Point x y) =
+  pack $
+    "translate(" <> show x <> ", " <> show (-y) <> ")"
+
+-- | includes reference changes:
+--
+-- - from radians to degrees
+--
+-- - from counter-clockwise is a positive rotation to clockwise is positive
+--
+-- - flip y dimension
+toRotateText :: Double -> Point Double -> Text
+toRotateText r (Point x y) =
+  pack $
+    "rotate(" <> show (-r * 180 / pi) <> ", " <> show x <> ", " <> show (-y) <> ")"
+
+toScaleText :: Double -> Text
+toScaleText x =
+  pack $
+    "scale(" <> show x <> ")"
+
+-- | SVG tag options.
+--
+-- >>> defaultSvgOptions
+-- SvgOptions {svgHeight = 300.0, cssOptions = CssOptions {shapeRendering = NoShapeRendering, preferColorScheme = PreferHud, cssExtra = ""}}
+data SvgOptions = SvgOptions
+  { svgHeight :: Double,
+    cssOptions :: CssOptions
+  }
+  deriving (Eq, Show, Generic)
+
+-- | The official svg options
+defaultSvgOptions :: SvgOptions
+defaultSvgOptions = SvgOptions 300 defaultCssOptions
+
+-- | CSS shape rendering options
+data CssShapeRendering = UseGeometricPrecision | UseCssCrisp | NoShapeRendering deriving (Show, Eq, Generic)
+
+-- | CSS prefer-color-scheme options
+data CssPreferColorScheme
+  = -- | includes css that switches approriate hud elements between light and dark.
+    PreferHud
+  | PreferDark
+  | PreferLight
+  | PreferNormal
+  deriving (Show, Eq, Generic)
+
+-- | css options
+--
+-- >>> defaultCssOptions
+-- CssOptions {shapeRendering = NoShapeRendering, preferColorScheme = PreferHud, cssExtra = ""}
+data CssOptions = CssOptions {shapeRendering :: CssShapeRendering, preferColorScheme :: CssPreferColorScheme, cssExtra :: Text} deriving (Show, Eq, Generic)
+
+-- | No special shape rendering and default hud responds to user color scheme preferences.
+defaultCssOptions :: CssOptions
+defaultCssOptions = CssOptions NoShapeRendering PreferHud mempty
diff --git a/src/Chart/Types.hs b/src/Chart/Types.hs
deleted file mode 100644
--- a/src/Chart/Types.hs
+++ /dev/null
@@ -1,1685 +0,0 @@
-{-# LANGUAGE AllowAmbiguousTypes #-}
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE NegativeLiterals #-}
-{-# LANGUAGE OverloadedLabels #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE RebindableSyntax #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# OPTIONS_GHC -Wall #-}
-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
-{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-}
-{-# OPTIONS_GHC -fno-warn-type-defaults #-}
-
--- | Chart API
-module Chart.Types
-  ( -- * Chart
-    Chart (..),
-    moveChart,
-    projectXYs,
-    projectXYsWith,
-    projectArcPosition,
-
-    -- * Annotation
-    Annotation (..),
-    annotationText,
-    scaleAnn,
-    scaleOpacAnn,
-    colourAnn,
-    padRect,
-
-    -- * Styles
-    RectStyle (..),
-    defaultRectStyle,
-    blob,
-    clear,
-    border,
-    TextStyle (..),
-    defaultTextStyle,
-    GlyphStyle (..),
-    defaultGlyphStyle,
-    GlyphShape (..),
-    glyphText,
-    LineStyle (..),
-    defaultLineStyle,
-    LineCap (..),
-    fromLineCap,
-    toLineCap,
-    LineJoin (..),
-    fromLineJoin,
-    toLineJoin,
-    fromDashArray,
-    Anchor (..),
-    fromAnchor,
-    toAnchor,
-    PathStyle (..),
-    toPathChart,
-    defaultPathStyle,
-
-    -- * Hud types
-    ChartDims (..),
-    HudT (..),
-    Hud,
-    simulHud,
-    HudOptions (..),
-    defaultHudOptions,
-    colourHudOptions,
-    scaleOpacHudOptions,
-    defaultCanvas,
-    runHudWith,
-    runHud,
-    makeHud,
-    ChartAspect (..),
-    toChartAspect,
-    fromChartAspect,
-    initialCanvas,
-    chartAspectHud,
-    canvas,
-    title,
-    tick,
-
-    -- * Hud primitives
-    AxisOptions (..),
-    defaultAxisOptions,
-    flipAxis,
-    Place (..),
-    placeText,
-    AxisBar (..),
-    defaultAxisBar,
-    Title (..),
-    defaultTitle,
-    Tick (..),
-    defaultGlyphTick,
-    defaultTextTick,
-    defaultLineTick,
-    defaultTick,
-    TickStyle (..),
-    defaultTickStyle,
-    tickStyleText,
-    TickExtend (..),
-    adjustTick,
-    makeTickDates,
-    makeTickDatesContinuous,
-    Adjustments (..),
-    defaultAdjustments,
-    LegendOptions (..),
-    defaultLegendOptions,
-    legendHud,
-    Orientation (..),
-    fromOrientation,
-    toOrientation,
-
-    -- * SVG primitives
-    CssOptions (..),
-    SvgOptions (..),
-    defaultSvgOptions,
-    defaultSvgFrame,
-
-    -- * Chart manipulation
-    padChart,
-    frameChart,
-    frameAllCharts,
-    hori,
-    vert,
-    stack,
-
-    -- * Bounding box calculation
-    padBox,
-    dataBox,
-    dataBoxes,
-    dataBoxesS,
-    styleBox,
-    styleBoxes,
-    styleBoxesS,
-    styleBoxText,
-    styleBoxGlyph,
-  )
-where
-
-import Control.Lens
-import Control.Monad.State.Lazy
-import Data.Bifunctor
-import Data.Bool
-import Data.Colour
-import Data.Foldable hiding (sum)
-import Data.FormatN
-import Data.Generics.Labels ()
-import Data.List.NonEmpty (NonEmpty (..))
-import Data.Maybe
-import Data.Path
-import Data.String
-import Data.Text (Text, pack)
-import qualified Data.Text as Text
-import Data.Time
-import GHC.Generics
-import GHC.OverloadedLabels
-import NumHask.Prelude
-import NumHask.Space as NH hiding (Element)
-import Text.HTML.TagSoup hiding (Attribute)
-
--- $setup
---
--- >>> :set -XOverloadedLabels
--- >>> import Control.Lens
--- >>> import Chart
--- >>> import Chart.Render
--- >>> import Data.Colour
-
--- * Chart
-
--- | A `Chart` is annotated xy-data.
-data Chart a = Chart
-  { -- | annotation style for the data
-    annotation :: Annotation,
-    -- | list of data elements, either points or rectangles.
-    xys :: [XY a]
-  }
-  deriving (Eq, Show, Generic)
-
--- | How data will be represented onscreen.
---
--- The definition of what might be an Annotation type is opinionated.
---
--- More complex combinations across Annotations can be constructed from combining charts.  See 'Chart.Example.glinesExample', 'Chart.Examples.lglyphExample' and "Chart.Bar" for examples.
---
--- There may be exceptions, but the approximate magnitude of annotation values are in reference to the size of the screen.  For example, a size of 0.01 (say), will means about 1% of the height and/or width of the screen height or width.
-data Annotation
-  = RectA RectStyle
-  | TextA TextStyle [Text]
-  | GlyphA GlyphStyle
-  | LineA LineStyle
-  | PathA PathStyle [PathInfo Double]
-  | BlankA
-  deriving (Eq, Show, Generic)
-
--- | textifier
-annotationText :: Annotation -> Text
-annotationText (RectA _) = "RectA"
-annotationText TextA {} = "TextA"
-annotationText (GlyphA _) = "GlyphA"
-annotationText (LineA _) = "LineA"
-annotationText PathA {} = "PathA"
-annotationText BlankA = "BlankA"
-
--- | dim (or brighten) the opacity of an Annotation by a scale
-scaleOpacAnn :: Double -> Annotation -> Annotation
-scaleOpacAnn x (RectA s) = RectA s'
-  where
-    s' = s & #color %~ scaleOpac x & #borderColor %~ scaleOpac x
-scaleOpacAnn x (TextA s ts) = TextA s' ts
-  where
-    s' = s & #color %~ scaleOpac x
-scaleOpacAnn x (LineA s) = LineA s'
-  where
-    s' = s & #color %~ scaleOpac x
-scaleOpacAnn x (GlyphA s) = GlyphA s'
-  where
-    s' = s & #color %~ scaleOpac x & #borderColor %~ scaleOpac x
-scaleOpacAnn x (PathA s pis) = PathA s' pis
-  where
-    s' = s & #color %~ scaleOpac x & #borderColor %~ scaleOpac x
-scaleOpacAnn _ BlankA = BlankA
-
-scaleOpac :: Double -> Colour -> Colour
-scaleOpac x (Colour r g b o') = Colour r g b (o' * x)
-
--- | select a main colour
-colourAnn :: Colour -> Annotation -> Annotation
-colourAnn c (RectA s) = RectA s'
-  where
-    s' = s & #color %~ mix c & #borderColor %~ mix c
-colourAnn c (TextA s ts) = TextA s' ts
-  where
-    s' = s & #color %~ mix c
-colourAnn c (LineA s) = LineA s'
-  where
-    s' = s & #color %~ mix c
-colourAnn c (GlyphA s) = GlyphA s'
-  where
-    s' = s & #color %~ mix c & #borderColor %~ mix c
-colourAnn c (PathA s pis) = PathA s' pis
-  where
-    s' = s & #color %~ mix c & #borderColor %~ mix c
-colourAnn _ BlankA = BlankA
-
--- | Rectangle styling
---
--- >>> defaultRectStyle
--- RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.65 0.81 0.89 1.00, color = Colour 0.12 0.47 0.71 1.00}
---
--- ![unit example](other/unit.svg)
-data RectStyle = RectStyle
-  { borderSize :: Double,
-    borderColor :: Colour,
-    color :: Colour
-  }
-  deriving (Show, Eq, Generic)
-
--- | the style
-defaultRectStyle :: RectStyle
-defaultRectStyle = RectStyle 0.01 (palette1 1) (palette1 2)
-
--- | solid rectangle, no border
---
--- >>> blob black
--- RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.00 0.00 0.00 1.00}
-blob :: Colour -> RectStyle
-blob = RectStyle 0 transparent
-
--- | transparent rect
---
--- >>> clear
--- RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.00 0.00 0.00 0.00}
-clear :: RectStyle
-clear = RectStyle 0 transparent transparent
-
--- | transparent rectangle, with border
---
--- >>> border 0.01 transparent
--- RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.00 0.00 0.00 0.00}
-border :: Double -> Colour -> RectStyle
-border s c = RectStyle s c transparent
-
--- | Text styling
---
--- >>> defaultTextStyle
--- TextStyle {size = 8.0e-2, color = Colour 0.05 0.05 0.05 1.00, anchor = AnchorMiddle, hsize = 0.5, vsize = 1.45, nudge1 = -0.2, rotation = Nothing}
---
--- >>> import qualified Data.Text as Text
--- >>> let t = zipWith (\x y -> Chart (TextA (defaultTextStyle & (#size .~ (0.05 :: Double))) [x]) [PointXY y]) (fmap Text.singleton ['a' .. 'y']) [Point (sin (x * 0.1)) x | x <- [0 .. 25]]
---
--- ![text example](other/text.svg)
-data TextStyle = TextStyle
-  { size :: Double,
-    color :: Colour,
-    anchor :: Anchor,
-    hsize :: Double,
-    vsize :: Double,
-    nudge1 :: Double,
-    rotation :: Maybe Double
-  }
-  deriving (Show, Eq, Generic)
-
--- | position anchor
-data Anchor = AnchorMiddle | AnchorStart | AnchorEnd deriving (Eq, Show, Generic)
-
--- | text
-fromAnchor :: (IsString s) => Anchor -> s
-fromAnchor AnchorMiddle = "Middle"
-fromAnchor AnchorStart = "Start"
-fromAnchor AnchorEnd = "End"
-
--- | from text
-toAnchor :: (Eq s, IsString s) => s -> Anchor
-toAnchor "Middle" = AnchorMiddle
-toAnchor "Start" = AnchorStart
-toAnchor "End" = AnchorEnd
-toAnchor _ = AnchorMiddle
-
--- | the offical text style
-defaultTextStyle :: TextStyle
-defaultTextStyle =
-  TextStyle 0.08 dark AnchorMiddle 0.5 1.45 -0.2 Nothing
-
--- | Glyph styling
---
--- >>> defaultGlyphStyle
--- GlyphStyle {size = 3.0e-2, color = Colour 0.65 0.81 0.89 1.00, borderColor = Colour 0.12 0.47 0.71 1.00, borderSize = 3.0e-3, shape = SquareGlyph, rotation = Nothing, translate = Nothing}
---
--- ![glyph example](other/glyphs.svg)
-data GlyphStyle = GlyphStyle
-  { -- | glyph radius
-    size :: Double,
-    -- | fill color
-    color :: Colour,
-    -- | stroke color
-    borderColor :: Colour,
-    -- | stroke width (adds a bit to the bounding box)
-    borderSize :: Double,
-    shape :: GlyphShape,
-    rotation :: Maybe Double,
-    translate :: Maybe (Point Double)
-  }
-  deriving (Show, Eq, Generic)
-
--- | the offical glyph style
-defaultGlyphStyle :: GlyphStyle
-defaultGlyphStyle =
-  GlyphStyle
-    0.03
-    (palette1 1)
-    (palette1 2)
-    0.003
-    SquareGlyph
-    Nothing
-    Nothing
-
--- | glyph shapes
-data GlyphShape
-  = CircleGlyph
-  | SquareGlyph
-  | EllipseGlyph Double
-  | RectSharpGlyph Double
-  | RectRoundedGlyph Double Double Double
-  | TriangleGlyph (Point Double) (Point Double) (Point Double)
-  | VLineGlyph Double
-  | HLineGlyph Double
-  | PathGlyph Text
-  deriving (Show, Eq, Generic)
-
--- | textifier
-glyphText :: GlyphShape -> Text
-glyphText sh =
-  case sh of
-    CircleGlyph -> "Circle"
-    SquareGlyph -> "Square"
-    TriangleGlyph {} -> "Triangle"
-    EllipseGlyph _ -> "Ellipse"
-    RectSharpGlyph _ -> "RectSharp"
-    RectRoundedGlyph {} -> "RectRounded"
-    VLineGlyph _ -> "VLine"
-    HLineGlyph _ -> "HLine"
-    PathGlyph _ -> "Path"
-
--- | line cap style
-data LineCap = LineCapButt | LineCapRound | LineCapSquare deriving (Eq, Show, Generic)
-
--- | textifier
-fromLineCap :: (IsString s) => LineCap -> s
-fromLineCap LineCapButt = "butt"
-fromLineCap LineCapRound = "round"
-fromLineCap LineCapSquare = "square"
-
--- | readifier
-toLineCap :: (Eq s, IsString s) => s -> LineCap
-toLineCap "butt" = LineCapButt
-toLineCap "round" = LineCapRound
-toLineCap "square" = LineCapSquare
-toLineCap _ = LineCapButt
-
--- | line cap style
-data LineJoin = LineJoinMiter | LineJoinBevel | LineJoinRound deriving (Eq, Show, Generic)
-
--- | textifier
-fromLineJoin :: (IsString s) => LineJoin -> s
-fromLineJoin LineJoinMiter = "miter"
-fromLineJoin LineJoinBevel = "bevel"
-fromLineJoin LineJoinRound = "round"
-
--- | readifier
-toLineJoin :: (Eq s, IsString s) => s -> LineJoin
-toLineJoin "miter" = LineJoinMiter
-toLineJoin "bevel" = LineJoinBevel
-toLineJoin "round" = LineJoinRound
-toLineJoin _ = LineJoinMiter
-
--- | Convert a dash representation from a list to text
-fromDashArray :: [Double] -> Text
-fromDashArray xs = Text.intercalate " " $ pack . show <$> xs
-
--- | line style
---
--- >>> defaultLineStyle
--- LineStyle {width = 1.2e-2, color = Colour 0.05 0.05 0.05 1.00, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing}
---
--- ![line example](other/line.svg)
---
--- See also <https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute>
-data LineStyle = LineStyle
-  { width :: Double,
-    color :: Colour,
-    linecap :: Maybe LineCap,
-    linejoin :: Maybe LineJoin,
-    dasharray :: Maybe [Double],
-    dashoffset :: Maybe Double
-  }
-  deriving (Show, Eq, Generic)
-
--- | the official default line style
-defaultLineStyle :: LineStyle
-defaultLineStyle = LineStyle 0.012 dark Nothing Nothing Nothing Nothing
-
--- | Path styling
---
--- >>> defaultPathStyle
--- PathStyle {borderSize = 1.0e-2, borderColor = Colour 0.65 0.81 0.89 1.00, color = Colour 0.12 0.47 0.71 1.00}
-data PathStyle = PathStyle
-  { borderSize :: Double,
-    borderColor :: Colour,
-    color :: Colour
-  }
-  deriving (Show, Eq, Generic)
-
--- | the style
-defaultPathStyle :: PathStyle
-defaultPathStyle =
-  PathStyle 0.01 (palette1 1) (palette1 2)
-
--- | Convert from a path command list to a PathA chart
-toPathChart :: PathStyle -> [(PathInfo Double, Point Double)] -> Chart Double
-toPathChart ps xs = Chart (PathA ps (fst <$> xs)) (PointXY . snd <$> xs)
-
--- | Verticle or Horizontal
-data Orientation = Vert | Hori deriving (Eq, Show, Generic)
-
--- | textifier
-fromOrientation :: (IsString s) => Orientation -> s
-fromOrientation Hori = "Hori"
-fromOrientation Vert = "Vert"
-
--- | readifier
-toOrientation :: (Eq s, IsString s) => s -> Orientation
-toOrientation "Hori" = Hori
-toOrientation "Vert" = Vert
-toOrientation _ = Hori
-
--- | additive padding
-padRect :: (Subtractive a) => a -> Rect a -> Rect a
-padRect p (Rect x z y w) = Rect (x - p) (z + p) (y - p) (w + p)
-
--- |
-data CssOptions = UseGeometricPrecision | UseCssCrisp | NoCssOptions deriving (Show, Eq, Generic)
-
--- | The basis for the x-y ratio of the final chart
---
--- Default style features tend towards assuming that the usual height of the overall svg image is around 1, and ChartAspect is based on this assumption, so that a ChartAspect of "FixedAspect 1.5", say, means a height of 1 and a width of 1.5.
-data ChartAspect
-  = -- | Rescale charts to a fixed x-y ratio, inclusive of hud and style features
-    FixedAspect Double
-  | -- | Rescale charts to an overall height of 1, preserving the x-y ratio of the data canvas.
-    CanvasAspect Double
-  | -- | Rescale charts to a height of 1, preserving the existing x-y ratio of the underlying charts, inclusive of hud and style.
-    ChartAspect
-  | -- | Do not rescale.
-    UnadjustedAspect
-  deriving (Show, Eq, Generic)
-
--- | textifier
-fromChartAspect :: (IsString s) => ChartAspect -> s
-fromChartAspect (FixedAspect _) = "FixedAspect"
-fromChartAspect (CanvasAspect _) = "CanvasAspect"
-fromChartAspect ChartAspect = "ChartAspect"
-fromChartAspect UnadjustedAspect = "UnadjustedAspect"
-
--- | readifier
-toChartAspect :: (Eq s, IsString s) => s -> Double -> ChartAspect
-toChartAspect "FixedAspect" a = FixedAspect a
-toChartAspect "CanvasAspect" a = CanvasAspect a
-toChartAspect "ChartAspect" _ = ChartAspect
-toChartAspect "UnadjustedAspect" _ = UnadjustedAspect
-toChartAspect _ _ = ChartAspect
-
--- | calculation of the canvas given the 'ChartAspect'
-initialCanvas :: ChartAspect -> [Chart Double] -> Rect Double
-initialCanvas (FixedAspect a) _ = aspect a
-initialCanvas (CanvasAspect a) _ = aspect a
-initialCanvas ChartAspect cs = aspect $ ratio $ styleBoxesS cs
-initialCanvas UnadjustedAspect cs = dataBoxesS cs
-
--- | SVG tag options.
---
--- >>> defaultSvgOptions
--- SvgOptions {svgHeight = 300.0, outerPad = Just 2.0e-2, innerPad = Nothing, chartFrame = Nothing, cssOptions = NoCssOptions, chartAspect = FixedAspect 1.5, background = Nothing}
---
---
--- ![svgoptions example](other/svgoptions.svg)
-data SvgOptions = SvgOptions
-  { svgHeight :: Double,
-    outerPad :: Maybe Double,
-    innerPad :: Maybe Double,
-    chartFrame :: Maybe RectStyle,
-    cssOptions :: CssOptions,
-    chartAspect :: ChartAspect,
-    background :: Maybe Colour
-  }
-  deriving (Eq, Show, Generic)
-
--- | The official svg options
-defaultSvgOptions :: SvgOptions
-defaultSvgOptions = SvgOptions 300 (Just 0.02) Nothing Nothing NoCssOptions (FixedAspect 1.5) Nothing
-
--- | frame style
-defaultSvgFrame :: RectStyle
-defaultSvgFrame = border 0.01 dark
-
--- | Dimensions that are tracked in the 'HudT':
---
--- - chartDim: the rectangular dimension of the physical representation of a chart on the screen so that new hud elements can be appended. Adding a hud piece tends to expand the chart dimension.
---
--- - canvasDim: the rectangular dimension of the canvas on which data will be represented. At times appending a hud element will cause the canvas dimension to shift.
---
--- - dataDim: the rectangular dimension of the data being represented. Adding hud elements can cause this to change.
-data ChartDims a = ChartDims
-  { chartDim :: Rect a,
-    canvasDim :: Rect a,
-    dataDim :: Rect a
-  }
-  deriving (Eq, Show, Generic)
-
--- | Hud monad transformer
-newtype HudT m a = Hud {unhud :: [Chart a] -> StateT (ChartDims a) m [Chart a]}
-
--- | Heads-Up-Display for a 'Chart'
-type Hud = HudT Identity
-
-instance (Monad m) => Semigroup (HudT m a) where
-  (<>) (Hud h1) (Hud h2) = Hud $ h1 >=> h2
-
-instance (Monad m) => Monoid (HudT m a) where
-  mempty = Hud pure
-
--- | run two hud's simultaneously (using the same original ChartDims state) rather than sequentially (which is the <> operation).
-simulHud :: (Ord a, Monad m) => HudT m a -> HudT m a -> HudT m a
-simulHud (Hud fa) (Hud fb) = Hud $ \cs -> do
-  s <- get
-  (cs', ChartDims ch ca d) <- lift $ runStateT (fa cs) s
-  (cs'', ChartDims ch' ca' d') <- lift $ runStateT (fb cs') s
-  put (ChartDims (ch <> ch') (ca <> ca') (d <> d'))
-  pure cs''
-
--- | Project the chart data given the ChartAspect
-chartAspectHud :: (Monad m) => ChartAspect -> HudT m Double
-chartAspectHud fa = Hud $ \cs -> do
-  canvasd <- use #canvasDim
-  chartd <- use #chartDim
-  case fa of
-    FixedAspect a -> pure $ projectXYs (aspect a) cs
-    CanvasAspect a ->
-      pure $
-        projectXYs (aspect (a * ratio canvasd / ratio chartd)) cs
-    ChartAspect -> pure $ projectXYs (aspect $ ratio chartd) cs
-    UnadjustedAspect -> pure cs
-
--- | Combine huds and charts to form a new Chart using the supplied initial canvas and data dimensions. Note that chart data is transformed by this computation (and the use of a linear type is an open question).
-runHudWith ::
-  -- | initial canvas dimension
-  Rect Double ->
-  -- | initial data dimension
-  Rect Double ->
-  -- | huds to add
-  [Hud Double] ->
-  -- | underlying chart
-  [Chart Double] ->
-  -- | integrated chart list
-  [Chart Double]
-runHudWith ca xs hs cs =
-  evalState
-    ((unhud $ mconcat hs) cs')
-    (ChartDims ca' da' xs)
-  where
-    da' = fromMaybe one $ dataBoxes cs'
-    ca' = fromMaybe one $ styleBoxes cs'
-    cs' = projectXYsWith ca xs cs
-
--- | Combine huds and charts to form a new [Chart] using the supplied canvas and the actual data dimension.
---
--- Note that the original chart data are transformed and irrevocably lost by this computation.
-runHud ::
-  -- | initial canvas dimension
-  Rect Double ->
-  -- | huds
-  [Hud Double] ->
-  -- | underlying charts
-  [Chart Double] ->
-  -- | integrated chart list
-  [Chart Double]
-runHud ca hs cs = runHudWith ca (padBox $ dataBoxes cs) hs cs
-
--- | Typical configurable hud elements. Anything else can be hand-coded as a 'HudT'.
---
--- ![hud example](other/hudoptions.svg)
-data HudOptions = HudOptions
-  { hudCanvas :: Maybe RectStyle,
-    hudTitles :: [Title],
-    hudAxes :: [AxisOptions],
-    hudLegend :: Maybe (LegendOptions, [(Annotation, Text)])
-  }
-  deriving (Eq, Show, Generic)
-
-instance Semigroup HudOptions where
-  (<>) (HudOptions c t a l) (HudOptions c' t' a' l') =
-    HudOptions (listToMaybe $ catMaybes [c, c']) (t <> t') (a <> a') (listToMaybe $ catMaybes [l, l'])
-
-instance Monoid HudOptions where
-  mempty = HudOptions Nothing [] [] Nothing
-
--- | The official hud options.
-defaultHudOptions :: HudOptions
-defaultHudOptions =
-  HudOptions
-    (Just defaultCanvas)
-    []
-    [ defaultAxisOptions,
-      defaultAxisOptions & #place .~ PlaceLeft
-    ]
-    Nothing
-
--- | alter the colour
-colourHudOptions :: Colour -> HudOptions -> HudOptions
-colourHudOptions c ho =
-  ho
-    & #hudCanvas %~ fmap (#color %~ mix c)
-    & #hudTitles %~ fmap (#style . #color %~ mix c)
-    & #hudAxes %~ fmap (#axisBar %~ fmap (#rstyle . #color %~ mix c))
-    & #hudAxes %~ fmap (#axisTick . #gtick %~ fmap (first ((#color %~ mix c) . (#borderColor %~ mix c))))
-    & #hudAxes %~ fmap (#axisTick . #ttick %~ fmap (first (#color %~ mix c)))
-    & #hudAxes %~ fmap (#axisTick . #ltick %~ fmap (first (#color %~ mix c)))
-    & #hudLegend %~ fmap (first (#ltext %~ (#color %~ mix c)))
-    & #hudLegend %~ fmap (first (#legendFrame %~ fmap ((#color %~ mix c) . (#borderColor %~ mix c))))
-
--- | adjust the opacity of HudOptions up or down geometrically (scaling by (*o))
-scaleOpacHudOptions :: HudOptions -> Double -> HudOptions
-scaleOpacHudOptions ho o =
-  ho
-    & #hudCanvas %~ fmap (#color %~ scaleOpac o)
-    & #hudTitles %~ fmap (#style . #color %~ scaleOpac o)
-    & #hudAxes %~ fmap (#axisBar %~ fmap (#rstyle . #color %~ scaleOpac o))
-    & #hudAxes %~ fmap (#axisTick . #gtick %~ fmap (first ((#color %~ scaleOpac o) . (#borderColor %~ scaleOpac o))))
-    & #hudAxes %~ fmap (#axisTick . #ttick %~ fmap (first (#color %~ scaleOpac o)))
-    & #hudAxes %~ fmap (#axisTick . #ltick %~ fmap (first (#color %~ scaleOpac o)))
-    & #hudLegend %~ fmap (first (#ltext %~ (#color %~ scaleOpac o)))
-    & #hudLegend %~ fmap (first (#legendFrame %~ fmap ((#color %~ scaleOpac o) . (#borderColor %~ scaleOpac o))))
-    & #hudLegend %~ fmap (second (fmap (first (scaleOpacAnn o))))
-
--- | colour reset but scaling opacity
-mix :: Colour -> Colour -> Colour
-mix (Colour r g b o') (Colour _ _ _ o) = Colour r g b (o' * o)
-
--- | The official hud canvas
-defaultCanvas :: RectStyle
-defaultCanvas = blob (setOpac 0.05 dark)
-
--- | Placement of elements around (what is implicity but maybe shouldn't just be) a rectangular canvas
-data Place
-  = PlaceLeft
-  | PlaceRight
-  | PlaceTop
-  | PlaceBottom
-  | PlaceAbsolute (Point Double)
-  deriving (Show, Eq, Generic)
-
--- | textifier
-placeText :: Place -> Text
-placeText p =
-  case p of
-    PlaceTop -> "Top"
-    PlaceBottom -> "Bottom"
-    PlaceLeft -> "Left"
-    PlaceRight -> "Right"
-    PlaceAbsolute _ -> "Absolute"
-
--- | axis options
-data AxisOptions = AxisOptions
-  { axisBar :: Maybe AxisBar,
-    adjust :: Maybe Adjustments,
-    axisTick :: Tick,
-    place :: Place
-  }
-  deriving (Eq, Show, Generic)
-
--- | The official axis
-defaultAxisOptions :: AxisOptions
-defaultAxisOptions = AxisOptions (Just defaultAxisBar) (Just defaultAdjustments) defaultTick PlaceBottom
-
--- | The bar on an axis representing the x or y plane.
---
--- >>> defaultAxisBar
--- AxisBar {rstyle = RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.05 0.05 0.05 0.40}, wid = 4.0e-3, buff = 1.0e-2}
-data AxisBar = AxisBar
-  { rstyle :: RectStyle,
-    wid :: Double,
-    buff :: Double
-  }
-  deriving (Show, Eq, Generic)
-
--- | The official axis bar
-defaultAxisBar :: AxisBar
-defaultAxisBar = AxisBar (RectStyle 0 transparent (setOpac 0.4 dark)) 0.004 0.01
-
--- | Options for titles.  Defaults to center aligned, and placed at Top of the hud
---
--- >>> defaultTitle "title"
--- Title {text = "title", style = TextStyle {size = 0.12, color = Colour 0.05 0.05 0.05 1.00, anchor = AnchorMiddle, hsize = 0.5, vsize = 1.45, nudge1 = -0.2, rotation = Nothing}, place = PlaceTop, anchor = AnchorMiddle, buff = 4.0e-2}
-data Title = Title
-  { text :: Text,
-    style :: TextStyle,
-    place :: Place,
-    anchor :: Anchor,
-    buff :: Double
-  }
-  deriving (Show, Eq, Generic)
-
--- | The official hud title
-defaultTitle :: Text -> Title
-defaultTitle txt =
-  Title
-    txt
-    ( defaultTextStyle
-        & #size .~ 0.12
-    )
-    PlaceTop
-    AnchorMiddle
-    0.04
-
--- | xy coordinate markings
---
--- >>> defaultTick
--- Tick {tstyle = TickRound (FormatComma (Just 2)) 8 TickExtend, gtick = Just (GlyphStyle {size = 3.0e-2, color = Colour 0.05 0.05 0.05 0.40, borderColor = Colour 0.05 0.05 0.05 0.40, borderSize = 2.0e-3, shape = VLineGlyph 5.0e-3, rotation = Nothing, translate = Nothing},1.25e-2), ttick = Just (TextStyle {size = 5.0e-2, color = Colour 0.05 0.05 0.05 1.00, anchor = AnchorMiddle, hsize = 0.5, vsize = 1.45, nudge1 = -0.2, rotation = Nothing},1.5e-2), ltick = Just (LineStyle {width = 5.0e-3, color = Colour 0.05 0.05 0.05 0.05, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing},0.0)}
-data Tick = Tick
-  { tstyle :: TickStyle,
-    gtick :: Maybe (GlyphStyle, Double),
-    ttick :: Maybe (TextStyle, Double),
-    ltick :: Maybe (LineStyle, Double)
-  }
-  deriving (Show, Eq, Generic)
-
--- | The official glyph tick
-defaultGlyphTick :: GlyphStyle
-defaultGlyphTick =
-  defaultGlyphStyle
-    & #borderSize .~ 0.002
-    & #shape .~ VLineGlyph 0.005
-    & #color .~ setOpac 0.4 dark
-    & #borderColor .~ setOpac 0.4 dark
-
--- | The official text tick
-defaultTextTick :: TextStyle
-defaultTextTick =
-  defaultTextStyle & #size .~ 0.05
-
--- | The official line tick
-defaultLineTick :: LineStyle
-defaultLineTick =
-  defaultLineStyle
-    & #width .~ 5.0e-3
-    & #color %~ setOpac 0.05
-
--- | The official tick
-defaultTick :: Tick
-defaultTick =
-  Tick
-    defaultTickStyle
-    (Just (defaultGlyphTick, 0.0125))
-    (Just (defaultTextTick, 0.015))
-    (Just (defaultLineTick, 0))
-
--- | Style of tick marks on an axis.
-data TickStyle
-  = -- | no ticks on axis
-    TickNone
-  | -- | specific labels (equidistant placement)
-    TickLabels [Text]
-  | -- | sensibly rounded ticks, a guide to how many, and whether to extend beyond the data bounding box
-    TickRound FormatN Int TickExtend
-  | -- | exactly n equally spaced ticks
-    TickExact FormatN Int
-  | -- | specific labels and placement
-    TickPlaced [(Double, Text)]
-  deriving (Show, Eq, Generic)
-
--- | The official tick style
-defaultTickStyle :: TickStyle
-defaultTickStyle = TickRound (FormatComma (Just 2)) 8 TickExtend
-
--- | textifier
-tickStyleText :: TickStyle -> Text
-tickStyleText TickNone = "TickNone"
-tickStyleText TickLabels {} = "TickLabels"
-tickStyleText TickRound {} = "TickRound"
-tickStyleText TickExact {} = "TickExact"
-tickStyleText TickPlaced {} = "TickPlaced"
-
--- | Whether Ticks are allowed to extend the data range
-data TickExtend = TickExtend | NoTickExtend deriving (Eq, Show, Generic)
-
--- | options for prettifying axis decorations
---
--- >>> defaultAdjustments
--- Adjustments {maxXRatio = 8.0e-2, maxYRatio = 6.0e-2, angledRatio = 0.12, allowDiagonal = True}
-data Adjustments = Adjustments
-  { maxXRatio :: Double,
-    maxYRatio :: Double,
-    angledRatio :: Double,
-    allowDiagonal :: Bool
-  }
-  deriving (Show, Eq, Generic)
-
--- | The official hud adjustments.
-defaultAdjustments :: Adjustments
-defaultAdjustments = Adjustments 0.08 0.06 0.12 True
-
--- | Legend options
---
--- >>> defaultLegendOptions
--- LegendOptions {lsize = 0.3, vgap = 0.2, hgap = 0.1, ltext = TextStyle {size = 0.12, color = Colour 0.05 0.05 0.05 1.00, anchor = AnchorMiddle, hsize = 0.5, vsize = 1.45, nudge1 = -0.2, rotation = Nothing}, lmax = 10, innerPad = 0.1, outerPad = 2.0e-2, legendFrame = Just (RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.05 0.05 0.05 1.00, color = Colour 0.05 0.05 0.05 0.00}), lplace = PlaceRight, lscale = 0.25}
---
--- ![legend example](other/legend.svg)
-data LegendOptions = LegendOptions
-  { lsize :: Double,
-    vgap :: Double,
-    hgap :: Double,
-    ltext :: TextStyle,
-    lmax :: Int,
-    innerPad :: Double,
-    outerPad :: Double,
-    legendFrame :: Maybe RectStyle,
-    lplace :: Place,
-    lscale :: Double
-  }
-  deriving (Show, Eq, Generic)
-
--- | The official legend options
-defaultLegendOptions :: LegendOptions
-defaultLegendOptions =
-  LegendOptions
-    0.3
-    0.2
-    0.1
-    ( defaultTextStyle
-        & #size .~ 0.12
-    )
-    10
-    0.1
-    0.02
-    (Just (RectStyle 0.01 (setOpac 1 dark) (setOpac 0 dark)))
-    PlaceRight
-    0.25
-
--- | Generically scale an Annotation.
-scaleAnn :: Double -> Annotation -> Annotation
-scaleAnn x (LineA a) = LineA $ a & #width %~ (* x)
-scaleAnn x (RectA a) = RectA $ a & #borderSize %~ (* x)
-scaleAnn x (TextA a txs) = TextA (a & #size %~ (* x)) txs
-scaleAnn x (GlyphA a) = GlyphA (a & #size %~ (* x))
-scaleAnn x (PathA a pxs) = PathA (a & #borderSize %~ (* x)) pxs
-scaleAnn _ BlankA = BlankA
-
--- | Translate the data in a chart.
-moveChart :: (Additive a) => XY a -> [Chart a] -> [Chart a]
-moveChart sp = fmap (#xys %~ fmap (sp +))
-
--- | Make huds from a HudOptions.
---
--- Some huds, such as the creation of tick values, can extend the data dimension of a chart, so we return a blank chart with the new data dimension.
--- The complexity internally to this function is due to the creation of ticks and, specifically, 'gridSensible', which is not idempotent. As a result, a tick calculation that does extends the data area, can then lead to new tick values when applying TickRound etc.
-makeHud :: Rect Double -> HudOptions -> ([Hud Double], [Chart Double])
-makeHud xs cfg =
-  ([axes] <> can <> titles <> l, xsext)
-  where
-    xs' = padBox (Just xs)
-    can = foldMap (\x -> [canvas x]) (cfg ^. #hudCanvas)
-    titles = title <$> (cfg ^. #hudTitles)
-    ticks =
-      (\a -> freezeTicks (a ^. #place) xs' (a ^. #axisTick . #tstyle))
-        <$> (cfg ^. #hudAxes)
-    hudaxes =
-      zipWith
-        (\c t -> c & #axisTick . #tstyle .~ fst t)
-        (cfg ^. #hudAxes)
-        ticks
-    tickRects = catMaybes (snd <$> ticks)
-    xsext = bool [Chart BlankA (RectXY <$> tickRects)] [] (null tickRects)
-    axes =
-      foldr simulHud mempty $
-        ( \x ->
-            maybe mempty (makeAxisBar (x ^. #place)) (x ^. #axisBar)
-              <> makeTick x
-        )
-          <$> hudaxes
-    l =
-      foldMap
-        (\(lo, ats) -> [legendHud lo (legendChart ats lo)])
-        (cfg ^. #hudLegend)
-
--- | convert TickRound to TickPlaced
-freezeTicks :: Place -> Rect Double -> TickStyle -> (TickStyle, Maybe (Rect Double))
-freezeTicks pl xs' ts@TickRound {} = maybe (ts, Nothing) (\x -> (TickPlaced (zip ps ls), Just x)) ((\x -> replaceRange pl x xs') <$> ext)
-  where
-    (TickComponents ps ls ext) = makeTicks ts (placeRange pl xs')
-    replaceRange :: Place -> Range Double -> Rect Double -> Rect Double
-    replaceRange pl' (Range a0 a1) (Rect x z y w) = case pl' of
-      PlaceRight -> Rect x z a0 a1
-      PlaceLeft -> Rect x z a0 a1
-      _ -> Rect a0 a1 y w
-freezeTicks _ _ ts = (ts, Nothing)
-
--- | flip an axis from being an X dimension to a Y one or vice-versa.
-flipAxis :: AxisOptions -> AxisOptions
-flipAxis ac = case ac ^. #place of
-  PlaceBottom -> ac & #place .~ PlaceLeft
-  PlaceTop -> ac & #place .~ PlaceRight
-  PlaceLeft -> ac & #place .~ PlaceBottom
-  PlaceRight -> ac & #place .~ PlaceTop
-  PlaceAbsolute _ -> ac
-
-addToRect :: (Ord a) => Rect a -> Maybe (Rect a) -> Rect a
-addToRect r r' = sconcat $ r :| maybeToList r'
-
--- | Make a canvas hud element.
-canvas :: (Monad m) => RectStyle -> HudT m Double
-canvas s = Hud $ \cs -> do
-  a <- use #canvasDim
-  let c = Chart (RectA s) [RectXY a]
-  #canvasDim .= addToRect a (styleBox c)
-  pure $ c : cs
-
-axisBar_ :: Place -> AxisBar -> Rect Double -> Rect Double -> Chart Double
-axisBar_ pl b (Rect x z y w) (Rect x' z' y' w') =
-  case pl of
-    PlaceTop ->
-      Chart
-        (RectA (rstyle b))
-        [ R
-            x
-            z
-            (w' + b ^. #buff)
-            (w' + b ^. #buff + b ^. #wid)
-        ]
-    PlaceBottom ->
-      Chart
-        (RectA (rstyle b))
-        [ R
-            x
-            z
-            (y' - b ^. #wid - b ^. #buff)
-            (y' - b ^. #buff)
-        ]
-    PlaceLeft ->
-      Chart
-        (RectA (rstyle b))
-        [ R
-            (x' - b ^. #wid - b ^. #buff)
-            (x' - b ^. #buff)
-            y
-            w
-        ]
-    PlaceRight ->
-      Chart
-        (RectA (rstyle b))
-        [ R
-            (z' + (b ^. #buff))
-            (z' + (b ^. #buff) + (b ^. #wid))
-            y
-            w
-        ]
-    PlaceAbsolute (Point x'' _) ->
-      Chart
-        (RectA (rstyle b))
-        [ R
-            (x'' + (b ^. #buff))
-            (x'' + (b ^. #buff) + (b ^. #wid))
-            y
-            w
-        ]
-
-makeAxisBar :: (Monad m) => Place -> AxisBar -> HudT m Double
-makeAxisBar pl b = Hud $ \cs -> do
-  da <- use #chartDim
-  ca <- use #canvasDim
-  let c = axisBar_ pl b ca da
-  #chartDim .= addChartBox c da
-  pure $ c : cs
-
-title_ :: Title -> Rect Double -> Chart Double
-title_ t a =
-  Chart
-    ( TextA
-        ( style'
-            & #rotation ?~ rot
-        )
-        [t ^. #text]
-    )
-    [PointXY (placePos' a + alignPos a)]
-  where
-    style'
-      | t ^. #anchor == AnchorStart =
-        #anchor .~ AnchorStart $ t ^. #style
-      | t ^. #anchor == AnchorEnd =
-        #anchor .~ AnchorEnd $ t ^. #style
-      | otherwise = t ^. #style
-    rot
-      | t ^. #place == PlaceRight = pi / 2
-      | t ^. #place == PlaceLeft = -pi / 2
-      | otherwise = 0
-    placePos' (Rect x z y w) = case t ^. #place of
-      PlaceTop -> Point ((x + z) / 2.0) (w + (t ^. #buff))
-      PlaceBottom ->
-        Point
-          ((x + z) / 2.0)
-          ( y - (t ^. #buff)
-              - 0.5
-              * (t ^. #style . #vsize)
-              * (t ^. #style . #size)
-          )
-      PlaceLeft -> Point (x - (t ^. #buff)) ((y + w) / 2.0)
-      PlaceRight -> Point (z + (t ^. #buff)) ((y + w) / 2.0)
-      PlaceAbsolute p -> p
-    alignPos (Rect x z y w)
-      | t ^. #anchor == AnchorStart
-          && t ^. #place `elem` [PlaceTop, PlaceBottom] =
-        Point ((x - z) / 2.0) 0.0
-      | t ^. #anchor == AnchorStart
-          && t ^. #place == PlaceLeft =
-        Point 0.0 ((y - w) / 2.0)
-      | t ^. #anchor == AnchorStart
-          && t ^. #place == PlaceRight =
-        Point 0.0 ((w - y) / 2.0)
-      | t ^. #anchor == AnchorEnd
-          && t ^. #place `elem` [PlaceTop, PlaceBottom] =
-        Point ((-x + z) / 2.0) 0.0
-      | t ^. #anchor == AnchorEnd
-          && t ^. #place == PlaceLeft =
-        Point 0.0 ((-y + w) / 2.0)
-      | t ^. #anchor == AnchorEnd
-          && t ^. #place == PlaceRight =
-        Point 0.0 ((y - w) / 2.0)
-      | otherwise = Point 0.0 0.0
-
--- | Add a title to a chart. The logic used to work out placement is flawed due to being able to freely specify text rotation.  It works for specific rotations (Top, Bottom at 0, Left at 90, Right @ 270)
-title :: (Monad m) => Title -> HudT m Double
-title t = Hud $ \cs -> do
-  ca <- use #chartDim
-  let c = title_ t ca
-  #chartDim .= addChartBox c ca
-  pure $ c : cs
-
-placePos :: Place -> Double -> Rect Double -> Point Double
-placePos pl b (Rect x z y w) = case pl of
-  PlaceTop -> Point 0 (w + b)
-  PlaceBottom -> Point 0 (y - b)
-  PlaceLeft -> Point (x - b) 0
-  PlaceRight -> Point (z + b) 0
-  PlaceAbsolute p -> p
-
-placeRot :: Place -> Maybe Double
-placeRot pl = case pl of
-  PlaceRight -> Just (pi / 2)
-  PlaceLeft -> Just (pi / 2)
-  _ -> Nothing
-
-textPos :: Place -> TextStyle -> Double -> Point Double
-textPos pl tt b = case pl of
-  PlaceTop -> Point 0 b
-  PlaceBottom -> Point 0 (-b - 0.5 * (tt ^. #vsize) * (tt ^. #size))
-  PlaceLeft ->
-    Point
-      (-b)
-      ((tt ^. #nudge1) * (tt ^. #vsize) * (tt ^. #size))
-  PlaceRight ->
-    Point
-      b
-      ((tt ^. #nudge1) * (tt ^. #vsize) * (tt ^. #size))
-  PlaceAbsolute p -> p
-
-placeRange :: Place -> Rect Double -> Range Double
-placeRange pl (Rect x z y w) = case pl of
-  PlaceRight -> Range y w
-  PlaceLeft -> Range y w
-  _ -> Range x z
-
-placeOrigin :: Place -> Double -> Point Double
-placeOrigin pl x
-  | pl `elem` [PlaceTop, PlaceBottom] = Point x 0
-  | otherwise = Point 0 x
-
-placeTextAnchor :: Place -> (TextStyle -> TextStyle)
-placeTextAnchor pl
-  | pl == PlaceLeft = #anchor .~ AnchorEnd
-  | pl == PlaceRight = #anchor .~ AnchorStart
-  | otherwise = id
-
-placeGridLines :: Place -> Rect Double -> Double -> Double -> [XY Double]
-placeGridLines pl (Rect x z y w) a b
-  | pl `elem` [PlaceTop, PlaceBottom] = [P a (y - b), P a (w + b)]
-  | otherwise = [P (x - b) a, P (z + b) a]
-
--- | compute tick values and labels given options, ranges and formatting
-ticksR :: TickStyle -> Range Double -> Range Double -> [(Double, Text)]
-ticksR s d r =
-  case s of
-    TickNone -> []
-    TickRound f n e -> zip (project r d <$> ticks0) (formatNs f ticks0)
-      where
-        ticks0 = gridSensible OuterPos (e == NoTickExtend) r (fromIntegral n :: Integer)
-    TickExact f n -> zip (project r d <$> ticks0) (formatNs f ticks0)
-      where
-        ticks0 = grid OuterPos r n
-    TickLabels ls ->
-      zip
-        ( project (Range 0 (fromIntegral $ length ls)) d
-            <$> ((\x -> x - 0.5) . fromIntegral <$> [1 .. length ls])
-        )
-        ls
-    TickPlaced xs -> zip (project r d . fst <$> xs) (snd <$> xs)
-
-data TickComponents = TickComponents
-  { positions :: [Double],
-    labels :: [Text],
-    extension :: Maybe (Range Double)
-  }
-  deriving (Eq, Show, Generic)
-
--- | compute tick components given style, ranges and formatting
-makeTicks :: TickStyle -> Range Double -> TickComponents
-makeTicks s r =
-  case s of
-    TickNone -> TickComponents [] [] Nothing
-    TickRound f n e ->
-      TickComponents
-        ticks0
-        (formatNs f ticks0)
-        (bool (Just $ space1 ticks0) Nothing (e == NoTickExtend))
-      where
-        ticks0 = gridSensible OuterPos (e == NoTickExtend) r (fromIntegral n :: Integer)
-    TickExact f n -> TickComponents ticks0 (formatNs f ticks0) Nothing
-      where
-        ticks0 = grid OuterPos r n
-    TickLabels ls ->
-      TickComponents
-        ( project (Range 0 (fromIntegral $ length ls)) r
-            <$> ((\x -> x - 0.5) . fromIntegral <$> [1 .. length ls])
-        )
-        ls
-        Nothing
-    TickPlaced xs -> TickComponents (fst <$> xs) (snd <$> xs) Nothing
-
--- | compute tick values given placement, canvas dimension & data range
-ticksPlaced :: TickStyle -> Place -> Rect Double -> Rect Double -> TickComponents
-ticksPlaced ts pl d xs = TickComponents (project (placeRange pl xs) (placeRange pl d) <$> ps) ls ext
-  where
-    (TickComponents ps ls ext) = makeTicks ts (placeRange pl xs)
-
-tickGlyph_ :: Place -> (GlyphStyle, Double) -> TickStyle -> Rect Double -> Rect Double -> Rect Double -> Chart Double
-tickGlyph_ pl (g, b) ts ca da xs =
-  Chart
-    (GlyphA (g & #rotation .~ placeRot pl))
-    ( PointXY . (placePos pl b ca +) . placeOrigin pl
-        <$> positions
-          (ticksPlaced ts pl da xs)
-    )
-
--- | aka marks
-tickGlyph ::
-  (Monad m) =>
-  Place ->
-  (GlyphStyle, Double) ->
-  TickStyle ->
-  HudT m Double
-tickGlyph pl (g, b) ts = Hud $ \cs -> do
-  a <- use #chartDim
-  d <- use #canvasDim
-  xs <- use #dataDim
-  let c = tickGlyph_ pl (g, b) ts a d xs
-  #chartDim .= addToRect a (styleBox c)
-  pure $ c : cs
-
-tickText_ ::
-  Place ->
-  (TextStyle, Double) ->
-  TickStyle ->
-  Rect Double ->
-  Rect Double ->
-  Rect Double ->
-  [Chart Double]
-tickText_ pl (txts, b) ts ca da xs =
-  zipWith
-    ( \txt sp ->
-        Chart
-          ( TextA
-              (placeTextAnchor pl txts)
-              [txt]
-          )
-          [PointXY sp]
-    )
-    (labels $ ticksPlaced ts pl da xs)
-    ( (placePos pl b ca + textPos pl txts b +) . placeOrigin pl
-        <$> positions (ticksPlaced ts pl da xs)
-    )
-
--- | aka tick labels
-tickText ::
-  (Monad m) =>
-  Place ->
-  (TextStyle, Double) ->
-  TickStyle ->
-  HudT m Double
-tickText pl (txts, b) ts = Hud $ \cs -> do
-  ca <- use #chartDim
-  da <- use #canvasDim
-  xs <- use #dataDim
-  let c = tickText_ pl (txts, b) ts ca da xs
-  #chartDim .= addChartBoxes c ca
-  pure $ c <> cs
-
--- | aka grid lines
-tickLine ::
-  (Monad m) =>
-  Place ->
-  (LineStyle, Double) ->
-  TickStyle ->
-  HudT m Double
-tickLine pl (ls, b) ts = Hud $ \cs -> do
-  da <- use #canvasDim
-  xs <- use #dataDim
-  let c =
-        Chart (LineA ls) . (\x -> placeGridLines pl da x b)
-          <$> positions (ticksPlaced ts pl da xs)
-  #chartDim %= addChartBoxes c
-  pure $ c <> cs
-
--- | Create tick glyphs (marks), lines (grid) and text (labels)
-tick ::
-  (Monad m) =>
-  Place ->
-  Tick ->
-  HudT m Double
-tick pl t =
-  maybe mempty (\x -> tickGlyph pl x (t ^. #tstyle)) (t ^. #gtick)
-    <> maybe mempty (\x -> tickText pl x (t ^. #tstyle)) (t ^. #ttick)
-    <> maybe mempty (\x -> tickLine pl x (t ^. #tstyle)) (t ^. #ltick)
-    <> extendData pl t
-
--- | compute an extension to the Range if a tick went over the data bounding box
-computeTickExtension :: TickStyle -> Range Double -> Maybe (Range Double)
-computeTickExtension s r =
-  case s of
-    TickNone -> Nothing
-    TickRound _ n e -> bool Nothing (Just (space1 ticks0 <> r)) (e == TickExtend)
-      where
-        ticks0 = gridSensible OuterPos (e == NoTickExtend) r (fromIntegral n :: Integer)
-    TickExact _ _ -> Nothing
-    TickLabels _ -> Nothing
-    TickPlaced xs -> Just $ r <> space1 (fst <$> xs)
-
--- | Create a style extension for the data, if ticks extend beyond the existing range
-tickExtended ::
-  Place ->
-  Tick ->
-  Rect Double ->
-  Rect Double
-tickExtended pl t xs =
-  maybe
-    xs
-    (rangeext xs)
-    (computeTickExtension (t ^. #tstyle) (ranged xs))
-  where
-    ranged xs' = case pl of
-      PlaceTop -> rangex xs'
-      PlaceBottom -> rangex xs'
-      PlaceLeft -> rangey xs'
-      PlaceRight -> rangey xs'
-      PlaceAbsolute _ -> rangex xs'
-    rangex (Rect x z _ _) = Range x z
-    rangey (Rect _ _ y w) = Range y w
-    rangeext (Rect x z y w) (Range a0 a1) = case pl of
-      PlaceTop -> Rect a0 a1 y w
-      PlaceBottom -> Rect a0 a1 y w
-      PlaceLeft -> Rect x z a0 a1
-      PlaceRight -> Rect x z a0 a1
-      PlaceAbsolute _ -> Rect a0 a1 y w
-
-extendData :: (Monad m) => Place -> Tick -> HudT m Double
-extendData pl t = Hud $ \cs -> do
-  #dataDim %= tickExtended pl t
-  pure cs
-
--- | adjust Tick for sane font sizes etc
-adjustTick ::
-  Adjustments ->
-  Rect Double ->
-  Rect Double ->
-  Place ->
-  Tick ->
-  Tick
-adjustTick (Adjustments mrx ma mry ad) vb cs pl t
-  | pl `elem` [PlaceBottom, PlaceTop] =
-    if ad
-      then
-        ( case adjustSizeX > 1 of
-            True ->
-              ( case pl of
-                  PlaceBottom -> #ttick . _Just . _1 . #anchor .~ AnchorEnd
-                  PlaceTop -> #ttick . _Just . _1 . #anchor .~ AnchorStart
-                  _ -> #ttick . _Just . _1 . #anchor .~ AnchorEnd
-              )
-                . (#ttick . _Just . _1 . #size %~ (/ adjustSizeA))
-                $ (#ttick . _Just . _1 . #rotation ?~ pi / 4) t
-            False -> (#ttick . _Just . _1 . #size %~ (/ adjustSizeA)) t
-        )
-      else t & #ttick . _Just . _1 . #size %~ (/ adjustSizeX)
-  | otherwise -- pl `elem` [PlaceLeft, PlaceRight]
-    =
-    (#ttick . _Just . _1 . #size %~ (/ adjustSizeY)) t
-  where
-    max' [] = 1
-    max' xs = maximum xs
-    ra (Rect x z y w)
-      | pl `elem` [PlaceTop, PlaceBottom] = Range x z
-      | otherwise = Range y w
-    asp = ra vb
-    r = ra cs
-    tickl = snd <$> ticksR (t ^. #tstyle) asp r
-    maxWidth :: Double
-    maxWidth =
-      maybe
-        1
-        ( \tt ->
-            max' $
-              (\(Rect x z _ _) -> z - x)
-                . (\x -> styleBoxText (fst tt) x (Point 0 0))
-                <$> tickl
-        )
-        (t ^. #ttick)
-    maxHeight =
-      maybe
-        1
-        ( \tt ->
-            max' $
-              (\(Rect _ _ y w) -> w - y)
-                . (\x -> styleBoxText (fst tt) x (Point 0 0))
-                <$> tickl
-        )
-        (t ^. #ttick)
-    adjustSizeX :: Double
-    adjustSizeX = max' [(maxWidth / (upper asp - lower asp)) / mrx, 1]
-    adjustSizeY = max' [(maxHeight / (upper asp - lower asp)) / mry, 1]
-    adjustSizeA = max' [(maxHeight / (upper asp - lower asp)) / ma, 1]
-
-makeTick :: (Monad m) => AxisOptions -> HudT m Double
-makeTick c = Hud $ \cs -> do
-  vb <- use #chartDim
-  xs <- use #dataDim
-  let adjTick =
-        maybe
-          (c ^. #axisTick)
-          (\x -> adjustTick x vb xs (c ^. #place) (c ^. #axisTick))
-          (c ^. #adjust)
-  unhud (tick (c ^. #place) adjTick) cs
-
--- | Convert a UTCTime list into sensible ticks, placed exactly
-makeTickDates :: PosDiscontinuous -> Maybe Text -> Int -> [UTCTime] -> [(Int, Text)]
-makeTickDates pc fmt n dates =
-  lastOnes (\(_, x0) (_, x1) -> x0 == x1) . fst $ placedTimeLabelDiscontinuous pc fmt n dates
-  where
-    lastOnes :: (a -> a -> Bool) -> [a] -> [a]
-    lastOnes _ [] = []
-    lastOnes _ [x] = [x]
-    lastOnes f (x : xs) = (\(x0, x1) -> reverse $ x0 : x1) $ foldl' step (x, []) xs
-      where
-        step (a0, rs) a1 = if f a0 a1 then (a1, rs) else (a1, a0 : rs)
-
--- | Convert a UTCTime list into sensible ticks, placed on the (0,1) space
-makeTickDatesContinuous :: PosDiscontinuous -> Maybe Text -> Int -> [UTCTime] -> [(Double, Text)]
-makeTickDatesContinuous pc fmt n dates =
-  placedTimeLabelContinuous pc fmt n (space1 dates)
-
--- | Make a legend hud element taking into account the chart.
-legendHud :: LegendOptions -> [Chart Double] -> Hud Double
-legendHud l lcs = Hud $ \cs -> do
-  ca <- use #chartDim
-  let cs' = cs <> movedleg ca scaledleg
-  #chartDim .= fromMaybe one (styleBoxes cs')
-  pure cs'
-  where
-    scaledleg =
-      (#annotation %~ scaleAnn (l ^. #lscale))
-        . (#xys %~ fmap (fmap (* l ^. #lscale)))
-        <$> lcs
-    movedleg ca' leg =
-      maybe id (moveChart . PointXY . placel (l ^. #lplace) ca') (styleBoxes leg) leg
-    placel pl (Rect x z y w) (Rect x' z' y' w') =
-      case pl of
-        PlaceTop -> Point ((x + z) / 2.0) (w + (w' - y') / 2.0)
-        PlaceBottom -> Point ((x + z) / 2.0) (y - (w' - y' / 2.0))
-        PlaceLeft -> Point (x - (z' - x') / 2.0) ((y + w) / 2.0)
-        PlaceRight -> Point (z + (z' - x') / 2.0) ((y + w) / 2.0)
-        PlaceAbsolute p -> p
-
-legendEntry ::
-  LegendOptions ->
-  Annotation ->
-  Text ->
-  (Chart Double, Chart Double)
-legendEntry l a t =
-  ( Chart ann sps,
-    Chart (TextA (l ^. #ltext & #anchor .~ AnchorStart) [t]) [zero]
-  )
-  where
-    (ann, sps) = case a of
-      RectA rs ->
-        ( RectA rs,
-          [R 0 (l ^. #lsize) 0 (l ^. #lsize)]
-        )
-      TextA ts txts ->
-        ( TextA (ts & #size .~ (l ^. #lsize)) (take 1 txts),
-          [zero]
-        )
-      GlyphA gs ->
-        ( GlyphA (gs & #size .~ (l ^. #lsize)),
-          [P (0.5 * l ^. #lsize) (0.33 * l ^. #lsize)]
-        )
-      LineA ls ->
-        ( LineA (ls & #width %~ (/ (l ^. #lscale))),
-          [P 0 (1 * l ^. #lsize), P (2 * l ^. #lsize) (1 * l ^. #lsize)]
-        )
-      PathA ps _ ->
-        ( let cs =
-                singletonCubic
-                  ( CubicPosition
-                      (Point 0 0)
-                      (Point (0.33 * l ^. #lsize) (0.33 * l ^. #lsize))
-                      (Point 0 (0.33 * l ^. #lsize))
-                      (Point (0.33 * l ^. #lsize) 0)
-                  )
-           in (PathA (ps & #borderSize .~ (l ^. #lsize)) (fst <$> cs), PointXY . snd <$> cs)
-        )
-      BlankA ->
-        ( BlankA,
-          [zero]
-        )
-
-legendChart :: [(Annotation, Text)] -> LegendOptions -> [Chart Double]
-legendChart lrs l =
-  padChart (l ^. #outerPad)
-    . maybe id (\x -> frameChart x (l ^. #innerPad)) (l ^. #legendFrame)
-    . vert (l ^. #hgap)
-    $ (\(a, t) -> hori ((l ^. #vgap) + twidth - gapwidth t) [[t], [a]])
-      <$> es
-  where
-    es = reverse $ uncurry (legendEntry l) <$> lrs
-    twidth = maybe 0 (\(Rect _ z _ _) -> z) . foldRect $ catMaybes (styleBox . snd <$> es)
-    gapwidth t = maybe 0 (\(Rect _ z _ _) -> z) (styleBox t)
-
--- | Project the xys of a chart to a new XY Space.
---
--- > projectXYs (dataBox cs) cs == cs if cs is non-empty
-projectXYs :: Rect Double -> [Chart Double] -> [Chart Double]
-projectXYs _ [] = []
-projectXYs new cs = projectXYsWith new old cs
-  where
-    old = fromMaybe one (dataBoxes cs)
-
--- | Project chart xys to a new XY Space from an old XY Space
---
--- The projections needed are:
---
--- - project the 'xys'
---
--- - project the control points of bezier curves
---
--- - project aspect changes only to radii of ellipticals.
---
--- > projectXYsWith x x == id
-projectXYsWith :: Rect Double -> Rect Double -> [Chart Double] -> [Chart Double]
-projectXYsWith new old cs = cs'
-  where
-    xss = fmap (projectOn new old) . xys <$> cs
-    ss = projectAnn <$> cs
-    cs' = zipWith Chart ss xss
-    projectAnn (Chart (PathA ps ips) xys) =
-      PathA ps (projectControls ips xys)
-    projectAnn x = annotation x
-
-    projectControls pis xys =
-      (reverse . snd) (foldl' (\(prevp, l) (i, xy) -> (xy, projectControl prevp xy i : l)) (zero, []) (zip pis xys))
-
-    projectControl _ _ (CubicI c1 c2) =
-      CubicI (projectOnP new old c1) (projectOnP new old c2)
-    projectControl _ _ (QuadI c) =
-      QuadI (projectOnP new old c)
-    projectControl p1 p2 (ArcI ai) = ArcI $ projectArcPosition new old (ArcPosition (toPoint p1) (toPoint p2) ai)
-    projectControl _ _ x = x
-
--- | project an ArcPosition given new and old Rects
---
--- The radii of the ellipse can be represented as:
---
--- Point rx 0 & Point 0 ry
---
--- These two points are firstly rotated by p and then undergo scaling...
-projectArcPosition :: Rect Double -> Rect Double -> ArcPosition Double -> ArcInfo Double
-projectArcPosition new old (ArcPosition _ _ (ArcInfo (Point rx ry) phi l cl)) = ArcInfo (Point rx'' ry'') phi l cl
-  where
-    rx' = rotateP phi (Point rx zero)
-    rx'' = norm $ rx' * NH.width new / NH.width old
-    ry' = rotateP phi (Point zero ry)
-    ry'' = norm $ ry' * NH.width new / NH.width old
-
--- | pad a Rect to remove singleton dimensions
-padBox :: Maybe (Rect Double) -> Rect Double
-padBox = maybe one singletonUnit
-  where
-    singletonUnit (Rect x z y w)
-      | x == z && y == w = Rect (x - 0.5) (x + 0.5) (y - 0.5) (y + 0.5)
-      | x == z = Rect (x - 0.5) (x + 0.5) y w
-      | y == w = Rect x z (y - 0.5) (y + 0.5)
-      | otherwise = Rect x z y w
-
--- | 'Rect' of a 'Chart', not including style
-dataBox :: Chart Double -> Maybe (Rect Double)
-dataBox c =
-  case c ^. #annotation of
-    PathA _ path' -> pathBoxes $ zip path' (toPoint <$> c ^. #xys)
-    _ -> foldRect $ fmap toRect (c ^. #xys)
-
--- | 'Rect' of charts, not including style
-dataBoxes :: [Chart Double] -> Maybe (Rect Double)
-dataBoxes cs = foldRect $ catMaybes $ dataBox <$> cs
-
--- | 'Rect' of charts, not including style, with defaults for Nothing and singleton dimensions if any.
-dataBoxesS :: [Chart Double] -> Rect Double
-dataBoxesS cs = padBox $ foldRect $ catMaybes $ dataBox <$> cs
-
--- | the extra area from text styling
-styleBoxText ::
-  TextStyle ->
-  Text ->
-  Point Double ->
-  Rect Double
-styleBoxText o t p = move p $ maybe flat (`rotationBound` flat) (o ^. #rotation)
-  where
-    flat = Rect ((-x' / 2.0) + x' * a') (x' / 2 + x' * a') ((-y' / 2) - n1') (y' / 2 - n1')
-    s = o ^. #size
-    h = o ^. #hsize
-    v = o ^. #vsize
-    n1 = o ^. #nudge1
-    x' = s * h * fromIntegral (sum $ maybe 0 Text.length . maybeTagText <$> parseTags t)
-    y' = s * v
-    n1' = s * n1
-    a' = case o ^. #anchor of
-      AnchorStart -> 0.5
-      AnchorEnd -> -0.5
-      AnchorMiddle -> 0.0
-
--- | the extra area from glyph styling
-styleBoxGlyph :: GlyphStyle -> Rect Double
-styleBoxGlyph s = move p' $
-  sw $ case sh of
-    CircleGlyph -> (sz *) <$> one
-    SquareGlyph -> (sz *) <$> one
-    EllipseGlyph a -> NH.scale (Point sz (a * sz)) one
-    RectSharpGlyph a -> NH.scale (Point sz (a * sz)) one
-    RectRoundedGlyph a _ _ -> NH.scale (Point sz (a * sz)) one
-    VLineGlyph _ -> NH.scale (Point ((s ^. #borderSize) * sz) sz) one
-    HLineGlyph _ -> NH.scale (Point sz ((s ^. #borderSize) * sz)) one
-    TriangleGlyph a b c -> (sz *) <$> sconcat (toRect . PointXY <$> (a :| [b, c]) :: NonEmpty (Rect Double))
-    PathGlyph path' -> (sz *) <$> fromMaybe one (pathBoxes . toPathXYs . parsePath $ path')
-  where
-    sh = s ^. #shape
-    sz = s ^. #size
-    sw = padRect (0.5 * s ^. #borderSize)
-    p' = fromMaybe (Point 0.0 0.0) (s ^. #translate)
-
--- | the geometric dimensions of a Chart inclusive of style geometry, but excluding PathA effects
-styleBox :: Chart Double -> Maybe (Rect Double)
-styleBox (Chart (TextA s ts) xs) = foldRect $ zipWith (\t x -> styleBoxText s t (toPoint x)) ts xs
-styleBox (Chart (GlyphA s) xs) = foldRect $ (\x -> move (toPoint x) (styleBoxGlyph s)) <$> xs
-styleBox (Chart (RectA s) xs) = foldRect (padRect (0.5 * s ^. #borderSize) . toRect <$> xs)
-styleBox (Chart (LineA s) xs) = foldRect (padRect (0.5 * s ^. #width) . toRect <$> xs)
-styleBox c@(Chart (PathA s _) _) = padRect (0.5 * s ^. #borderSize) <$> dataBox c
-styleBox (Chart BlankA xs) = foldRect (toRect <$> xs)
-
--- | the extra geometric dimensions of a [Chart]
-styleBoxes :: [Chart Double] -> Maybe (Rect Double)
-styleBoxes xss = foldRect $ catMaybes (styleBox <$> xss)
-
--- | the extra geometric dimensions of a [Chart], adjusted for Nothing or singleton dimensions.
-styleBoxesS :: [Chart Double] -> Rect Double
-styleBoxesS xss = padBox $ foldRect $ catMaybes (styleBox <$> xss)
-
--- | additively pad a [Chart]
---
--- >>> import NumHask.Prelude (one)
--- >>> padChart 0.1 [Chart (RectA defaultRectStyle) [RectXY one]]
--- [Chart {annotation = RectA (RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.65 0.81 0.89 1.00, color = Colour 0.12 0.47 0.71 1.00}), xys = [R -0.5 0.5 -0.5 0.5]},Chart {annotation = BlankA, xys = [R -0.605 0.605 -0.605 0.605]}]
-padChart :: Double -> [Chart Double] -> [Chart Double]
-padChart p cs = cs <> [Chart BlankA (maybeToList (RectXY . padRect p <$> styleBoxes cs))]
-
--- | overlay a frame on some charts with some additive padding between
---
--- >>> frameChart defaultRectStyle 0.1 [Chart BlankA []]
--- [Chart {annotation = RectA (RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.65 0.81 0.89 1.00, color = Colour 0.12 0.47 0.71 1.00}), xys = []},Chart {annotation = BlankA, xys = []}]
-frameChart :: RectStyle -> Double -> [Chart Double] -> [Chart Double]
-frameChart rs p cs = [Chart (RectA rs) (maybeToList (RectXY . padRect p <$> styleBoxes cs))] <> cs
-
--- | useful for testing bounding boxes
-frameAllCharts :: [Chart Double] -> [Chart Double]
-frameAllCharts cs = mconcat $ frameChart (border 0.004 light) 0.004 . (: []) <$> cs
-
--- | horizontally stack a list of list of charts (proceeding to the right) with a gap between
-hori :: Double -> [[Chart Double]] -> [Chart Double]
-hori _ [] = []
-hori gap cs = foldl' step [] cs
-  where
-    step x a = x <> (a & fmap (#xys %~ fmap (\s -> P (widthx x) (aligny x - aligny a) + s)))
-    widthx xs = maybe 0 (\(Rect x' z' _ _) -> z' - x' + gap) (styleBoxes xs)
-    aligny xs = maybe 0 (\(Rect _ _ y' w') -> (y' + w') / 2) (styleBoxes xs)
-
--- | vertically stack a list of charts (proceeding upwards), aligning them to the left
-vert :: Double -> [[Chart Double]] -> [Chart Double]
-vert _ [] = []
-vert gap cs = foldl' step [] cs
-  where
-    step x a = x <> (a & fmap (#xys %~ fmap (\s -> P (alignx x - alignx a) (widthy x) + s)))
-    widthy xs = maybe 0 (\(Rect _ _ y' w') -> w' - y' + gap) (styleBoxes xs)
-    alignx xs = maybe 0 (\(Rect x' _ _ _) -> x') (styleBoxes xs)
-
--- | stack a list of charts horizontally, then vertically
-stack :: Int -> Double -> [[Chart Double]] -> [Chart Double]
-stack _ _ [] = []
-stack n gap cs = vert gap (hori gap <$> group' cs [])
-  where
-    group' [] acc = reverse acc
-    group' x acc = group' (drop n x) (take n x : acc)
-
-addChartBox :: Chart Double -> Rect Double -> Rect Double
-addChartBox c r = sconcat (r :| maybeToList (styleBox c))
-
-addChartBoxes :: [Chart Double] -> Rect Double -> Rect Double
-addChartBoxes c r = sconcat (r :| maybeToList (styleBoxes c))
diff --git a/src/Chart/Various.hs b/src/Chart/Various.hs
deleted file mode 100644
--- a/src/Chart/Various.hs
+++ /dev/null
@@ -1,325 +0,0 @@
-{-# LANGUAGE OverloadedLabels #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
-
--- | Various common chart patterns.
-module Chart.Various
-  ( -- * sub-chart patterns
-    xify,
-    xify',
-    yify,
-    yify',
-    addLineX,
-    addLineY,
-    stdLineChart,
-    stdLines,
-    lineLegend,
-    tsAxes,
-    titlesHud,
-    gpalette,
-    gpaletteStyle,
-    blendMidLineStyles,
-
-    -- * chart patterns
-    quantileChart,
-    digitChart,
-    scatterChart,
-    histChart,
-    quantileHistChart,
-    digitSurfaceChart,
-    tableChart,
-  )
-where
-
-import Chart
-import Control.Lens
-import Data.Bifunctor
-import Data.Foldable
-import qualified Data.HashMap.Strict as HashMap
-import Data.Maybe
-import Data.Text (Text)
-import Data.Time (UTCTime (..))
-import NumHask.Prelude (one)
-import NumHask.Space
-
--- | convert from [a] to [Point a], by adding the index as the x axis
-xify :: [Double] -> [Point Double]
-xify ys =
-  zipWith Point [0 ..] ys
-
--- | convert from [a] to [XY a], by adding the index as the x axis
-xify' :: [Double] -> [XY Double]
-xify' ys =
-  zipWith P [0 ..] ys
-
--- | convert from [a] to [Point a], by adding the index as the y axis
-yify :: [Double] -> [Point Double]
-yify xs =
-  zipWith Point xs [0 ..]
-
--- | convert from [a] to [XY a], by adding the index as the y axis
-yify' :: [Double] -> [XY Double]
-yify' xs =
-  zipWith P xs [0 ..]
-
--- | add a horizontal line at y
-addLineX :: Double -> LineStyle -> [Chart Double] -> [Chart Double]
-addLineX y ls cs = cs <> [l]
-  where
-    l = Chart (LineA ls) (PointXY <$> [Point lx y, Point ux y])
-    (Rect lx ux _ _) = fromMaybe one $ foldRect $ mconcat $ fmap toRect . xys <$> cs
-
--- | add a verticle line at x
-addLineY :: Double -> LineStyle -> [Chart Double] -> [Chart Double]
-addLineY x ls cs = cs <> [zeroLine]
-  where
-    zeroLine = Chart (LineA ls) (PointXY <$> [Point x ly, Point x uy])
-    (Rect _ _ ly uy) = fromMaybe one $ foldRect $ mconcat $ fmap toRect . xys <$> cs
-
--- | interpret a [[Double]] as a series of lines with x coordinates of [0..]
-stdLineChart :: Double -> [Colour] -> [[Double]] -> [Chart Double]
-stdLineChart w p xss =
-  zipWith
-    ( \c xs ->
-        Chart
-          (LineA (defaultLineStyle & #color .~ c & #width .~ w))
-          (xify' xs)
-    )
-    p
-    xss
-
--- | Can of the main palette
-stdLines :: Double -> [LineStyle]
-stdLines w = (\c -> defaultLineStyle & #color .~ c & #width .~ w) <$> palette1_
-
--- | Legend template for a line chart.
-lineLegend :: Double -> [Text] -> [Colour] -> (LegendOptions, [(Annotation, Text)])
-lineLegend w rs cs =
-  ( defaultLegendOptions
-      & #ltext . #size .~ 0.3
-      & #lplace .~ PlaceBottom
-      & #legendFrame .~ Just (RectStyle 0.02 (palette1 5) (palette1 4)),
-    zipWith
-      (\a r -> (LineA a, r))
-      ((\c -> defaultLineStyle & #color .~ c & #width .~ w) <$> cs)
-      rs
-  )
-
--- | Create a hud that has time as the x-axis, based on supplied days, and a rounded yaxis.
-tsAxes :: [UTCTime] -> [AxisOptions]
-tsAxes ds =
-  [ defaultAxisOptions
-      & #axisTick . #tstyle .~ TickRound (FormatPrec (Just 3)) 6 TickExtend
-      & #place .~ PlaceLeft,
-    defaultAxisOptions & #axisTick . #tstyle
-      .~ TickPlaced
-        ( first fromIntegral
-            <$> makeTickDates PosIncludeBoundaries Nothing 8 ds
-        )
-  ]
-
--- | common pattern of chart title, x-axis title and y-axis title
-titlesHud :: Text -> Text -> Text -> HudOptions
-titlesHud t x y =
-  defaultHudOptions
-    & #hudTitles
-    .~ [ defaultTitle t,
-         defaultTitle x & #place .~ PlaceBottom & #style . #size .~ 0.08,
-         defaultTitle y & #place .~ PlaceLeft & #style . #size .~ 0.08
-       ]
-
--- | GlyphStyle palette
-gpaletteStyle :: Double -> [GlyphStyle]
-gpaletteStyle s = zipWith (\c g -> defaultGlyphStyle & #size .~ s & #color .~ c & #shape .~ fst g & #borderSize .~ snd g) palette1_ gpalette
-
--- | Glyph palette
-gpalette :: [(GlyphShape, Double)]
-gpalette =
-  [ (CircleGlyph, 0.01 :: Double),
-    (SquareGlyph, 0.01),
-    (RectSharpGlyph 0.75, 0.01),
-    (RectRoundedGlyph 0.75 0.01 0.01, 0.01),
-    (EllipseGlyph 0.75, 0),
-    (VLineGlyph 0.005, 0.01),
-    (HLineGlyph 0.005, 0.01),
-    (TriangleGlyph (Point 0.0 0.0) (Point 1 1) (Point 1 0), 0.01),
-    (PathGlyph "M0.05,-0.03660254037844387 A0.1 0.1 0.0 0 1 0.0,0.05 0.1 0.1 0.0 0 1 -0.05,-0.03660254037844387 0.1 0.1 0.0 0 1 0.05,-0.03660254037844387 Z", 0.01)
-  ]
-
--- * charts
-
--- | Chart template for quantiles.
-quantileChart ::
-  Text ->
-  [Text] ->
-  [LineStyle] ->
-  [AxisOptions] ->
-  [[Double]] ->
-  ChartSvg
-quantileChart title names ls as xs =
-  mempty & #hudOptions .~ hudOptions & #chartList .~ chart'
-  where
-    hudOptions =
-      defaultHudOptions
-        & #hudTitles .~ [defaultTitle title]
-        & ( #hudLegend
-              .~ Just
-                ( defaultLegendOptions
-                    & #ltext . #size .~ 0.1
-                    & #vgap .~ 0.05
-                    & #innerPad .~ 0.2
-                    & #lplace .~ PlaceRight,
-                  extractAnns names chart'
-                )
-          )
-        & #hudAxes .~ as
-    extractAnns = zipWith (\t c -> (c ^. #annotation, t))
-
-    chart' =
-      zipWith
-        (\l c -> Chart (LineA l) c)
-        ls
-        (zipWith P [0 ..] <$> xs)
-
--- | /blendMidLineStyle n w/ produces n lines of width w interpolated between two colors.
-blendMidLineStyles :: Int -> Double -> (Colour, Colour) -> [LineStyle]
-blendMidLineStyles l w (c1, c2) = lo
-  where
-    m = (fromIntegral l - 1) / 2 :: Double
-    cs = (\x -> 1 - abs (fromIntegral x - m) / m) <$> [0 .. (l - 1)]
-    bs = (\x -> blend x c1 c2) <$> cs
-    lo = (\c -> defaultLineStyle & #width .~ w & #color .~ c) <$> bs
-
--- | No idea what this is really.
-digitChart ::
-  Text ->
-  [UTCTime] ->
-  [Double] ->
-  ChartSvg
-digitChart title utcs xs =
-  mempty & #hudOptions .~ hudOptions & #chartList .~ [c]
-  where
-    hudOptions =
-      defaultHudOptions
-        & #hudTitles .~ [defaultTitle title]
-        & #hudAxes .~ tsAxes utcs
-    c =
-      Chart
-        ( GlyphA
-            ( defaultGlyphStyle
-                & #color .~ Colour 0 0 1 1
-                & #shape .~ CircleGlyph
-                & #size .~ 0.01
-            )
-        )
-        (xify' xs)
-
--- | scatter chart
-scatterChart ::
-  [[Point Double]] ->
-  [Chart Double]
-scatterChart xss = zipWith (\gs xs -> Chart (GlyphA gs) (PointXY <$> xs)) (gpaletteStyle 0.02) xss
-
--- | histogram chart
-histChart ::
-  Text ->
-  Maybe [Text] ->
-  Range Double ->
-  Int ->
-  [Double] ->
-  ChartSvg
-histChart title names r g xs =
-  barChart defaultBarOptions barData
-    & (#hudOptions . #hudTitles .~ [defaultTitle title])
-  where
-    barData = BarData [hr] names Nothing
-    hcuts = grid OuterPos r g
-    h = fill hcuts xs
-    hr =
-      (\(Rect x x' _ _) -> (x + x') / 2)
-        <$> makeRects (IncludeOvers (NumHask.Space.width r / fromIntegral g)) h
-
--- | a chart drawing a histogram based on quantile information
-quantileHistChart ::
-  Text ->
-  Maybe [Text] ->
-  -- | quantiles
-  [Double] ->
-  -- | quantile values
-  [Double] ->
-  ChartSvg
-quantileHistChart title names qs vs =
-  mempty & #hudOptions .~ hudOptions & #chartList .~ [chart']
-  where
-    hudOptions =
-      defaultHudOptions
-        & #hudTitles
-        .~ [defaultTitle title]
-        & #hudAxes
-        .~ [ maybe
-               ( defaultAxisOptions & #axisTick . #tstyle
-                   .~ TickRound (FormatPrec (Just 3)) 8 TickExtend
-               )
-               ( \x ->
-                   defaultAxisOptions & #axisTick . #tstyle
-                     .~ TickPlaced (zip vs x)
-               )
-               names
-           ]
-    chart' = Chart (RectA defaultRectStyle) (RectXY <$> hr)
-    hr =
-      zipWith
-        (\(y, w) (x, z) -> Rect x z 0 ((w - y) / (z - x)))
-        (zip qs (drop 1 qs))
-        (zip vs (drop 1 vs))
-
--- | pixel chart of digitized vs digitized counts
-digitSurfaceChart ::
-  SurfaceStyle ->
-  SurfaceLegendOptions ->
-  (Text, Text, Text) ->
-  [Text] ->
-  [(Int, Int)] ->
-  [Chart Double]
-digitSurfaceChart pixelStyle plo ts names ps =
-  runHud (aspect 1) (hs0 <> hs1) (cs0 <> cs1)
-  where
-    l = length names
-    pts = Point l l
-    gr :: Rect Double
-    gr = fromIntegral <$> Rect 0 l 0 l
-    mapCount = foldl' (\m x -> HashMap.insertWith (+) x 1.0 m) HashMap.empty ps
-    f :: Point Double -> Double
-    f (Point x y) = fromMaybe 0 $ HashMap.lookup (floor x, floor y) mapCount
-    (hs0, cs0) = makeHud gr (qvqHud ts names)
-    (cs1, hs1) =
-      surfacefl
-        f
-        (SurfaceOptions pixelStyle pts gr)
-        plo
-
--- style helpers
-qvqHud :: (Text, Text, Text) -> [Text] -> HudOptions
-qvqHud ts labels =
-  defaultHudOptions
-    & #hudTitles .~ makeTitles ts
-    & #hudAxes
-      .~ [ defaultAxisOptions
-             & #axisTick . #tstyle .~ TickPlaced (zip ((0.5 +) <$> [0 ..]) labels)
-             & #place .~ PlaceLeft,
-           defaultAxisOptions
-             & #axisTick . #tstyle .~ TickPlaced (zip ((0.5 +) <$> [0 ..]) labels)
-             & #place .~ PlaceBottom
-         ]
-
-makeTitles :: (Text, Text, Text) -> [Title]
-makeTitles (t, xt, yt) =
-  reverse
-    [ defaultTitle t,
-      defaultTitle xt & #place .~ PlaceBottom & #style . #size .~ 0.06,
-      defaultTitle yt & #place .~ PlaceLeft & #style . #size .~ 0.06
-    ]
-
--- | Chart for double list of Text.
-tableChart :: [[Text]] -> [Chart Double]
-tableChart tss = zipWith (\ts x -> Chart (TextA defaultTextStyle ts) (P x <$> take (length ts) [0 ..])) tss [0 ..]
diff --git a/src/Data/Colour.hs b/src/Data/Colour.hs
--- a/src/Data/Colour.hs
+++ b/src/Data/Colour.hs
@@ -1,61 +1,120 @@
-{-# LANGUAGE AllowAmbiguousTypes #-}
-{-# LANGUAGE ConstraintKinds #-}
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE DuplicateRecordFields #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE GeneralisedNewtypeDeriving #-}
+{-# LANGUAGE OverloadedLists #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE QuasiQuotes #-}
+{-# LANGUAGE UndecidableInstances #-}
 {-# OPTIONS_GHC -Wall #-}
-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
-{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-}
-{-# OPTIONS_GHC -fno-warn-type-defaults #-}
 
--- | Colour representations and combinations, based on <https://hackage.haskell.org/package/Color>
+-- | Colour representations and combinations.
+--
 module Data.Colour
-  ( Colour,
+  ( -- * Colour
+    Colour,
     pattern Colour,
+    validColour,
+    validate,
+    trimColour,
+    showRGBA,
+    showRGB,
+    opac',
     opac,
-    setOpac,
     hex,
-    blend,
-    blends,
+    rgb,
     toHex,
     fromHex,
     unsafeFromHex,
+
+    -- * Palette colours
     palette1,
-    palette1_,
+    palette1a,
     transparent,
     black,
     white,
     light,
     dark,
+    grey,
+
+    -- * LCH model
+    LCH (..),
+    pattern LCH,
+    lLCH',
+    cLCH',
+    hLCH',
+    LCHA (..),
+    pattern LCHA,
+    lch',
+    alpha',
+    RGB3 (..),
+    pattern RGB3,
+    rgbd',
+    rgb32colour',
+    LAB (..),
+    pattern LAB,
+    lcha2colour',
+    xy2ch',
+
+    -- * mixins
+    mix,
+    mixTrim,
+    mixLCHA,
+    mixes,
+    greyed,
+    lightness',
+    chroma',
+    hue',
+    showSwatch,
+    showSwatches,
+    rvRGB3,
+    rvColour,
+    paletteR,
   )
 where
 
+import Chart.Data
 import qualified Data.Attoparsec.Text as A
 import Data.Bifunctor
+import Data.Bool (bool)
 import Data.Char
 import Data.Either
 import Data.FormatN
-import Data.Generics.Labels ()
+import Data.Functor.Rep
 import qualified Data.List as List
 import Data.Text (Text, pack)
 import qualified Data.Text as Text
+import GHC.Exts
 import GHC.Generics hiding (prec)
-import Graphics.Color.Model
+import Graphics.Color.Model as M hiding (LCH)
+import qualified Graphics.Color.Space as S
+import NeatInterpolation
+import NumHask.Algebra.Metric
+import NumHask.Array.Fixed
+import Optics.Core
+import System.Random
+import System.Random.Stateful
 
--- | Wrapper for 'Color'.
+-- $setup
+--
+-- >>> :set -XOverloadedLabels
+-- >>> :set -XOverloadedStrings
+-- >>> import Chart
+-- >>> import Optics.Core
+
+-- | Colour type for the library, wrapping 'Color'.
+--
 newtype Colour = Colour'
   { color' :: Color (Alpha RGB) Double
   }
   deriving (Eq, Generic)
 
 -- | Constructor pattern.
+--
+-- > Colour red green blue alpha
+--
 pattern Colour :: Double -> Double -> Double -> Double -> Colour
 pattern Colour r g b a = Colour' (ColorRGBA r g b a)
 
@@ -73,48 +132,65 @@
         <> " "
         <> fixed (Just 2) a
 
--- | opac
+-- | CSS-style representation
+showRGBA :: Colour -> Text
+showRGBA (Colour r' g' b' a') =
+  [trimming|rgba($r, $g, $b, $a)|]
+  where
+    r = percent (fixedSF (Just 0)) (Just 2) r'
+    g = percent (fixedSF (Just 0)) (Just 2) g'
+    b = percent (fixedSF (Just 0)) (Just 2) b'
+    a = fixed (Just 2) a'
+
+-- | CSS-style representation
+showRGB :: Colour -> Text
+showRGB (Colour r' g' b' _) =
+  [trimming|rgb($r, $g, $b)|]
+  where
+    r = percent (fixedSF (Just 0)) (Just 2) r'
+    g = percent (fixedSF (Just 0)) (Just 2) g'
+    b = percent (fixedSF (Just 0)) (Just 2) b'
+
+-- | Is Colour in-gamut?
+--
+-- >>> validColour (Colour 1 1 1.01 1)
+-- False
+validColour :: Colour -> Bool
+validColour (Colour r g b o) = r >= 0 && r <= 1 && g >= 0 && g <= 1 && b >= 0 && b <= 1 && o >= 0 && o <= 1
+
+-- | Trim colour back to gamut.
+--
+-- >>> trimColour (Colour 1 1 1.01 1)
+-- Colour 1.00 1.00 1.00 1.00
+trimColour :: Colour -> Colour
+trimColour (Colour r g b a) = Colour (trim r) (trim g) (trim b) (trim a)
+  where
+    trim x = max 0 $ min 1 x
+
+-- | Validate that the Colout is in-gamut.
+--
+-- >>> validate (Colour 1 1 1.01 1)
+-- Nothing
+validate :: Colour -> Maybe Colour
+validate c = bool Nothing (Just c) (validColour c)
+
+-- | Opacity or alpha
 opac :: Colour -> Double
 opac (Colour _ _ _ o) = o
 
--- | set opacity
-setOpac :: Double -> Colour -> Colour
-setOpac o (Colour r g b _) = Colour r g b o
+-- | lens for opacity (or alpha channel)
+opac' :: Lens' Colour Double
+opac' = lens opac (\(Colour r g b _) o -> Colour r g b o)
 
--- |
+-- | Convert to CSS hex representation.
 hex :: Colour -> Text
 hex c = toHex c
 
--- | interpolate between 2 colors
-blend :: Double -> Colour -> Colour -> Colour
-blend c (Colour r g b a) (Colour r' g' b' a') = Colour r'' g'' b'' a''
-  where
-    r'' = r + c * (r' - r)
-    g'' = g + c * (g' - g)
-    b'' = b + c * (b' - b)
-    a'' = a + c * (a' - a)
-
--- | interpolate across a list of Colours, with input being in Range 0 1
---
--- >>> blends 0 [black, (Colour 0.2 0.6 0.8 0.5), white] == black
--- True
---
--- >>> blends 1 [black, (Colour 0.2 0.6 0.8 0.5), white] == white
--- True
---
--- >>> blends 0.6 [black, (Colour 0.2 0.6 0.8 0.5), white]
--- Colour 0.36 0.68 0.84 0.60
-blends :: Double -> [Colour] -> Colour
-blends _ [] = light
-blends _ [c] = c
-blends x cs = blend r (cs List.!! i) (cs List.!! (i + 1))
-  where
-    l = length cs - 1
-    x' = x * fromIntegral l
-    i = max 0 (min (floor x') (l - 1))
-    r = x' - fromIntegral i
+-- | Sets RGB color but not opacity
+rgb :: Colour -> Colour -> Colour
+rgb (Colour r g b _) (Colour _ _ _ o) = Colour r g b o
 
--- |
+-- | Parse CSS hex text.
 parseHex :: A.Parser (Color RGB Double)
 parseHex =
   fmap toDouble
@@ -125,15 +201,15 @@
     . (`divMod` 256)
     <$> (A.string "#" *> A.hexadecimal)
 
--- |
+-- | Convert CSS hex to Colour
 fromHex :: Text -> Either Text (Color RGB Double)
 fromHex = first pack . A.parseOnly parseHex
 
--- |
+-- | Convert CSS hex to Colour, unsafely.
 unsafeFromHex :: Text -> Color RGB Double
 unsafeFromHex t = fromRight (ColorRGB 0 0 0) $ A.parseOnly parseHex t
 
--- | convert from 'Colour' to #xxxxxx
+-- | Convert from 'Colour' to CSS hex (#xxxxxx)
 toHex :: Colour -> Text
 toHex c =
   "#"
@@ -163,46 +239,48 @@
 i2d :: Int -> Char
 i2d i = chr (ord '0' + i)
 
--- | select a Colour from the palette
+-- | Select a Colour from the palette
 --
 -- >>> palette1 0
--- Colour 0.69 0.35 0.16 1.00
+-- Colour 0.02 0.73 0.80 1.00
+--
+-- ![wheel](other/wheel.svg)
 palette1 :: Int -> Colour
 palette1 x = cycle palette1_ List.!! x
 
--- | finite list of Colours
+palette1LCHA_ :: [LCHA]
+palette1LCHA_ = [LCHA 0.72 0.123 207 1, LCHA 0.40 0.10 246 1, LCHA 0.50 0.21 338 1, LCHA 0.8 0.15 331 1, LCHA 0.83 0.14 69 1, LCHA 0.57 0.15 50 1, LCHA 0.38 0.085 128 1, LCHA 0.60 0.08 104 1]
+
+-- | Finite list of Colours
+--
+-- Swatched to the oklab color model:
+--
+-- ![palette1](other/palette1.svg)
 palette1_ :: [Colour]
-palette1_ =
-  [ Colour 0.69 0.35 0.16 1.00,
-    Colour 0.65 0.81 0.89 1.00,
-    Colour 0.12 0.47 0.71 1.00,
-    Colour 0.89 0.10 0.11 1.00,
-    Colour 0.70 0.87 0.54 1.00,
-    Colour 0.20 0.63 0.17 1.00,
-    Colour 0.98 0.60 0.60 1.00,
-    Colour 0.99 0.75 0.44 1.00,
-    Colour 1.00 0.50 0.00 1.00,
-    Colour 0.99 0.99 0.99 1.00,
-    Colour 0.00 0.00 0.00 1.00,
-    Colour 1.00 1.00 0.60 1.00,
-    Colour 0.69 0.35 0.16 1.00
-  ]
+palette1_ = trimColour . view lcha2colour' <$> palette1LCHA_
 
--- |
+-- | Select a Colour from the palette with a specified opacity
 --
+-- >>> palette1a 0 0.5
+-- Colour 0.02 0.73 0.80 0.50
+palette1a :: Int -> Double -> Colour
+palette1a x a = set opac' a $ cycle palette1_ List.!! x
+
+-- | black
+--
 -- >>> black
 -- Colour 0.00 0.00 0.00 1.00
 black :: Colour
 black = Colour 0 0 0 1
 
--- |
+-- | white
 --
 -- >>> white
 -- Colour 0.99 0.99 0.99 1.00
 white :: Colour
 white = Colour 0.99 0.99 0.99 1
 
--- |
+-- | light
 --
 -- For lighter huds against a dark background ...
 --
@@ -213,7 +291,7 @@
 light :: Colour
 light = Colour 0.94 0.94 0.94 1
 
--- |
+-- | dark
 --
 -- dark is hardcoded in most of the default options.
 --
@@ -222,9 +300,409 @@
 dark :: Colour
 dark = Colour 0.05 0.05 0.05 1
 
--- | zero opacity black
+-- | Grey(scale) colour inputting lightness and opacity.
 --
+-- >>> grey 0.5 0.4
+-- Colour 0.50 0.50 0.50 0.40
+grey :: Double -> Double -> Colour
+grey g a = Colour g g g a
+
+-- | Zero-opacity black
+--
 -- >>> transparent
 -- Colour 0.00 0.00 0.00 0.00
 transparent :: Colour
 transparent = Colour 0 0 0 0
+
+-- | LCH colour representation
+--
+-- oklab is a colour space being written into CSS specifications, that attempts to be ok at human-consistent colour representation. See:
+--
+-- - <https://bottosson.github.io/posts/oklab/ A perceptual color space for image processing>
+-- - <https://www.w3.org/TR/css-color-5/#colorcontrast CSS Color Module Level 5>
+-- - <https://www.w3.org/TR/css-color-4/#rgb-functions CSS Color Module Level 4>
+--
+-- The type is represented by three elements:
+--
+-- L: Lightness ranging from 0 (@LCH 0 _ _@ is black) to 1 (@LCH 1 _ _@ is white)
+--
+-- C: Chromacity, which ranges from 0 to around 0.32 or so.
+--
+-- H: Hue, which ranges from 0 to 360
+newtype LCH a = LCH' {lchArray :: Array '[3] a} deriving (Eq, Show, IsList, Functor)
+
+-- | LCH colour pattern
+pattern LCH :: a -> a -> a -> LCH a
+pattern LCH l c h <-
+  LCH' [l, c, h]
+  where
+    LCH l c h = LCH' [l, c, h]
+
+{-# COMPLETE LCH #-}
+
+-- | Lightness lens for LCH
+lLCH' :: Lens' (LCH Double) Double
+lLCH' = lens (\(LCH l _ _) -> l) (\(LCH _ c h) l -> LCH l c h)
+
+-- | Chromacity lens for LCH
+cLCH' :: Lens' (LCH Double) Double
+cLCH' = lens (\(LCH _ c _) -> c) (\(LCH l _ h) c -> LCH l c h)
+
+-- | Hue lens for LCH
+hLCH' :: Lens' (LCH Double) Double
+hLCH' = lens (\(LCH _ _ h) -> h) (\(LCH l c _) h -> LCH l c h)
+
+-- | LCHA representation, including an alpha channel.
+data LCHA = LCHA' {_lch :: LCH Double, _alpha :: Double} deriving (Eq, Show)
+
+-- | LCH lens for LCHA
+lch' :: Lens' LCHA (LCH Double)
+lch' = lens (\(LCHA' lch _) -> lch) (\(LCHA' _ a) lch -> LCHA' lch a)
+
+-- | Alpha lens for LCHA
+alpha' :: Lens' LCHA Double
+alpha' = lens (\(LCHA' _ a) -> a) (\(LCHA' lch _) a -> LCHA' lch a)
+
+-- | LCHA pattern
+pattern LCHA :: Double -> Double -> Double -> Double -> LCHA
+pattern LCHA l c h a <-
+  LCHA' (LCH' [l, c, h]) a
+  where
+    LCHA l c h a = LCHA' (LCH' [l, c, h]) a
+
+{-# COMPLETE LCHA #-}
+
+-- * RGB colour representation
+
+-- | A type to represent the RGB triple, useful as an intermediary between 'Colour' and 'LCHA'
+newtype RGB3 a = RGB3' {rgb3Array :: Array '[3] a} deriving (Eq, Show, IsList, Functor)
+
+-- | The RGB3 pattern
+pattern RGB3 :: a -> a -> a -> RGB3 a
+pattern RGB3 r g b <-
+  RGB3' [r, g, b]
+  where
+    RGB3 r g b = RGB3' [r, g, b]
+
+{-# COMPLETE RGB3 #-}
+
+-- | Lens for conversion between Double and Word8 RGB triples.
+rgbd' :: Iso' (RGB3 Double) (RGB3 Word8)
+rgbd' = iso (fmap (floor . (* 256))) (fmap (\x -> fromIntegral x / 256.0))
+
+-- | Lens for conversion between an (RGB3, alpha) pair and Colour
+rgb32colour' :: Iso' (RGB3 Double, Double) Colour
+rgb32colour' = iso (\(RGB3 r g b, a) -> Colour r g b a) (\(Colour r g b a) -> (RGB3 r g b, a))
+
+-- * LAB colour representation
+
+-- | LAB colour representation. a is green-red and b is blue-yellow
+newtype LAB a = LAB' {labArray :: Array '[3] a} deriving (Eq, Show, IsList, Functor)
+
+-- | LAB pattern
+pattern LAB :: a -> a -> a -> LAB a
+pattern LAB l a b <-
+  LAB' [l, a, b]
+  where
+    LAB l a b = LAB' [l, a, b]
+
+{-# COMPLETE LAB #-}
+
+-- * Colour conversions
+
+-- * lcha to colour
+
+-- | LCHA to Colour lens
+--
+-- >>> c0 = Colour 0.78 0.36 0.02 1.00
+-- >>> view (re lcha2colour') c0
+-- LCHA' {_lch = LCH' {lchArray = [0.5969891006896103, 0.15793931531669247, 49.191113810479784]}, _alpha = 1.0}
+--
+-- >>> view (re lcha2colour' % lcha2colour') c0
+-- Colour 0.78 0.36 0.02 1.00
+--
+-- >>> c1 = Colour 0.49 0.14 0.16 1
+-- >>> view (re lcha2colour') c1
+-- LCHA' {_lch = LCH' {lchArray = [0.40115567099848914, 0.12279066817938503, 21.51476756026837]}, _alpha = 1.0}
+--
+-- >>> view (re lcha2colour' % lcha2colour') c1
+-- Colour 0.49 0.14 0.16 1.00
+lcha2colour' :: Iso' LCHA Colour
+lcha2colour' =
+  iso
+    (\(LCHA' lch a) -> let (RGB3 r g b) = view (re lab2lch' % re rgb2lab') lch in Colour r g b a)
+    (\c@(Colour _ _ _ a) -> LCHA' (view (re rgb32colour' % _1 % rgb2lab' % lab2lch') c) a)
+
+-- * lab to lch
+
+-- | Lens between generic XY color representations and CH ones, which are polar version of the XY.
+xy2ch' :: Iso' (Double, Double) (Double, Double)
+xy2ch' =
+  iso
+    (\(x, y) -> (norm (Point x y), 180 / pi * mod_ (angle (Point x y)) (2 * pi)))
+    (\(c, h) -> let (Point x y) = coord (Polar c (pi / 180 * h)) in (x, y))
+
+mod_ :: Double -> Double -> Double
+mod_ x d = x - fromIntegral (floor (x / d) :: Integer) * d
+
+-- | Lens between LAB and LCH
+lab2lch' :: Iso' (LAB Double) (LCH Double)
+lab2lch' =
+  iso
+    (\(LAB l a b) -> let (c, h) = view xy2ch' (a, b) in LCH l c h)
+    (\(LCH l c h) -> let (a, b) = view (re xy2ch') (c, h) in LAB l a b)
+
+-- * rgb to lab
+
+-- | Lens between RGB3 and LAB
+rgb2lab' :: Iso' (RGB3 Double) (LAB Double)
+rgb2lab' =
+  iso
+    (\(RGB3' a) -> LAB' . xyz2lab_ . rgb2xyz_ $ a)
+    (\(LAB' a) -> RGB3' . xyz2rgb_ . lab2xyz_ $ a)
+
+-- * rgb to xyz
+
+xyz2rgb_ :: Array '[3] Double -> Array '[3] Double
+xyz2rgb_ a = fromList [r, g, b]
+  where
+    (S.ColorSRGB r g b) = S.xyz2rgb (S.ColorXYZ (a `index` [0]) (a `index` [1]) (a `index` [2])) :: Color (S.SRGB 'S.NonLinear) Double
+
+-- >>> rgb2xyz_ [1,1,1]
+-- [0.9505, 1.0, 1.089]
+rgb2xyz_ :: Array '[3] Double -> Array '[3] Double
+rgb2xyz_ a = fromList [x, y, z]
+  where
+    (S.ColorXYZ x y z) = S.rgb2xyz (S.ColorSRGB (a `index` [0]) (a `index` [1]) (a `index` [2])) :: Color (S.XYZ S.D65) Double
+
+-- * xyz to lab
+
+m1 :: Array '[3, 3] Double
+m1 =
+  [ 0.8189330101,
+    0.3618667424,
+    -0.1288597137,
+    0.0329845436,
+    0.9293118715,
+    0.0361456387,
+    0.0482003018,
+    0.2643662691,
+    0.6338517070
+  ]
+
+m2 :: Array '[3, 3] Double
+m2 =
+  [ 0.2104542553,
+    0.7936177850,
+    -0.0040720468,
+    1.9779984951,
+    -2.4285922050,
+    0.4505937099,
+    0.0259040371,
+    0.7827717662,
+    -0.8086757660
+  ]
+
+cubicroot :: (Floating a, Ord a) => a -> a
+cubicroot x = bool (-1 * (-x) ** (1 / 3.0)) (x ** (1 / 3.0)) (x >= 0)
+
+-- >>> xyz2lab_ [0.95, 1, 1.089]
+-- [0.9999686754143632, -2.580058168537569e-4, -1.1499756458199784e-4]
+--
+-- >>> xyz2lab_ [1,0,0]
+-- [0.4499315814860224, 1.2357102101076207, -1.9027581087245393e-2]
+--
+-- >>> xyz2lab_ [0,1,0]
+-- [0.921816758286376, -0.6712376131199635, 0.2633235500611929]
+--
+-- >>> xyz2lab_ [1,0,1]
+-- [0.5081033967278659, 1.147837087146462, -0.36768466477695416]
+--
+-- >>> xyz2lab_ [0,0,1]
+-- [0.15260258004008057, -1.4149965510120839, -0.4489272035597538]
+xyz2lab_ :: Array '[3] Double -> Array '[3] Double
+xyz2lab_ xyz =
+  dot sum (*) m2 (cubicroot <$> dot sum (*) m1 xyz)
+
+m1' :: Array '[3, 3] Double
+m1' =
+  [ 1.227013851103521026,
+    -0.5577999806518222383,
+    0.28125614896646780758,
+    -0.040580178423280593977,
+    1.1122568696168301049,
+    -0.071676678665601200577,
+    -0.076381284505706892869,
+    -0.42148197841801273055,
+    1.5861632204407947575
+  ]
+
+m2' :: Array '[3, 3] Double
+m2' =
+  [ 0.99999999845051981432,
+    0.39633779217376785678,
+    0.21580375806075880339,
+    1.0000000088817607767,
+    -0.1055613423236563494,
+    -0.063854174771705903402,
+    1.0000000546724109177,
+    -0.089484182094965759684,
+    -1.2914855378640917399
+  ]
+
+lab2xyz_ :: Array '[3] Double -> Array '[3] Double
+lab2xyz_ lab =
+  dot sum (*) m1' ((** 3.0) <$> dot sum (*) m2' lab)
+
+-- * mixins
+
+-- | Mix 2 colours, using the oklch model.
+--
+-- This may not always be what you expect. One example is mixing black and another colour:
+--
+-- >>> mix 0.8 (Colour 0 0 0 1) (Colour 0.2 0.6 0.8 0.5)
+-- Colour -0.09 0.48 0.45 0.60
+--
+-- The mix has gone out of gamut because we are swishing through hue mixes.
+--
+-- In this case, settting the hue on the black colour within the LCH contruct helps:
+-- >>> betterblack = set (lch' % hLCH') (view hue' (Colour 0.2 0.6 0.8 0.5)) (review lcha2colour' black)
+-- >>> view lcha2colour' $ mixLCHA 0.8 betterblack (review lcha2colour' $ Colour 0.2 0.6 0.8 0.5)
+-- Colour 0.14 0.44 0.59 0.60
+mix :: Double -> Colour -> Colour -> Colour
+mix x c0 c1 = view lcha2colour' (mixLCHA x (review lcha2colour' c0) (review lcha2colour' c1))
+
+-- | Mix 2 colours, using the oklch model, trimming the reult back to in-gamut.
+--
+-- >>> mixTrim 0.8 (Colour 0 0 0 1) (Colour 0.2 0.6 0.8 0.5)
+-- Colour 0.00 0.48 0.45 0.60
+mixTrim :: Double -> Colour -> Colour -> Colour
+mixTrim x c0 c1 = trimColour (mix x c0 c1)
+
+-- | Mix two LCHA specified colours.
+mixLCHA :: Double -> LCHA -> LCHA -> LCHA
+mixLCHA x (LCHA l c h a) (LCHA l' c' h' a') = LCHA l'' c'' h'' a''
+  where
+    l'' = l + x * (l' - l)
+    c'' = c + x * (c' - c)
+    h'' = h + x * (h' - h)
+    a'' = a + x * (a' - a)
+
+-- | Interpolate across a list of Colours, with input being in Range 0 1
+--
+-- >>> mixes 0 [black, (Colour 0.2 0.6 0.8 0.5), white]
+-- Colour 0.00 0.00 0.00 1.00
+--
+-- >>> mixes 1 [black, (Colour 0.2 0.6 0.8 0.5), white]
+-- Colour 0.99 0.99 0.99 1.00
+--
+-- >>> mixes 0.6 [black, (Colour 0.2 0.6 0.8 0.5), white]
+-- Colour 0.42 0.67 0.86 0.60
+mixes :: Double -> [Colour] -> Colour
+mixes _ [] = light
+mixes _ [c] = c
+mixes x cs = mix r (cs List.!! i) (cs List.!! (i + 1))
+  where
+    l = length cs - 1
+    x' = x * fromIntegral l
+    i = max 0 (min (floor x') (l - 1))
+    r = x' - fromIntegral i
+
+-- * Colour manipulation
+
+-- | Convert a colour to grayscale with the same lightness.
+--
+-- >>> greyed (Colour 0.4 0.7 0.8 0.4)
+-- Colour 0.65 0.65 0.65 0.40
+greyed :: Colour -> Colour
+greyed = over chroma' (const 0)
+
+-- | Lightness lens
+--
+-- >>> over lightness' (*0.8) (Colour 0.4 0.7 0.8 0.4)
+-- Colour 0.22 0.52 0.62 0.40
+lightness' :: Lens' Colour Double
+lightness' = re lcha2colour' % lch' % lLCH'
+
+-- | Chromacity lens
+--
+-- >>> over chroma' (*0.8) (Colour 0.4 0.7 0.8 0.4)
+-- Colour 0.46 0.69 0.77 0.40
+chroma' :: Lens' Colour Double
+chroma' = re lcha2colour' % lch' % cLCH'
+
+-- | Hue lens
+--
+-- >>> over hue' (+180) (Colour 0.4 0.7 0.8 0.4)
+-- Colour 0.83 0.58 0.49 0.40
+hue' :: Lens' Colour Double
+hue' = re lcha2colour' % lch' % hLCH'
+
+-- | Html element to display colours
+--
+-- >>> showSwatch "swatch" dark
+-- "<div class=swatch style=\"background:rgba(5%, 5%, 5%, 1.00);\">swatch</div>"
+showSwatch :: Text -> Colour -> Text
+showSwatch label c =
+  [trimming|<div class=swatch style="background:$rgba;">$label</div>|]
+  where
+    rgba = showRGBA c
+
+-- | Show multiple colors with embedded text.
+showSwatches :: Text -> Text -> [(Text, Colour)] -> Text
+showSwatches pref suff hs =
+  [trimming|<div>
+$pref
+$divs
+$suff
+</div>
+|]
+  where
+    divs = Text.intercalate "\n" (uncurry showSwatch <$> hs)
+
+-- * random colors
+
+instance Uniform (RGB3 Double) where
+  uniformM gen = do
+    r <- uniformRM (0, 1) gen
+    g <- uniformRM (0, 1) gen
+    b <- uniformRM (0, 1) gen
+    pure (RGB3 r g b)
+
+instance Uniform Colour where
+  uniformM gen = do
+    r <- uniformRM (0, 1) gen
+    g <- uniformRM (0, 1) gen
+    b <- uniformRM (0, 1) gen
+    a <- uniformRM (0, 1) gen
+    pure (Colour r g b a)
+
+-- | Random variates of a uniform
+rvs :: (Uniform a) => [a]
+rvs = go g0
+  where
+    g0 = mkStdGen 42
+    go g = let (x, g') = uniform g in x : go g'
+
+-- | Random list of RGB3s
+rvRGB3 :: [RGB3 Double]
+rvRGB3 = rvs
+
+-- | Random list of Colours
+rvColour :: [Colour]
+rvColour = rvs
+
+-- | Random Colours with an opacity of 1 that are not too extreme in terms of lightness or chromacity.
+paletteR :: [Colour]
+paletteR = go g0
+  where
+    g0 = mkStdGen 42
+    go g = let (x, g') = runStateGen g rvSensible in x : go g'
+
+-- | A random Colour generator that provides a (hopefully) pleasant colour not too light, dark, over-saturated or dull.
+rvSensible :: StatefulGen g m => g -> m Colour
+rvSensible gen = do
+  l <- uniformRM (0.3, 0.75) gen
+  c <- uniformRM (0.05, 0.24) gen
+  h <- uniformRM (0, 360) gen
+  pure ((trimColour . view lcha2colour') (LCHA l c h 1))
diff --git a/src/Data/FormatN.hs b/src/Data/FormatN.hs
deleted file mode 100644
--- a/src/Data/FormatN.hs
+++ /dev/null
@@ -1,242 +0,0 @@
-{-# LANGUAGE AllowAmbiguousTypes #-}
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE StrictData #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# OPTIONS_GHC -Wall #-}
-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
-{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-}
-{-# OPTIONS_GHC -fno-warn-type-defaults #-}
-
--- | Formatting of numeric values.
-module Data.FormatN
-  ( FormatN (..),
-    defaultFormatN,
-    fromFormatN,
-    toFormatN,
-    fixed,
-    decimal,
-    prec,
-    comma,
-    expt,
-    dollar,
-    percent,
-    formatN,
-    precision,
-    formatNs,
-    showOr,
-    roundSig,
-  )
-where
-
-import Data.Bifunctor
-import Data.Bool
-import Data.Containers.ListUtils (nubOrd)
-import Data.Foldable
-import Data.Generics.Labels ()
-import Data.Scientific
-import Data.String
-import Data.Text (Text, pack)
-import qualified Data.Text as Text
-import GHC.Generics hiding (prec)
-import Prelude
-
--- $setup
-
--- | Number formatting options.
---
--- >>> defaultFormatN
--- FormatComma (Just 2)
-data FormatN
-  = FormatFixed (Maybe Int)
-  | FormatDecimal (Maybe Int)
-  | FormatComma (Maybe Int)
-  | FormatExpt (Maybe Int)
-  | FormatPrec (Maybe Int)
-  | FormatDollar (Maybe Int)
-  | FormatPercent (Maybe Int)
-  | FormatNone
-  deriving (Eq, Show, Generic)
-
--- | The official format
-defaultFormatN :: FormatN
-defaultFormatN = FormatComma (Just 2)
-
--- | textifier
-fromFormatN :: (IsString s) => FormatN -> s
-fromFormatN (FormatFixed _) = "Fixed"
-fromFormatN (FormatDecimal _) = "Decimal"
-fromFormatN (FormatComma _) = "Comma"
-fromFormatN (FormatExpt _) = "Expt"
-fromFormatN (FormatPrec _) = "Prec"
-fromFormatN (FormatDollar _) = "Dollar"
-fromFormatN (FormatPercent _) = "Percent"
-fromFormatN FormatNone = "None"
-
--- | readifier
-toFormatN :: (Eq s, IsString s) => s -> Maybe Int -> FormatN
-toFormatN "Fixed" n = FormatFixed n
-toFormatN "Decimal" n = FormatDecimal n
-toFormatN "Comma" n = FormatComma n
-toFormatN "Expt" n = FormatExpt n
-toFormatN "Prec" n = FormatPrec n
-toFormatN "Dollar" n = FormatDollar n
-toFormatN "Percent" n = FormatPercent n
-toFormatN "None" _ = FormatNone
-toFormatN _ _ = FormatNone
-
--- | to x decimal places
---
--- >>> fixed (Just 2) 1
--- "1.00"
---
--- >>> fixed (Just 2) 0.001
--- "0.00"
-fixed :: Maybe Int -> Double -> Text
-fixed x n = pack $ formatScientific Fixed x (fromFloatDigits n)
-
--- | scientific exponential
---
--- >>> expt (Just 2) 1234
--- "1.23e3"
-expt :: Maybe Int -> Double -> Text
-expt x n = pack $ formatScientific Exponent x (fromFloatDigits n)
-
--- | round to n significant figures
---
--- >>> roundSig 2 1234
--- 1230.0
---
--- >>> roundSig 2 0.001234
--- 1.23e-3
-roundSig :: Int -> Double -> Scientific
-roundSig n x = scientific r' (e - length ds0)
-  where
-    (ds, e) = toDecimalDigits $ fromFloatDigits x
-    (ds0, ds1) = splitAt (n + 1) ds
-    r =
-      (fromIntegral $ foldl' (\x a -> x * 10 + a) 0 ds0 :: Double)
-        + fromIntegral (foldl' (\x a -> x * 10 + a) 0 ds1) / (10.0 ^ length ds1)
-    r' = round r :: Integer
-
--- | format numbers between 0.001 and 1,000,000 using digit and comma notation and exponential outside this range, with x significant figures.
--- > prec (Just 1) 0.00234
--- "0.0023"
---
--- > prec (Just 1) 0.000023
--- "2.3e-5"
---
--- > prec (Just 1) 123
--- "120"
---
--- > prec (Just 1) 123456
--- "120,000"
---
--- >>> prec (Just 1) 1234567
--- "1.2e6"
-prec :: Maybe Int -> Double -> Text
-prec n x
-  | x < 0 = "-" <> prec n (-x)
-  | x == 0 = decimal n (toRealFloat x')
-  | x < 0.001 = expt n x
-  | x > 1e6 = expt n x
-  | otherwise = decimal n (toRealFloat x')
-  where
-    x' = maybe fromFloatDigits roundSig n x
-
--- | round to n significant figures and always use decimal notation
--- >>> decimal (Just 2) 0.000001234
--- "0.00000123"
---
--- >>> decimal (Just 2) 1234567
--- "1230000"
-decimal :: Maybe Int -> Double -> Text
-decimal n x = x''
-  where
-    x' = pack $ formatScientific Fixed Nothing $ maybe fromFloatDigits roundSig n x
-    x'' = (\x -> bool x' (fst x) (snd x == ".0")) $ Text.breakOn "." x'
-
--- | add commas format for numbers above 1,000 but below 1 million, otherwise use prec.
---
--- >>> comma Nothing 1234.567
--- "1,234.567"
---
--- >>> comma (Just 2) 1234
--- "1,230"
-comma :: Maybe Int -> Double -> Text
-comma n x
-  | x < 0 = "-" <> comma n (-x)
-  | x < 1000 || x > 1e6 = prec n x
-  | otherwise = case n of
-    Nothing -> addcomma (pack $ show x)
-    Just _ -> addcomma (prec n x)
-  where
-    addcomma :: Text -> Text
-    addcomma x = uncurry (<>) . first (Text.reverse . Text.intercalate "," . Text.chunksOf 3 . Text.reverse) $ Text.breakOn "." x
-
--- | dollars and cents, always decimal notation
---
--- >>> dollar (Just 2) 1234
--- "$1,230"
---
--- >>> dollar (Just 2) 0.01234
--- "$0.0123"
-dollar :: Maybe Int -> Double -> Text
-dollar n x
-  | x < 0 = "-" <> dollar n (-x)
-  | otherwise = "$" <> comma n x
-
--- | fixed percent, always decimal notation
---
--- >>> percent (Just 2) 0.001234
--- "0.123%"
-percent :: Maybe Int -> Double -> Text
-percent n x = (<> "%") $ decimal n (100 * x)
-
--- | make text
-formatN :: FormatN -> Double -> Text
-formatN (FormatFixed n) x = fixed n x
-formatN (FormatDecimal n) x = decimal n x
-formatN (FormatPrec n) x = prec n x
-formatN (FormatComma n) x = comma n x
-formatN (FormatExpt n) x = expt n x
-formatN (FormatDollar n) x = dollar n x
-formatN (FormatPercent n) x = percent n x
-formatN FormatNone x = pack (show x)
-
--- | Provide formatted text for a list of numbers so that they are just distinguished.  'precision commas (Just 2) ticks' means use as much precision as is needed for them to be distinguished, but with at least 2 significant figures.
-precision :: (Maybe Int -> Double -> Text) -> Maybe Int -> [Double] -> [Text]
-precision f Nothing xs = f Nothing <$> xs
-precision f (Just n0) xs =
-  precLoop f n0 xs
-  where
-    precLoop f' n xs' =
-      let s = f' (Just n) <$> xs'
-       in if s == nubOrd s || n > 4
-            then s
-            else precLoop f' (n + 1) xs'
-
--- | Consistently format a list of doubles.
-formatNs :: FormatN -> [Double] -> [Text]
-formatNs (FormatFixed n) xs = precision fixed n xs
-formatNs (FormatDecimal n) xs = precision decimal n xs
-formatNs (FormatPrec n) xs = precision prec n xs
-formatNs (FormatComma n) xs = precision comma n xs
-formatNs (FormatExpt n) xs = precision expt n xs
-formatNs (FormatDollar n) xs = precision dollar n xs
-formatNs (FormatPercent n) xs = precision percent n xs
-formatNs FormatNone xs = pack . show <$> xs
-
--- | Format with the shorter of show and formatN.
-showOr :: FormatN -> Double -> Text
-showOr f x = bool (bool f' (pack s') (Text.length (pack s') < Text.length f')) "0" (x < 1e-6 && x > -1e-6)
-  where
-    f' = formatN f x
-    s' = show x
diff --git a/src/Data/Path.hs b/src/Data/Path.hs
--- a/src/Data/Path.hs
+++ b/src/Data/Path.hs
@@ -1,25 +1,24 @@
-{-# LANGUAGE AllowAmbiguousTypes #-}
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE NegativeLiterals #-}
-{-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE RebindableSyntax #-}
-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
-{-# OPTIONS_GHC -fno-warn-type-defaults #-}
+{-# OPTIONS_GHC -Wno-incomplete-patterns #-}
 
 -- | SVG path manipulation
 module Data.Path
-  ( -- * Path fundamental
+  ( -- * Svg Paths
     -- $path
-    PathInfo (..),
+    PathData (..),
+    pointPath,
+    movePath,
+    scalePath,
+    projectPaths,
+    pathBoxes,
+    pathBox,
+
+    -- * Path maths
     ArcInfo (..),
     ArcPosition (..),
-    parsePath,
-    toPathAbsolute,
-    toPathCommand,
-    toPathAbsolutes,
-    toPathXYs,
     ArcCentroid (..),
     arcCentroid,
     arcPosition,
@@ -44,42 +43,25 @@
     singletonQuad,
     singletonArc,
     singletonPie,
-    singletonPie',
-    toSingletonArc,
-    pathBoxes,
-    pathBox,
   )
 where
 
+import Chart.Data
 import qualified Control.Foldl as L
-import Control.Lens hiding ((...))
-import qualified Data.Attoparsec.Text as A
-import Data.Bifunctor
-import Data.Either
-import Data.FormatN
-import Data.Generics.Labels ()
-import Data.Text (Text, pack)
-import qualified Data.Text as Text
+import Control.Monad.State.Lazy
 import GHC.Generics
-import GHC.OverloadedLabels
 import qualified Geom2D.CubicBezier as B
-import Graphics.SvgTree (Origin (..), PathCommand (..))
-import qualified Graphics.SvgTree as SvgTree
-import Graphics.SvgTree.PathParser
-import qualified Linear
 import NumHask.Prelude
-import NumHask.Space
 
 -- $setup
--- FIXME:
--- :set -XRebindableSyntax gets timed out by cabal-docspec here, but NoImplicitPrelude works.
--- >>> :set -XNoImplicitPrelude
--- >>> :set -XNegativeLiterals
+--
+-- >>> :set -XOverloadedLabels
+-- >>> :set -XOverloadedStrings
 -- >>> import Chart
--- >>> import NumHask.Prelude
+-- >>> import Optics.Core
 
 -- $path
--- Every element of an svg path can be thought of as exactly two points in space, with instructions of how to draw a curve between them.  From this point of view, one which this library adopts, a path chart is thus very similar to a line chart.  There's just a lot more information about the style of this line to deal with.
+-- Every element of an SVG path can be thought of as exactly two points in space, with instructions of how to draw a curve between them.  From this point of view, one which this library adopts, a path chart is thus very similar to a line chart.  There's just a lot more information about the style to deal with.
 --
 -- References:
 --
@@ -87,284 +69,87 @@
 --
 -- [SVG path](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths)
 
--- | parse a raw path string
---
--- >>> let outerseg1 = "M-1.0,0.5 A0.5 0.5 0.0 1 1 0.0,-1.2320508075688774 1.0 1.0 0.0 0 0 -0.5,-0.3660254037844387 1.0 1.0 0.0 0 0 -1.0,0.5 Z"
--- >>> parsePath outerseg1
--- [MoveTo OriginAbsolute [V2 (-1.0) 0.5],EllipticalArc OriginAbsolute [(0.5,0.5,0.0,True,True,V2 0.0 (-1.2320508075688774)),(1.0,1.0,0.0,False,False,V2 (-0.5) (-0.3660254037844387)),(1.0,1.0,0.0,False,False,V2 (-1.0) 0.5)],EndPath]
---
--- https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d
-parsePath :: Text -> [PathCommand]
-parsePath t = fromRight [] $ A.parseOnly pathParser t
-
--- | To fit in with the requirements of the library design, specifically the separation of what a chart is into XY data Points from representation of these points, path instructions need to be decontructed into:
---
--- - define a single chart element as a line.
---
--- - split a single path element into the start and end points of the line, which become the 'Chart.Types.xys' of a 'Chart.Types.Chart', and the rest of the information, which is called 'PathInfo' and incorporated into the 'Chart.Types.Chart' 'Chart.Types.annotation'.
---
--- An arc path is variant to affine transformations of the 'Chart.Types.xys' points: angles are not presevred in the new reference frame.
-data PathInfo a
-  = StartI
-  | LineI
-  | CubicI (Point a) (Point a)
-  | QuadI (Point a)
-  | ArcI (ArcInfo a)
+-- | Representation of a single SVG path data point
+data PathData a
+  = -- | Starting position
+    StartP (Point a)
+  | -- | line (from previous position)
+    LineP (Point a)
+  | -- | cubic bezier curve
+    CubicP (Point a) (Point a) (Point a)
+  | -- | quad bezier curve
+    QuadP (Point a) (Point a)
+  | -- arc
+    ArcP (ArcInfo a) (Point a)
   deriving (Show, Eq, Generic)
 
--- | convert from a path info, start point, end point triple to a path text clause.
---
--- Note that morally,
---
--- > toPathsAbsolute . toInfos . parsePath == id
---
--- but the round trip destroys much information, including:
---
--- - path text spacing
---
--- - "Z", which is replaced by a LineI instruction from the end point back to the original start of the path.
---
--- - Sequences of the same instruction type are uncompressed
---
--- - As the name suggests, relative paths are translated to absolute ones.
---
--- - implicit L's in multiple M instructions are separated.
---
--- In converting between chart-svg and SVG there are two changes in reference:
---
--- - arc rotation is expressed as positive degrees for a clockwise rotation in SVG, and counter-clockwise in radians for chart-svg
---
--- - A positive y-direction is down for SVG and up for chart-svg
-toPathAbsolute ::
-  -- | (info, start, end)
-  (PathInfo Double, Point Double) ->
-  -- | path text
-  Text
-toPathAbsolute (StartI, p) = "M " <> pp p
-toPathAbsolute (LineI, p) = "L " <> pp p
-toPathAbsolute (CubicI c1 c2, next) =
-  "C "
-    <> pp c1
-    <> " "
-    <> pp c2
-    <> " "
-    <> pp next
-toPathAbsolute (QuadI control, next) =
-  "Q "
-    <> pp control
-    <> " "
-    <> pp next
-toPathAbsolute (ArcI (ArcInfo (Point x y) phi' l sw), x2) =
-  "A "
-    <> (pack . show) x
-    <> " "
-    <> (pack . show) y
-    <> " "
-    <> (pack . show) (-phi' * 180 / pi)
-    <> " "
-    <> bool "0" "1" l
-    <> " "
-    <> bool "0" "1" sw
-    <> " "
-    <> pp x2
-
--- | render a point (including a flip of the y dimension).
-pp :: Point Double -> Text
-pp (Point x y) =
-  showOr (FormatFixed (Just 4)) x <> ","
-    <> showOr (FormatFixed (Just 4)) (bool (-y) y (y == zero))
-
--- | convert an (info, point) list to an svg d path text.
-toPathAbsolutes :: [(PathInfo Double, Point Double)] -> Text
-toPathAbsolutes = L.fold (L.Fold step begin done)
-  where
-    done = Text.intercalate " " . reverse
-    begin = []
-    step ts (info, next) = toPathAbsolute (info, next) : ts
-
--- | Convert from PathInfo to PathCommand
-toPathCommand ::
-  (PathInfo Double, Point Double) ->
-  -- | path text
-  PathCommand
-toPathCommand (StartI, p) = MoveTo OriginAbsolute [toV2 p]
-toPathCommand (LineI, p) = LineTo OriginAbsolute [toV2 p]
-toPathCommand (CubicI c1 c2, p) = CurveTo OriginAbsolute [(toV2 c1, toV2 c2, toV2 p)]
-toPathCommand (QuadI c, p) = QuadraticBezier OriginAbsolute [(toV2 c, toV2 p)]
-toPathCommand (ArcI (ArcInfo (Point rx ry) phi' l sw), p) =
-  EllipticalArc OriginAbsolute [(rx, ry, phi', l, sw, toV2 p)]
-
-toV2 :: Point a -> Linear.V2 a
-toV2 (Point x y) = Linear.V2 x y
+-- | View the Point part of a PathData
+pointPath :: PathData a -> Point a
+pointPath (StartP p) = p
+pointPath (LineP p) = p
+pointPath (CubicP _ _ p) = p
+pointPath (QuadP _ p) = p
+pointPath (ArcP _ p) = p
 
-data StateInfo = StateInfo
-  { -- | previous position
-    cur :: Point Double,
-    -- | start point (to close out the path)
-    start :: Point Double,
-    -- | last control point
-    infoControl :: Point Double
-  }
-  deriving (Eq, Show, Generic)
+-- | Move the Point part of a PathData
+movePath :: (Additive a) => Point a -> PathData a -> PathData a
+movePath x (StartP p) = StartP (p + x)
+movePath x (LineP p) = LineP (p + x)
+movePath x (CubicP c1 c2 p) = CubicP (c1 + x) (c2 + x) (p + x)
+movePath x (QuadP c p) = QuadP (c + x) (p + x)
+movePath x (ArcP i p) = ArcP i (p + x)
 
-stateInfo0 :: StateInfo
-stateInfo0 = StateInfo zero zero zero
+-- | Multiplicatively scale a PathData
+scalePath :: (Multiplicative a) => a -> PathData a -> PathData a
+scalePath x (StartP p) = StartP (fmap (x *) p)
+scalePath x (LineP p) = LineP (fmap (x *) p)
+scalePath x (CubicP c1 c2 p) = CubicP (fmap (x *) c1) (fmap (x *) c2) (fmap (x *) p)
+scalePath x (QuadP c p) = QuadP (fmap (x *) c) (fmap (x *) p)
+scalePath x (ArcP i p) = ArcP i (fmap (x *) p)
 
--- | Convert a path command fragment to an instruction + point.
---
--- flips the y-dimension of points.
-toInfo :: StateInfo -> SvgTree.PathCommand -> (StateInfo, [(PathInfo Double, Point Double)])
-toInfo s (MoveTo _ []) = (s, [])
-toInfo _ (MoveTo OriginAbsolute (x : xs)) = L.fold (L.Fold step begin (second reverse)) (fromV2 <$> xs)
-  where
-    x0 = fromV2 x
-    begin = (StateInfo x0 x0 zero, [(StartI, x0)])
-    step (s, p) a = (s & #cur .~ a, (LineI, a) : p)
-toInfo s (MoveTo OriginRelative (x : xs)) = L.fold (L.Fold step begin (second reverse)) (fromV2 <$> xs)
-  where
-    x0 = s ^. #cur + fromV2 x
-    begin = (StateInfo x0 x0 zero, [(StartI, x0)])
-    step (s, p) a = let a' = a + s ^. #cur in (s & #cur .~ a', (LineI, a') : p)
-toInfo s EndPath = (s, [(LineI, s ^. #start)])
-toInfo s (LineTo OriginAbsolute xs) = L.fold (L.Fold step (s, []) (second reverse)) (fromV2 <$> xs)
-  where
-    step (s, p) a = (s & #cur .~ a, (LineI, a) : p)
-toInfo s (LineTo OriginRelative xs) = L.fold (L.Fold step (s, []) (second reverse)) (fromV2 <$> xs)
-  where
-    step (s, p) a = let a' = a + s ^. #cur in (s & #cur .~ a', (LineI, a') : p)
-toInfo s (HorizontalTo OriginAbsolute xs) = L.fold (L.Fold step (s, []) (second reverse)) xs
-  where
-    step (s@(StateInfo (Point _ cy) _ _), p) a =
-      let a' = Point a cy in (s & #cur .~ a', (LineI, a') : p)
-toInfo s (HorizontalTo OriginRelative xs) = L.fold (L.Fold step (s, []) (second reverse)) xs
-  where
-    step (s@(StateInfo (Point cx cy) _ _), p) a =
-      let a' = Point (a + cx) cy in (s & #cur .~ a', (LineI, a') : p)
-toInfo s (VerticalTo OriginAbsolute xs) = L.fold (L.Fold step (s, []) (second reverse)) xs
-  where
-    step (s@(StateInfo (Point cx _) _ _), p) a =
-      let a' = Point cx a in (s & #cur .~ a', (LineI, a') : p)
-toInfo s (VerticalTo OriginRelative xs) = L.fold (L.Fold step (s, []) (second reverse)) xs
-  where
-    step (s@(StateInfo (Point cx cy) _ _), p) a =
-      let a' = Point cx (a + cy) in (s & #cur .~ a', (LineI, a') : p)
-toInfo s (CurveTo OriginAbsolute xs) =
-  L.fold (L.Fold step (s, []) (second reverse)) xs'
-  where
-    xs' = (\(c1, c2, x2) -> (fromV2 c1, fromV2 c2, fromV2 x2)) <$> xs
-    step (s, p) (c1, c2, x2) =
-      (s & #cur .~ x2 & #infoControl .~ c2, (CubicI c1 c2, x2) : p)
-toInfo s (CurveTo OriginRelative xs) =
-  L.fold (L.Fold step (s, []) (second reverse)) xs'
-  where
-    xs' = (\(c1, c2, x2) -> (fromV2 c1, fromV2 c2, fromV2 x2)) <$> xs
-    step (s, p) (c1, c2, x2) =
-      (s & #cur .~ (x2 + s ^. #cur) & #infoControl .~ (c2 + s ^. #cur), (CubicI (c1 + s ^. #cur) (c2 + s ^. #cur), x2 + s ^. #cur) : p)
-toInfo s (SmoothCurveTo OriginAbsolute xs) =
-  L.fold (L.Fold step (s, []) (second reverse)) xs'
-  where
-    xs' = bimap fromV2 fromV2 <$> xs
-    step (s, p) (c2, x2) =
-      (s & #cur .~ x2, (CubicI (s ^. #cur - (s ^. #infoControl - s ^. #cur)) c2, x2) : p)
-toInfo s (SmoothCurveTo OriginRelative xs) =
-  L.fold (L.Fold step (s, []) (second reverse)) xs'
-  where
-    xs' = bimap fromV2 fromV2 <$> xs
-    step (s, p) (c2, x2) =
-      ( s
-          & #cur .~ (x2 + s ^. #cur)
-          & #infoControl .~ (c2 + s ^. #cur),
-        (CubicI (s ^. #cur - (s ^. #infoControl - s ^. #cur)) (c2 + s ^. #cur), x2 + s ^. #cur) : p
-      )
-toInfo s (QuadraticBezier OriginAbsolute xs) =
-  L.fold (L.Fold step (s, []) (second reverse)) xs'
-  where
-    xs' = bimap fromV2 fromV2 <$> xs
-    step (s, p) (c1, x2) =
-      ( s
-          & #cur .~ x2
-          & #infoControl .~ c1,
-        (QuadI c1, x2) : p
-      )
-toInfo s (QuadraticBezier OriginRelative xs) =
-  L.fold (L.Fold step (s, []) (second reverse)) xs'
-  where
-    xs' = bimap fromV2 fromV2 <$> xs
-    step (s, p) (c1, x2) =
-      (s & #cur .~ x2 & #infoControl .~ (c1 + s ^. #cur), (QuadI (c1 + s ^. #cur), x2 + s ^. #cur) : p)
-toInfo s (SmoothQuadraticBezierCurveTo OriginAbsolute xs) =
-  L.fold (L.Fold step (s, []) (second reverse)) xs'
-  where
-    xs' = fromV2 <$> xs
-    step (s, p) x2 =
-      ( s
-          & #cur .~ x2
-          & #infoControl .~ (s ^. #cur - (s ^. #infoControl - s ^. #cur)),
-        (QuadI (s ^. #cur - (s ^. #infoControl - s ^. #cur)), x2) : p
-      )
-toInfo s (SmoothQuadraticBezierCurveTo OriginRelative xs) =
-  L.fold (L.Fold step (s, []) (second reverse)) xs'
-  where
-    xs' = fromV2 <$> xs
-    step (s, p) x2 =
-      ( s
-          & #cur .~ (x2 + s ^. #cur)
-          & #infoControl .~ (s ^. #cur - (s ^. #infoControl - s ^. #cur)),
-        (QuadI (s ^. #cur - (s ^. #infoControl - s ^. #cur)), x2 + s ^. #cur) : p
+-- | Project a list of connected PathDatas from one Rect (XY plave) to a new one.
+projectPaths :: Rect Double -> Rect Double -> [PathData Double] -> [PathData Double]
+projectPaths new old ps =
+  flip evalState zero $
+    sequence $
+      ( \p -> do
+          x <- get
+          let d = projectPath new old x p
+          put (pointPath d)
+          pure d
       )
-toInfo s (EllipticalArc OriginAbsolute xs) =
-  L.fold (L.Fold step (s, []) (second reverse)) xs'
-  where
-    xs' = (\(x, y, r, l, sw, x2) -> (x, y, r, l, sw, fromV2 x2)) <$> xs
-    step (s, p) a@(_, _, _, _, _, x2) =
-      (s & #cur .~ x2, (fromPathEllipticalArc (s ^. #cur) a, x2) : p)
-toInfo s (EllipticalArc OriginRelative xs) =
-  L.fold (L.Fold step (s, []) (second reverse)) xs'
-  where
-    xs' = (\(x, y, r, l, sw, x2) -> (x, y, r, l, sw, fromV2 x2)) <$> xs
-    step (s, p) a@(_, _, _, _, _, x2) =
-      let x2' = x2 + s ^. #cur
-       in (s & #cur .~ x2', (fromPathEllipticalArc (s ^. #cur) a, x2') : p)
-
-fromPathEllipticalArc :: Point a -> (a, a, a, Bool, Bool, Point a) -> PathInfo a
-fromPathEllipticalArc _ (x, y, r, l, s, _) = ArcI (ArcInfo (Point x y) r l s)
-
-fromV2 :: (Subtractive a) => Linear.V2 a -> Point a
-fromV2 (Linear.V2 x y) = Point x (-y)
-
--- | Convert from a path command list to a PathA specification
-toPathXYs :: [SvgTree.PathCommand] -> [(PathInfo Double, Point Double)]
-toPathXYs [] = []
-toPathXYs xs =
-  snd (foldl' (\(x, l) a -> second (l <>) $ toInfo x a) (stateInfo0, []) xs)
-
--- | convert cubic position to path info.
-singletonCubic :: CubicPosition Double -> [(PathInfo Double, Point Double)]
-singletonCubic (CubicPosition s e c1 c2) = [(StartI, s), (CubicI c1 c2, e)]
+        <$> ps
 
--- | convert quad position to path info.
-singletonQuad :: QuadPosition Double -> [(PathInfo Double, Point Double)]
-singletonQuad (QuadPosition s e c) = [(StartI, s), (QuadI c, e)]
+-- | Project a PathData from one Rect (XY plave) to a new one.
+projectPath ::
+  Rect Double ->
+  Rect Double ->
+  Point Double ->
+  PathData Double ->
+  PathData Double
+projectPath new old _ (CubicP c1 c2 p) =
+  CubicP (projectOnP new old c1) (projectOnP new old c2) (projectOnP new old p)
+projectPath new old _ (QuadP c p) =
+  QuadP (projectOnP new old c) (projectOnP new old p)
+projectPath new old p1 (ArcP ai p2) = ArcP (projectArcPosition new old (ArcPosition p1 p2 ai)) (projectOnP new old p2)
+projectPath new old _ (LineP p) = LineP (projectOnP new old p)
+projectPath new old _ (StartP p) = StartP (projectOnP new old p)
 
--- | convert arc position to path info.
-singletonArc :: ArcPosition Double -> [(PathInfo Double, Point Double)]
-singletonArc (ArcPosition s e i) = [(StartI, s), (ArcI i, e)]
+-- | Convert cubic position to path data.
+singletonCubic :: CubicPosition Double -> [PathData Double]
+singletonCubic (CubicPosition s e c1 c2) = [StartP s, CubicP c1 c2 e]
 
--- | convert arc position to a pie slice.
-singletonPie :: ArcPosition Double -> [(PathInfo Double, Point Double)]
-singletonPie p@(ArcPosition s e i) = [(StartI, c), (LineI, s), (ArcI i, e), (LineI, c)]
-  where
-    ac = arcCentroid p
-    c = ac ^. #centroid
+-- | Convert quad position to path data.
+singletonQuad :: QuadPosition Double -> [PathData Double]
+singletonQuad (QuadPosition s e c) = [StartP s, QuadP c e]
 
--- | convert arc position to a pie slice, with a specific center.
-singletonPie' :: Point Double -> ArcPosition Double -> [(PathInfo Double, Point Double)]
-singletonPie' c (ArcPosition s e i) = [(StartI, c), (LineI, s), (ArcI i, e), (LineI, c)]
+-- | Convert arc position to path data.
+singletonArc :: ArcPosition Double -> [PathData Double]
+singletonArc (ArcPosition s e i) = [StartP s, ArcP i e]
 
--- | convert path info to an ArcPosition.
-toSingletonArc :: [(PathInfo Double, Point Double)] -> Maybe (ArcPosition Double)
-toSingletonArc ((StartI, s) : (ArcI i, e) : _) = Just $ ArcPosition s e i
-toSingletonArc _ = Nothing
+-- | Convert arc position to a pie slice, with a specific center.
+singletonPie :: Point Double -> ArcPosition Double -> [PathData Double]
+singletonPie c (ArcPosition s e i) = [StartP c, LineP s, ArcP i e, LineP c]
 
 -- * Arc types
 
@@ -412,32 +197,32 @@
 -- >>> let p = ArcPosition (Point 0 0) (Point 1 0) (ArcInfo (Point 1 0.5) (pi/4) False True)
 -- >>> arcCentroid p
 -- ArcCentroid {centroid = Point 0.20952624903444356 -0.48412291827592724, radius = Point 1.0 0.5, cphi = 0.7853981633974483, ang0 = 1.3753858999692936, angdiff = -1.823476581936975}
-arcCentroid :: (FromInteger a, Ord a, TrigField a, ExpField a) => ArcPosition a -> ArcCentroid a
-arcCentroid (ArcPosition p1@(Point x1 y1) p2@(Point x2 y2) (ArcInfo rad phi large clockwise)) = ArcCentroid c (Point rx ry) phi ang1 angd
+arcCentroid :: (Ord a, FromInteger a, TrigField a, ExpField a) => ArcPosition a -> ArcCentroid a
+arcCentroid (ArcPosition p1@(Point x1 y1) p2@(Point x2 y2) (ArcInfo rad phi' large' clockwise')) = ArcCentroid c (Point rx ry) phi' ang1 angd
   where
-    (Point x1' y1') = rotateP (-phi) ((p1 - p2) /. two)
+    (Point x1' y1') = rotateP (-phi') ((p1 - p2) /. two)
     (Point rx' ry') = rad
     l = x1' ** 2 / rx' ** 2 + y1' ** 2 / ry' ** 2
     (rx, ry) = bool (rx', ry') (rx' * sqrt l, ry' * sqrt l) (l > 1)
     snumer = max 0 $ (rx * rx * ry * ry) - (rx * rx * y1' * y1') - (ry * ry * x1' * x1')
     s =
-      bool -1 1 (large == clockwise)
+      bool (-1) 1 (large' == clockwise')
         * sqrt
           (snumer / (rx * rx * y1' * y1' + ry * ry * x1' * x1'))
     cx' = s * rx * y1' / ry
     cy' = s * (-ry) * x1' / rx
-    cx = (x1 + x2) / 2 + cos phi * cx' - sin phi * cy'
-    cy = (y1 + y2) / 2 + sin phi * cx' + cos phi * cy'
+    cx = (x1 + x2) / 2 + cos phi' * cx' - sin phi' * cy'
+    cy = (y1 + y2) / 2 + sin phi' * cx' + cos phi' * cy'
     c = Point cx cy
     ang1 = angle (Point (-(cx' - x1') / rx) (-(cy' - y1') / ry))
     ang2 = angle (Point (-(cx' + x1') / rx) (-(cy' + y1') / ry))
     angd' = ang2 - ang1
     angd =
-      bool 0 (2 * pi) (not clockwise && angd' < 0)
-        + bool 0 (-2 * pi) (clockwise && angd' > 0)
+      bool 0 (2 * pi) (not clockwise' && angd' < 0)
+        + bool 0 (-2 * pi) (clockwise' && angd' > 0)
         + angd'
 
--- | convert from an ArcCentroid to an ArcPosition specification.
+-- | Convert from an ArcCentroid to an ArcPosition specification.
 --
 -- Morally,
 -- > arcPosition . arcCentroid == id
@@ -448,15 +233,15 @@
 --
 -- - radii are less than they should be and thus get scaled up.
 arcPosition :: (Ord a, Signed a, TrigField a) => ArcCentroid a -> ArcPosition a
-arcPosition (ArcCentroid c r phi ang1 angd) =
-  ArcPosition p1 p2 (ArcInfo r phi large clockwise)
+arcPosition (ArcCentroid c r phi' ang1 angd) =
+  ArcPosition p1 p2 (ArcInfo r phi' large' clockwise')
   where
-    p1 = ellipse c r phi ang1
-    p2 = ellipse c r phi (ang1 + angd)
-    large = abs angd > pi
-    clockwise = angd < zero
+    p1 = ellipse c r phi' ang1
+    p2 = ellipse c r phi' (ang1 + angd)
+    large' = abs angd > pi
+    clockwise' = angd < zero
 
--- | ellipse formulae
+-- | Ellipse formulae
 --
 -- >>> ellipse zero (Point 1 2) (pi/6) pi
 -- Point -0.8660254037844388 -0.4999999999999997
@@ -471,19 +256,20 @@
 --
 -- See also: [wolfram](https://mathworld.wolfram.com/Ellipse.html)
 ellipse :: (Direction b a, Affinity b a, TrigField a) => b -> b -> a -> a -> b
-ellipse c r phi theta = c + (rotate phi |. (r * ray theta))
+ellipse c r phi' theta = c + (rotate phi' |. (r * ray theta))
 
 -- | compute the bounding box for an arcBox
 --
--- > let p = ArcPosition (Point 0 0) (Point 1 0) (ArcInfo (Point 1 0.5) (pi/4) False True)
--- > arcBox p
--- Rect -8.326672684688674e-17 0.9999999999999998 -5.551115123125783e-17 0.30644649676616753
+-- >>> let p = ArcPosition (Point 0 0) (Point 1 0) (ArcInfo (Point 1 0.5) (pi/4) False True)
+-- >>> import Data.FormatN
+-- >>> fmap (fixed (Just 3)) (arcBox p)
+-- Rect "-0.000" "1.000" "-0.000" "0.306"
 arcBox :: ArcPosition Double -> Rect Double
-arcBox p = space1 pts
+arcBox p = unsafeSpace1 pts
   where
-    (ArcCentroid c r phi ang0 angd) = arcCentroid p
-    (x', y') = arcDerivs r phi
-    angr = ang0 ... (ang0 + angd) :: Range Double
+    (ArcCentroid c r phi' ang0' angd) = arcCentroid p
+    (x', y') = arcDerivs r phi'
+    angr = ang0' ... (ang0' + angd) :: Range Double
     angs =
       filter
         (|.| angr)
@@ -495,22 +281,20 @@
           y' - 2 * pi,
           y' + pi,
           y' - pi,
-          ang0,
-          ang0 + angd
+          ang0',
+          ang0' + angd
         ]
-    pts = ellipse c r phi <$> angs
+    pts = ellipse c r phi' <$> angs
 
--- | potential arc turning points.
+-- | Potential arc turning points.
 --
 -- >>> arcDerivs (Point 1 0.5) (pi/4)
 -- (-0.4636476090008061,0.4636476090008062)
 arcDerivs :: Point Double -> Double -> (Double, Double)
-arcDerivs (Point rx ry) phi = (thetax1, thetay1)
+arcDerivs (Point rx ry) phi' = (thetax1, thetay1)
   where
-    thetax1 = atan2 (-sin phi * ry) (cos phi * rx)
-    thetay1 = atan2 (cos phi * ry) (sin phi * rx)
-
--- * bezier
+    thetax1 = atan2 (-sin phi' * ry) (cos phi' * rx)
+    thetay1 = atan2 (cos phi' * ry) (sin phi' * rx)
 
 -- | Quadratic bezier curve expressed in positional terms.
 data QuadPosition a = QuadPosition
@@ -536,12 +320,12 @@
 
 -- | Convert from a positional to a polar representation of a cubic bezier.
 --
--- >>> quadPolar (QuadPosition (Point 0 0) (Point 1 1) (Point 2 -1))
+-- >>> quadPolar (QuadPosition (Point 0 0) (Point 1 1) (Point 2 (-1)))
 -- QuadPolar {qpolStart = Point 0.0 0.0, qpolEnd = Point 1.0 1.0, qpolControl = Polar {magnitude = 2.1213203435596424, direction = -0.7853981633974483}}
-quadPolar :: (Eq a, ExpField a, TrigField a) => QuadPosition a -> QuadPolar a
-quadPolar (QuadPosition start end control) = QuadPolar start end control'
+quadPolar :: (Eq a, TrigField a, ExpField a) => QuadPosition a -> QuadPolar a
+quadPolar (QuadPosition start' end control) = QuadPolar start' end control'
   where
-    mp = (start + end) /. two
+    mp = (start' + end) /. two
     control' = polar (control - mp)
 
 -- | Convert from a polar to a positional representation of a quadratic bezier.
@@ -549,45 +333,45 @@
 -- > quadPosition . quadPolar == id
 -- > quadPolar . quadPosition == id
 --
--- >>> quadPosition $ quadPolar (QuadPosition (Point 0 0) (Point 1 1) (Point 2 -1))
+-- >>> quadPosition $ quadPolar (QuadPosition (Point 0 0) (Point 1 1) (Point 2 (-1)))
 -- QuadPosition {qposStart = Point 0.0 0.0, qposEnd = Point 1.0 1.0, qposControl = Point 2.0 -0.9999999999999998}
-quadPosition :: (ExpField a, TrigField a) => QuadPolar a -> QuadPosition a
-quadPosition (QuadPolar start end control) = QuadPosition start end control'
+quadPosition :: (TrigField a) => QuadPolar a -> QuadPosition a
+quadPosition (QuadPolar start' end control) = QuadPosition start' end control'
   where
-    control' = coord control + (start + end) /. two
+    control' = coord control + (start' + end) /. two
 
 -- | The quadratic bezier equation
 --
--- >>> quadBezier (QuadPosition (Point 0 0) (Point 1 1) (Point 2 -1)) 0.33333333
+-- >>> quadBezier (QuadPosition (Point 0 0) (Point 1 1) (Point 2 (-1))) 0.33333333
 -- Point 0.9999999933333332 -0.33333333333333326
-quadBezier :: (ExpField a, FromInteger a) => QuadPosition a -> a -> Point a
-quadBezier (QuadPosition start end control) theta =
-  (1 - theta) ^ 2 .* start
+quadBezier :: (FromInteger a, ExpField a) => QuadPosition a -> a -> Point a
+quadBezier (QuadPosition start' end control) theta =
+  (1 - theta) ^ 2 .* start'
     + 2 * (1 - theta) * theta .* control
     + theta ^ 2 .* end
 
 -- | QuadPosition turning points.
 --
--- >>> quadDerivs (QuadPosition (Point 0 0) (Point 1 1) (Point 2 -1))
+-- >>> quadDerivs (QuadPosition (Point 0 0) (Point 1 1) (Point 2 (-1)))
 -- [0.6666666666666666,0.3333333333333333]
 quadDerivs :: QuadPosition Double -> [Double]
-quadDerivs (QuadPosition start end control) = [x', y']
+quadDerivs (QuadPosition start' end control) = [x', y']
   where
-    (Point detx dety) = start - 2 .* control + end
-    x' = bool ((_x start - _x control) / detx) (2 * (_x control - _x start)) (detx == 0)
-    y' = bool ((_y start - _y control) / dety) (2 * (_y control - _y start)) (dety == 0)
+    (Point detx dety) = start' - 2 .* control + end
+    x' = bool ((_x start' - _x control) / detx) (2 * (_x control - _x start')) (detx == 0)
+    y' = bool ((_y start' - _y control) / dety) (2 * (_y control - _y start')) (dety == 0)
 
 -- | Bounding box for a QuadPosition
 --
--- >>> quadBox (QuadPosition (Point 0 0) (Point 1 1) (Point 2 -1))
+-- >>> quadBox (QuadPosition (Point 0 0) (Point 1 1) (Point 2 (-1)))
 -- Rect 0.0 1.3333333333333335 -0.33333333333333337 1.0
 quadBox :: QuadPosition Double -> Rect Double
-quadBox p = space1 pts
+quadBox p = unsafeSpace1 pts
   where
     ts = quadDerivs p
     pts = quadBezier p <$> ([0, 1] <> ts)
 
--- | cubic bezier curve
+-- | Cubic bezier curve
 --
 -- Note that the ordering is different to the svg standard.
 data CubicPosition a = CubicPosition
@@ -620,42 +404,42 @@
 -- > cubicPosition . cubicPolar == id
 -- > cubicPolar . cubicPosition == id
 --
--- >>> cubicPolar (CubicPosition (Point 0 0) (Point 1 1) (Point 1 -1) (Point 0 2))
+-- >>> cubicPolar (CubicPosition (Point 0 0) (Point 1 1) (Point 1 (-1)) (Point 0 2))
 -- CubicPolar {cpolStart = Point 0.0 0.0, cpolEnd = Point 1.0 1.0, cpolControl1 = Polar {magnitude = 1.1180339887498947, direction = -1.2490457723982544}, cpolControl2 = Polar {magnitude = 1.1180339887498947, direction = 1.8925468811915387}}
 cubicPolar :: (Eq a, ExpField a, TrigField a) => CubicPosition a -> CubicPolar a
-cubicPolar (CubicPosition start end control1 control2) = CubicPolar start end control1' control2'
+cubicPolar (CubicPosition start' end control1 control2) = CubicPolar start' end control1' control2'
   where
-    mp = (start + end) /. two
-    control1' = polar $ (control1 - mp) /. norm (end - start)
-    control2' = polar $ (control2 - mp) /. norm (end - start)
+    mp = (start' + end) /. two
+    control1' = polar $ (control1 - mp) /. norm (end - start')
+    control2' = polar $ (control2 - mp) /. norm (end - start')
 
 -- | Convert from a polar to a positional representation of a cubic bezier.
 --
 -- > cubicPosition . cubicPolar == id
 -- > cubicPolar . cubicPosition == id
 --
--- >>> cubicPosition $ cubicPolar (CubicPosition (Point 0 0) (Point 1 1) (Point 1 -1) (Point 0 2))
+-- >>> cubicPosition $ cubicPolar (CubicPosition (Point 0 0) (Point 1 1) (Point 1 (-1)) (Point 0 2))
 -- CubicPosition {cposStart = Point 0.0 0.0, cposEnd = Point 1.0 1.0, cposControl1 = Point 1.0 -1.0, cposControl2 = Point 1.6653345369377348e-16 2.0}
-cubicPosition :: (Eq a, ExpField a, TrigField a) => CubicPolar a -> CubicPosition a
-cubicPosition (CubicPolar start end control1 control2) = CubicPosition start end control1' control2'
+cubicPosition :: (Eq a, TrigField a, ExpField a) => CubicPolar a -> CubicPosition a
+cubicPosition (CubicPolar start' end control1 control2) = CubicPosition start' end control1' control2'
   where
-    control1' = norm (end - start) .* coord control1 + (start + end) /. two
-    control2' = norm (end - start) .* coord control2 + (start + end) /. two
+    control1' = norm (end - start') .* coord control1 + (start' + end) /. two
+    control2' = norm (end - start') .* coord control2 + (start' + end) /. two
 
 -- | The cubic bezier equation
 --
--- >>> cubicBezier (CubicPosition (Point 0 0) (Point 1 1) (Point 1 -1) (Point 0 2)) 0.8535533905932737
+-- >>> cubicBezier (CubicPosition (Point 0 0) (Point 1 1) (Point 1 (-1)) (Point 0 2)) 0.8535533905932737
 -- Point 0.6767766952966369 1.2071067811865475
-cubicBezier :: (ExpField a, FromInteger a) => CubicPosition a -> a -> Point a
-cubicBezier (CubicPosition start end control1 control2) theta =
-  (1 - theta) ^ 3 .* start
+cubicBezier :: (FromInteger a, TrigField a) => CubicPosition a -> a -> Point a
+cubicBezier (CubicPosition start' end control1 control2) theta =
+  (1 - theta) ^ 3 .* start'
     + 3 * (1 - theta) ^ 2 * theta .* control1
     + 3 * (1 - theta) * theta ^ 2 .* control2
     + theta ^ 3 .* end
 
 -- | Turning point positions for a CubicPosition (0,1 or 2)
 --
--- >>> cubicDerivs (CubicPosition (Point 0 0) (Point 1 1) (Point 1 -1) (Point 0 2))
+-- >>> cubicDerivs (CubicPosition (Point 0 0) (Point 1 1) (Point 1 (-1)) (Point 0 2))
 -- [0.8535533905932737,0.14644660940672624,0.5]
 cubicDerivs :: CubicPosition Double -> [Double]
 cubicDerivs
@@ -676,10 +460,10 @@
 
 -- | Bounding box for a CubicPosition
 --
--- >>> cubicBox (CubicPosition (Point 0 0) (Point 1 1) (Point 1 -1) (Point 0 2))
+-- >>> cubicBox (CubicPosition (Point 0 0) (Point 1 1) (Point 1 (-1)) (Point 0 2))
 -- Rect 0.0 1.0 -0.20710678118654752 1.2071067811865475
 cubicBox :: CubicPosition Double -> Rect Double
-cubicBox p = space1 pts
+cubicBox p = unsafeSpace1 pts
   where
     ts = cubicDerivs p
     pts =
@@ -689,25 +473,37 @@
           ([0, 1] <> ts)
 
 -- | Bounding box for a list of path XYs.
-pathBoxes :: [(PathInfo Double, Point Double)] -> Maybe (Rect Double)
+pathBoxes :: [PathData Double] -> Maybe (Rect Double)
 pathBoxes [] = Nothing
 pathBoxes (x : xs) =
-  L.fold (L.Fold step begin (Just . snd)) xs
+  Just $
+    L.fold (L.Fold step begin snd) xs
   where
     begin :: (Point Double, Rect Double)
-    begin = (snd x, singleton (snd x))
-    step ::
-      (Point Double, Rect Double) ->
-      (PathInfo Double, Point Double) ->
-      (Point Double, Rect Double)
-    step (start, r) a = (snd a, pathBox start a <> r)
+    begin = (pointPath x, singleton (pointPath x))
+    step (start', r) a = (pointPath a, pathBox start' a <> r)
 
 -- | Bounding box for a path info, start and end Points.
-pathBox :: Point Double -> (PathInfo Double, Point Double) -> Rect Double
-pathBox start (info, end) =
+pathBox :: Point Double -> PathData Double -> Rect Double
+pathBox start' info =
   case info of
-    StartI -> singleton end
-    LineI -> space1 [start, end]
-    CubicI c1 c2 -> cubicBox (CubicPosition start end c1 c2)
-    QuadI c -> quadBox (QuadPosition start end c)
-    ArcI i -> arcBox (ArcPosition start end i)
+    StartP p -> singleton p
+    LineP p -> unsafeSpace1 [start', p]
+    CubicP c1 c2 p -> cubicBox (CubicPosition start' p c1 c2)
+    QuadP c p -> quadBox (QuadPosition start' p c)
+    ArcP i p -> arcBox (ArcPosition start' p i)
+
+-- | project an ArcPosition given new and old Rects
+--
+-- The radii of the ellipse can be represented as:
+--
+-- Point rx 0 & Point 0 ry
+--
+-- These two points are firstly rotated by p and then undergo scaling...
+projectArcPosition :: Rect Double -> Rect Double -> ArcPosition Double -> ArcInfo Double
+projectArcPosition new old (ArcPosition _ _ (ArcInfo (Point rx ry) phi' l cl)) = ArcInfo (Point rx'' ry'') phi' l cl
+  where
+    rx' = rotateP phi' (Point rx zero)
+    rx'' = norm $ rx' * width new / width old
+    ry' = rotateP phi' (Point zero ry)
+    ry'' = norm $ ry' * width new / width old
diff --git a/src/Data/Path/Parser.hs b/src/Data/Path/Parser.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Path/Parser.hs
@@ -0,0 +1,425 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE OverloadedLabels #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RebindableSyntax #-}
+{-# OPTIONS_GHC -Wall #-}
+
+-- | SVG path manipulation
+module Data.Path.Parser
+  ( -- * Parsing
+    -- $parsing
+    parsePath,
+    svgToPathData,
+    pathDataToSvg,
+    PathCommand (..),
+    Origin (..),
+  )
+where
+
+import Chart.Data
+import Control.Applicative
+import Control.Monad.State.Lazy
+import qualified Data.Attoparsec.Text as A
+import Data.Either
+import Data.FormatN
+import Data.Functor
+import Data.Path
+import Data.Scientific (toRealFloat)
+import Data.Text (Text, pack)
+import qualified Data.Text as Text
+import GHC.Generics
+import GHC.OverloadedLabels
+import NumHask.Prelude
+import Optics.Core hiding ((<|))
+
+-- import qualified Data.List as List
+
+-- $parsing
+-- Every element of an svg path can be thought of as exactly two points in space, with instructions of how to draw a curve between them.  From this point of view, one which this library adopts, a path chart is thus very similar to a line chart.  There's just a lot more information about the style of this line to deal with.
+--
+-- References:
+--
+-- [SVG d](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d)
+--
+-- [SVG path](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths)
+
+-- | Parse a raw path string.
+--
+-- >>> let outerseg1 = "M-1.0,0.5 A0.5 0.5 0.0 1 1 0.0,-1.2320508075688774 1.0 1.0 0.0 0 0 -0.5,-0.3660254037844387 1.0 1.0 0.0 0 0 -1.0,0.5 Z"
+-- >>> parsePath outerseg1
+-- Right [MoveTo OriginAbsolute [Point -1.0 0.5],EllipticalArc OriginAbsolute [(0.5,0.5,0.0,True,True,Point 0.0 -1.2320508075688774),(1.0,1.0,0.0,False,False,Point -0.5 -0.3660254037844387),(1.0,1.0,0.0,False,False,Point -1.0 0.5)],EndPath]
+--
+-- https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d
+parsePath :: Text -> Either String [PathCommand]
+parsePath = A.parseOnly pathParser
+
+commaWsp :: A.Parser ()
+commaWsp = A.skipSpace *> A.option () (A.string "," $> ()) <* A.skipSpace
+
+point :: A.Parser (Point Double)
+point = Point <$> num <* commaWsp <*> num
+
+points :: A.Parser [Point Double]
+points = fromList <$> point `A.sepBy1` commaWsp
+
+pointPair :: A.Parser (Point Double, Point Double)
+pointPair = (,) <$> point <* commaWsp <*> point
+
+pointPairs :: A.Parser [(Point Double, Point Double)]
+pointPairs = fromList <$> pointPair `A.sepBy1` commaWsp
+
+pathParser :: A.Parser [PathCommand]
+pathParser = fromList <$> (A.skipSpace *> A.many1 command)
+
+num :: A.Parser Double
+num = realToFrac <$> (A.skipSpace *> plusMinus <* A.skipSpace)
+  where
+    doubleNumber :: A.Parser Double
+    doubleNumber = toRealFloat <$> A.scientific <|> shorthand
+
+    plusMinus =
+      negate <$ A.string "-" <*> doubleNumber
+        <|> A.string "+" *> doubleNumber
+        <|> doubleNumber
+
+    shorthand = process' <$> (A.string "." *> A.many1 A.digit)
+    process' = fromRight 0 . A.parseOnly doubleNumber . pack . (++) "0."
+
+nums :: A.Parser [Double]
+nums = num `A.sepBy1` commaWsp
+
+flag :: A.Parser Bool
+flag = fmap (/= '0') A.digit
+
+command :: A.Parser PathCommand
+command =
+  MoveTo OriginAbsolute <$ A.string "M" <*> points
+    <|> MoveTo OriginRelative <$ A.string "m" <*> points
+    <|> LineTo OriginAbsolute <$ A.string "L" <*> points
+    <|> LineTo OriginRelative <$ A.string "l" <*> points
+    <|> HorizontalTo OriginAbsolute <$ A.string "H" <*> nums
+    <|> HorizontalTo OriginRelative <$ A.string "h" <*> nums
+    <|> VerticalTo OriginAbsolute <$ A.string "V" <*> nums
+    <|> VerticalTo OriginRelative <$ A.string "v" <*> nums
+    <|> CurveTo OriginAbsolute <$ A.string "C" <*> fmap fromList (manyComma curveToArgs)
+    <|> CurveTo OriginRelative <$ A.string "c" <*> fmap fromList (manyComma curveToArgs)
+    <|> SmoothCurveTo OriginAbsolute <$ A.string "S" <*> pointPairs
+    <|> SmoothCurveTo OriginRelative <$ A.string "s" <*> pointPairs
+    <|> QuadraticBezier OriginAbsolute <$ A.string "Q" <*> pointPairs
+    <|> QuadraticBezier OriginRelative <$ A.string "q" <*> pointPairs
+    <|> SmoothQuadraticBezierCurveTo OriginAbsolute <$ A.string "T" <*> points
+    <|> SmoothQuadraticBezierCurveTo OriginRelative <$ A.string "t" <*> points
+    <|> EllipticalArc OriginAbsolute <$ A.string "A" <*> manyComma ellipticalArgs
+    <|> EllipticalArc OriginRelative <$ A.string "a" <*> manyComma ellipticalArgs
+    <|> EndPath <$ A.string "Z" <* commaWsp
+    <|> EndPath <$ A.string "z" <* commaWsp
+  where
+    curveToArgs =
+      (,,) <$> (point <* commaWsp)
+        <*> (point <* commaWsp)
+        <*> point
+    manyComma a = fromList <$> a `A.sepBy1` commaWsp
+
+    numComma = num <* commaWsp
+    flagComma = flag <* commaWsp
+    ellipticalArgs =
+      (,,,,,) <$> numComma
+        <*> numComma
+        <*> numComma
+        <*> flagComma
+        <*> flagComma
+        <*> point
+
+-- | Path command definition (ripped from reanimate-svg).
+data PathCommand
+  = -- | M or m command
+    MoveTo !Origin ![Point Double]
+  | -- | Line to, L or l Svg path command.
+    LineTo !Origin ![Point Double]
+  | -- | Equivalent to the H or h svg path command.
+    HorizontalTo !Origin ![Double]
+  | -- | Equivalent to the V or v svg path command.
+    VerticalTo !Origin ![Double]
+  | -- | Cubic bezier, C or c command
+    CurveTo !Origin ![(Point Double, Point Double, Point Double)]
+  | -- | Smooth cubic bezier, equivalent to S or s command
+    SmoothCurveTo !Origin ![(Point Double, Point Double)]
+  | -- | Quadratic bezier, Q or q command
+    QuadraticBezier !Origin ![(Point Double, Point Double)]
+  | -- | Quadratic bezier, T or t command
+    SmoothQuadraticBezierCurveTo !Origin ![Point Double]
+  | -- | Elliptical arc, A or a command.
+    EllipticalArc !Origin ![(Double, Double, Double, Bool, Bool, Point Double)]
+  | -- | Close the path, Z or z svg path command.
+    EndPath
+  deriving (Eq, Show, Generic)
+
+-- | Tell if a path command is absolute (in the current
+-- user coordiante) or relative to the previous point.
+data Origin
+  = -- | Next point in absolute coordinate
+    OriginAbsolute
+  | -- | Next point relative to the previous
+    OriginRelative
+  deriving (Eq, Show, Generic)
+
+-- | To fit in with the requirements of the library design, specifically the separation of what a chart is into XY data Points from representation of these points, path instructions need to be decontructed into:
+--
+-- - define a single chart element as a line.
+--
+-- - split a single path element into the start and end points of the line, which become the 'Chart.Types.xys' of a 'Chart.Types.Chart', and the rest of the information, which is called 'PathInfo' and incorporated into the 'Chart.Types.Chart' 'Chart.Types.annotation'.
+--
+-- An arc path is variant to affine transformations of the 'Chart.Types.xys' points: angles are not presevred in the new reference frame.
+data PathInfo a
+  = StartI
+  | LineI
+  | CubicI (Point a) (Point a)
+  | QuadI (Point a)
+  | ArcI (ArcInfo a)
+  deriving (Show, Eq, Generic)
+
+pointToSvgCoords :: Point Double -> Point Double
+pointToSvgCoords (Point x y) = Point x (-y)
+
+svgCoords :: PathData Double -> PathData Double
+svgCoords (CubicP a b p) = CubicP (pointToSvgCoords a) (pointToSvgCoords b) (pointToSvgCoords p)
+svgCoords (QuadP a p) = QuadP (pointToSvgCoords a) (pointToSvgCoords p)
+svgCoords (StartP p) = StartP (pointToSvgCoords p)
+svgCoords (LineP p) = LineP (pointToSvgCoords p)
+svgCoords (ArcP i p) = ArcP i (pointToSvgCoords p)
+
+-- | Convert from a path info, start point, end point triple to a path text clause.
+--
+-- Note that morally,
+--
+-- > toPathsAbsolute . toInfos . parsePath == id
+--
+-- but the round trip destroys much information, including:
+--
+-- - path text spacing
+--
+-- - "Z", which is replaced by a LineI instruction from the end point back to the original start of the path.
+--
+-- - Sequences of the same instruction type are uncompressed
+--
+-- - As the name suggests, relative paths are translated to absolute ones.
+--
+-- - implicit L's in multiple M instructions are separated.
+--
+-- In converting between chart-svg and SVG there are two changes in reference:
+--
+-- - arc rotation is expressed as positive degrees for a clockwise rotation in SVG, and counter-clockwise in radians for chart-svg
+--
+-- - A positive y-direction is down for SVG and up for chart-svg
+toPathAbsolute ::
+  PathData Double ->
+  -- | path text
+  Text
+toPathAbsolute (StartP p) = "M " <> pp p
+toPathAbsolute (LineP p) = "L " <> pp p
+toPathAbsolute (CubicP c1 c2 p) =
+  "C "
+    <> pp c1
+    <> " "
+    <> pp c2
+    <> " "
+    <> pp p
+toPathAbsolute (QuadP control p) =
+  "Q "
+    <> pp control
+    <> " "
+    <> pp p
+toPathAbsolute (ArcP (ArcInfo (Point x y) phi' l sw) x2) =
+  "A "
+    <> (pack . show) x
+    <> " "
+    <> (pack . show) y
+    <> " "
+    <> (pack . show) (-phi' * 180 / pi)
+    <> " "
+    <> bool "0" "1" l
+    <> " "
+    <> bool "0" "1" sw
+    <> " "
+    <> pp x2
+
+-- | Render a point (including conversion to SVG Coordinates).
+pp :: Point Double -> Text
+pp (Point x y) =
+  formatOrShow (FixedStyle 4) Nothing x <> ","
+    <> formatOrShow (FixedStyle 4) Nothing (bool (-y) y (y == zero))
+
+data PathCursor = PathCursor
+  { -- | previous position
+    curPrevious :: Point Double,
+    -- | start point (to close out the path)
+    curStart :: Point Double,
+    -- | last control point
+    curControl :: Maybe (Point Double)
+  }
+  deriving (Eq, Show, Generic)
+
+stateCur0 :: PathCursor
+stateCur0 = PathCursor zero zero Nothing
+
+-- | Convert an SVG d path text snippet to a [PathData Double]
+svgToPathData :: Text -> [PathData Double]
+svgToPathData = toPathDatas . either error id . parsePath
+
+-- | Convert [PathData] to an SVG d path text.
+pathDataToSvg :: [PathData Double] -> Text
+pathDataToSvg xs = Text.intercalate " " $ fmap toPathAbsolute xs
+
+-- | Convert from a path command list to a PathA specification
+toPathDatas :: [PathCommand] -> [PathData Double]
+toPathDatas xs = fmap svgCoords $ mconcat $ flip evalState stateCur0 $ sequence $ toInfo <$> xs
+
+-- | Convert relative points to absolute points
+relToAbs :: (Additive a) => a -> [a] -> [a]
+relToAbs p xs = accsum (p : xs)
+
+moveTo :: [Point Double] -> State PathCursor [PathData Double]
+moveTo xs = do
+  put (PathCursor (last xs) (head xs) Nothing)
+  pure (StartP (head xs) : (LineP <$> tail xs))
+
+lineTo :: [Point Double] -> State PathCursor [PathData Double]
+lineTo xs = do
+  modify ((#curPrevious .~ last xs) . (#curControl .~ Nothing))
+  pure $ LineP <$> xs
+
+horTo :: [Double] -> State PathCursor [PathData Double]
+horTo xs = do
+  (PathCursor (Point _ y) _ _) <- get
+  lineTo (fmap (`Point` y) xs)
+
+verTo :: [Double] -> State PathCursor [PathData Double]
+verTo ys = do
+  (PathCursor (Point x _) _ _) <- get
+  lineTo (fmap (Point x) ys)
+
+curveTo :: [(Point Double, Point Double, Point Double)] -> State PathCursor [PathData Double]
+curveTo xs = do
+  modify
+    ( (#curPrevious .~ (\(_, _, p) -> p) (last xs))
+        . (#curControl ?~ (\(_, c2, _) -> c2) (last xs))
+    )
+  pure $ (\(c1, c2, x2) -> CubicP c1 c2 x2) <$> xs
+
+-- | Convert relative points to absolute points
+relToAbs3 :: Additive a => a -> [(a, a, a)] -> [(a, a, a)]
+relToAbs3 p xs = xs'
+  where
+    x1 = (\(x, _, _) -> x) <$> xs
+    x2 = (\(_, x, _) -> x) <$> xs
+    x3 = (\(_, _, x) -> x) <$> xs
+    x1' = fmap (p +) (accsum x1)
+    x2' = fmap (p +) (accsum x2)
+    x3' = fmap (p +) (accsum x3)
+    xs' = zip3 x1' x2' x3'
+
+reflControlPoint :: State PathCursor (Point Double)
+reflControlPoint = do
+  (PathCursor p _ c) <- get
+  case c of
+    Nothing -> pure p
+    Just c' -> pure (p - (c' - p))
+
+smoothCurveToStep :: (Point Double, Point Double) -> State PathCursor (PathData Double)
+smoothCurveToStep (c2, x2) = do
+  c1 <- reflControlPoint
+  modify ((#curControl ?~ c2) . (#curPrevious .~ x2))
+  pure (CubicP c1 c2 x2)
+
+smoothCurveTo :: [(Point Double, Point Double)] -> State PathCursor [PathData Double]
+smoothCurveTo xs =
+  sequence (smoothCurveToStep <$> xs)
+
+-- | Convert relative points to absolute points
+relToAbs2 :: Additive a => a -> [(a, a)] -> [(a, a)]
+relToAbs2 p xs = xs'
+  where
+    x1 = fst <$> xs
+    x2 = snd <$> xs
+    x1' = fmap (p +) (accsum x1)
+    x2' = fmap (p +) (accsum x2)
+    xs' = zip x1' x2'
+
+quad :: [(Point Double, Point Double)] -> State PathCursor [PathData Double]
+quad xs = do
+  modify
+    ( (#curPrevious .~ snd (last xs))
+        . (#curControl ?~ fst (last xs))
+    )
+  pure $ uncurry QuadP <$> xs
+
+smoothQuadStep :: Point Double -> State PathCursor (PathData Double)
+smoothQuadStep x2 = do
+  c1 <- reflControlPoint
+  modify ((#curControl ?~ c1) . (#curPrevious .~ x2))
+  pure (QuadP c1 x2)
+
+smoothQuad :: [Point Double] -> State PathCursor [PathData Double]
+smoothQuad xs =
+  sequence (smoothQuadStep <$> xs)
+
+arcTo :: [(Double, Double, Double, Bool, Bool, Point Double)] -> State PathCursor [PathData Double]
+arcTo xs = do
+  modify ((#curPrevious .~ (\(_, _, _, _, _, p) -> p) (last xs)) . (#curControl .~ Nothing))
+  pure $ fromPathEllipticalArc <$> xs
+
+fromPathEllipticalArc :: (a, a, a, Bool, Bool, Point a) -> PathData a
+fromPathEllipticalArc (x, y, r, l, s, p) = ArcP (ArcInfo (Point x y) r l s) p
+
+-- | Convert relative points to absolute points
+relToAbsArc :: Additive a => Point a -> [(a, a, a, Bool, Bool, Point a)] -> [(a, a, a, Bool, Bool, Point a)]
+relToAbsArc p xs = xs'
+  where
+    ps = (\(_, _, _, _, _, pt) -> pt) <$> xs
+    ps' = fmap (p +) (accsum ps)
+    xs' = zipWith (\(x0, x1, x2, x3, x4, _) pt -> (x0, x1, x2, x3, x4, pt)) xs ps'
+
+-- | Convert a path command fragment to PathData
+--
+-- flips the y-dimension of points.
+toInfo :: PathCommand -> State PathCursor [PathData Double]
+toInfo (MoveTo OriginAbsolute xs) = moveTo xs
+toInfo (MoveTo OriginRelative xs) = do
+  (PathCursor p _ _) <- get
+  moveTo (relToAbs p xs)
+toInfo EndPath = do
+  (PathCursor _ s _) <- get
+  pure [LineP s]
+toInfo (LineTo OriginAbsolute xs) = lineTo xs
+toInfo (LineTo OriginRelative xs) = do
+  (PathCursor p _ _) <- get
+  lineTo (relToAbs p xs)
+toInfo (HorizontalTo OriginAbsolute xs) = horTo xs
+toInfo (HorizontalTo OriginRelative xs) = do
+  (PathCursor (Point x _) _ _) <- get
+  horTo (relToAbs x xs)
+toInfo (VerticalTo OriginAbsolute xs) = verTo xs
+toInfo (VerticalTo OriginRelative ys) = do
+  (PathCursor (Point _ y) _ _) <- get
+  verTo (relToAbs y ys)
+toInfo (CurveTo OriginAbsolute xs) = curveTo xs
+toInfo (CurveTo OriginRelative xs) = do
+  (PathCursor p _ _) <- get
+  curveTo (relToAbs3 p xs)
+toInfo (SmoothCurveTo OriginAbsolute xs) = smoothCurveTo xs
+toInfo (SmoothCurveTo OriginRelative xs) = do
+  (PathCursor p _ _) <- get
+  smoothCurveTo (relToAbs2 p xs)
+toInfo (QuadraticBezier OriginAbsolute xs) = quad xs
+toInfo (QuadraticBezier OriginRelative xs) = do
+  (PathCursor p _ _) <- get
+  quad (relToAbs2 p xs)
+toInfo (SmoothQuadraticBezierCurveTo OriginAbsolute xs) = smoothQuad xs
+toInfo (SmoothQuadraticBezierCurveTo OriginRelative xs) = do
+  (PathCursor p _ _) <- get
+  smoothQuad (relToAbs p xs)
+toInfo (EllipticalArc OriginAbsolute xs) = arcTo xs
+toInfo (EllipticalArc OriginRelative xs) = do
+  (PathCursor p _ _) <- get
+  arcTo (relToAbsArc p xs)
