From 5ead43911d0c369d6fbc250a4445d3a7937dcd7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Mon, 5 Oct 2026 15:01:34 -0400 Subject: [PATCH] wip-c2-4 --- chord_diagram.go | 159 ++++++++++++++ chord_diagram_test.go | 72 +++++++ messages_charts2.go | 15 +- parallel_coordinates.go | 196 ++++++++++++++++++ parallel_coordinates_test.go | 84 ++++++++ .../snapshots/darwin/chord_diagram-dark.png | Bin 0 -> 29370 bytes .../snapshots/darwin/chord_diagram-light.png | Bin 0 -> 28520 bytes .../darwin/parallel_coordinates-dark.png | Bin 0 -> 13584 bytes .../darwin/parallel_coordinates-light.png | Bin 0 -> 13165 bytes 9 files changed, 520 insertions(+), 6 deletions(-) create mode 100644 chord_diagram.go create mode 100644 chord_diagram_test.go create mode 100644 parallel_coordinates.go create mode 100644 parallel_coordinates_test.go create mode 100644 testdata/snapshots/darwin/chord_diagram-dark.png create mode 100644 testdata/snapshots/darwin/chord_diagram-light.png create mode 100644 testdata/snapshots/darwin/parallel_coordinates-dark.png create mode 100644 testdata/snapshots/darwin/parallel_coordinates-light.png diff --git a/chord_diagram.go b/chord_diagram.go new file mode 100644 index 0000000..b6979b7 --- /dev/null +++ b/chord_diagram.go @@ -0,0 +1,159 @@ +package mujica + +import ( + "math" + + "github.com/egoist/mygo/ui" + + "mujicaui/internal" + "mujicaui/theme" +) + +// ChordDiagramOptions configure a ChordDiagram. +type ChordDiagramOptions struct { + Frame ChartFrame + Format func(v float64) string +} + +// chordLayout is each group's arc and each pair's chord ends, as angles. +type chordLayout struct { + arcs [][2]float64 + sub [][][2]float64 + pairs [][2]int + total float64 +} + +// chordGap is the angle left between group arcs. +const chordGap = 0.04 + +func chordPlace(matrix [][]float64) chordLayout { + n := len(matrix) + l := chordLayout{arcs: make([][2]float64, n), sub: make([][][2]float64, n)} + sums := make([]float64, n) + for i, row := range matrix { + if len(row) != n { + panic("mujica: ChordDiagram matrix must be square") + } + for j, v := range row { + if v < 0 || math.IsNaN(v) || math.IsInf(v, 0) { + panic("mujica: ChordDiagram values must be finite and ≥ 0") + } + sums[i] += v + if j > i && v+matrix[j][i] > 0 { + l.pairs = append(l.pairs, [2]int{i, j}) + } + } + l.total += sums[i] + } + if l.total == 0 { + return l + } + span := 2*math.Pi - chordGap*float64(n) + a := 0.0 + for i := range n { + l.arcs[i] = [2]float64{a, a + span*sums[i]/l.total} + l.sub[i] = make([][2]float64, n) + at := a + for j := range n { + w := span * matrix[i][j] / l.total + l.sub[i][j] = [2]float64{at, at + w} + at += w + } + a = l.arcs[i][1] + chordGap + } + return l +} + +// ChordDiagram joins group arcs by chords; reading a group highlights them. +func ChordDiagram(c *ui.Context, names []string, matrix [][]float64, opts ChordDiagramOptions) ChartResult { + if len(names) != len(matrix) { + panic("mujica: ChordDiagram needs a name per matrix row") + } + ch := newChart(c, opts.Frame) + l := chartMemo(ch, "chords", chartID(matrix), func() chordLayout { return chordPlace(matrix) }) + k := Tokens(c) + pal := internal.Palette(k) + size := FontSize(c, theme.CaptionSize) + val := func(v float64) string { return chartValue(c, v, opts.Format) } + n := len(names) + len(l.pairs) + if l.total == 0 { + n = 0 + } + geom := func(r ui.Rect) (cx, cy, rad float32) { + return r.X + r.W/2, r.Y + r.H/2, min(r.W, r.H)/2 - 30 + } + spec := ChartSpec{Marks: n} + spec.Readout = func(i int) string { + if i < len(names) { + out, in := 0.0, 0.0 + for j := range names { + out += matrix[i][j] + in += matrix[j][i] + } + return names[i] + " · " + msg(c, "chord_diagram.out") + " " + val(out) + " · " + msg(c, "chord_diagram.in") + " " + val(in) + } + p := l.pairs[i-len(names)] + return names[p[0]] + " → " + names[p[1]] + " " + val(matrix[p[0]][p[1]]) + " · " + names[p[1]] + " → " + names[p[0]] + " " + val(matrix[p[1]][p[0]]) + } + spec.Pick = func(r ui.Rect, x, y float32) int { + cx, cy, rad := geom(r) + d := float32(math.Hypot(float64(x-cx), float64(y-cy))) + a := math.Atan2(float64(x-cx), float64(cy-y)) + if a < 0 { + a += 2 * math.Pi + } + if d >= rad-2 && d <= rad+14 { + for i, arc := range l.arcs { + if a >= arc[0] && a < arc[1] { + return i + } + } + } + return -1 + } + spec.Draw = func(p *ui.Painter, r ui.Rect, active int) { + cx, cy, rad := geom(r) + lit := func(pair [2]int) bool { + switch { + case active < 0: + return true + case active < len(names): + return pair[0] == active || pair[1] == active + } + return l.pairs[active-len(names)] == pair + } + for pi, pair := range l.pairs { + i, j := pair[0], pair[1] + s, t := l.sub[i][j], l.sub[j][i] + var path ui.Path + internal.Arc(&path, cx, cy, rad, s[0], s[1], true) + tx, ty := internal.Polar(cx, cy, rad, t[0]) + path.QuadTo(cx, cy, tx, ty) + internal.Arc(&path, cx, cy, rad, t[0], t[1], false) + sx, sy := internal.Polar(cx, cy, rad, s[0]) + path.QuadTo(cx, cy, sx, sy).Close() + alpha := float32(0.45) + if !lit(pair) { + alpha = 0.08 + } + p.FillPath(&path, pal[i%len(pal)].Alpha(alpha)) + if active == len(names)+pi { + p.StrokePath(&path, 1.5, k.Text) + } + } + for i, arc := range l.arcs { + grow := float32(0) + if i == active { + grow = 4 + } + p.FillPath(internal.Sector(cx, cy, rad+2, rad+12+grow, arc[0], arc[1]), pal[i%len(pal)]) + if arc[1]-arc[0] > 0.15 { + lx, ly := internal.Polar(cx, cy, rad+20, (arc[0]+arc[1])/2) + ax := 0.5 - 0.5*float32(math.Sin((arc[0]+arc[1])/2)) + chartText(p, names[i], lx, ly, size, k.Text, ax, 0.5+0.5*float32(math.Cos((arc[0]+arc[1])/2))) + } + } + } + res, _ := ch.build(spec) + return res +} diff --git a/chord_diagram_test.go b/chord_diagram_test.go new file mode 100644 index 0000000..e513e1d --- /dev/null +++ b/chord_diagram_test.go @@ -0,0 +1,72 @@ +package mujica + +import ( + "math" + "testing" + + "github.com/egoist/mygo/ui" +) + +var chordNames = []string{"Nave", "Choir", "Crypt", "Cloister"} +var chordMatrix = [][]float64{{0, 5, 2, 3}, {4, 0, 1, 0}, {1, 2, 0, 6}, {2, 0, 3, 0}} + +func TestChordPlace(t *testing.T) { + l := chordPlace(chordMatrix) + if l.total != 29 || len(l.pairs) != 5 { + t.Fatalf("total %v pairs %v", l.total, l.pairs) + } + span := 2*math.Pi - 4*chordGap + if got := l.arcs[0][1] - l.arcs[0][0]; math.Abs(got-span*10/29) > 1e-9 { + t.Fatalf("Nave arc %v", got) + } + if l.sub[0][1][1]-l.sub[0][1][0] <= 0 || l.sub[1][3][1] != l.sub[1][3][0] { + t.Fatal("sub-arcs not sized by the matrix") + } +} + +func TestChordDiagramReadout(t *testing.T) { + h := &chartHarness{build: func(c *ui.Context) ChartResult { + return ChordDiagram(c, chordNames, chordMatrix, ChordDiagramOptions{Frame: ChartFrame{Label: "Paths"}}) + }} + tt := ui.NewTester(h.view, 520, 420) + tabTo(t, tt, "Paths") + tt.Key(0, ui.KeyRight) + if got := chartReadout(tt); got != "Nave · out 10 · in 7" { + t.Fatalf("group %q", got) + } + tt.Key(0, ui.KeyEnd) + if got := chartReadout(tt); got != "Crypt → Cloister 6 · Cloister → Crypt 3" { + t.Fatalf("chord %q", got) + } + tt.Key(0, ui.KeyEscape) + b := h.res.Element.Bounds() + cx, cy, rad := b.X+b.W/2, b.Y+120, float32(240)/2-30 + tt.Move(cx+(rad+6)*0.5, cy-(rad+6)*0.866) // 30°: inside the first arc + if h.res.Point != 0 { + t.Fatalf("hover %d", h.res.Point) + } +} + +func TestChordDiagramBad(t *testing.T) { + for name, m := range map[string][][]float64{"ragged": {{1, 2}, {1}}, "negative": {{0, -1}, {1, 0}}} { + func() { + defer func() { + if recover() == nil { + t.Errorf("%s: no panic", name) + } + }() + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ChordDiagram(c, []string{"a", "b"}, m, ChordDiagramOptions{Frame: ChartFrame{Label: "x"}}) + }, 300, 300) + }() + } +} + +func TestChordDiagramSnapshot(t *testing.T) { + snapshot(t, "chord_diagram", 520, 340, func(c *ui.Context) { + ui.Column(c).Padding(16).Children(func() { + ChordDiagram(c, chordNames, chordMatrix, ChordDiagramOptions{Frame: ChartFrame{Label: "Paths"}}) + }) + }) +} diff --git a/messages_charts2.go b/messages_charts2.go index aa8fced..bc2e4d9 100644 --- a/messages_charts2.go +++ b/messages_charts2.go @@ -2,11 +2,14 @@ package mujica func init() { addMessages(map[string][2]string{ - "chart_legend.more": {"+%d more", "另有 %d 项"}, - "chart_legend.fewer": {"Show fewer", "收起"}, - "chart_brush.window": {"%s: %s to %s", "%s:%s 至 %s"}, - "chart_brush.start": {"Range start %s", "区间起点 %s"}, - "chart_brush.end": {"Range end %s", "区间终点 %s"}, - "violin_plot.readout": {"%s · median %s · quartiles %s–%s · %d values", "%s · 中位数 %s · 四分位 %s–%s · %d 个值"}, + "chart_legend.more": {"+%d more", "另有 %d 项"}, + "chart_legend.fewer": {"Show fewer", "收起"}, + "chart_brush.window": {"%s: %s to %s", "%s:%s 至 %s"}, + "chart_brush.start": {"Range start %s", "区间起点 %s"}, + "chart_brush.end": {"Range end %s", "区间终点 %s"}, + "violin_plot.readout": {"%s · median %s · quartiles %s–%s · %d values", "%s · 中位数 %s · 四分位 %s–%s · %d 个值"}, + "parallel_coordinates.filtered": {"filtered out", "已筛除"}, + "chord_diagram.out": {"out", "流出"}, + "chord_diagram.in": {"in", "流入"}, }) } diff --git a/parallel_coordinates.go b/parallel_coordinates.go new file mode 100644 index 0000000..6381b05 --- /dev/null +++ b/parallel_coordinates.go @@ -0,0 +1,196 @@ +package mujica + +import ( + "log/slog" + "maps" + "math" + "strings" + + "github.com/egoist/mygo/ui" + + "mujicaui/internal" + "mujicaui/theme" +) + +// ParallelCoordinatesOptions configure a ParallelCoordinates chart. +type ParallelCoordinatesOptions struct { + Frame ChartFrame + // Names labels each row in the readout; nil uses the row number. + Names []string + Format func(v float64) string +} + +// pcDrag is a brush being dragged on one axis. +type pcDrag struct { + axis int + y0, y1 float32 +} + +// ParallelCoordinates draws rows across parallel axes; dragging an axis filters. +func ParallelCoordinates(c *ui.Context, filters *map[string][2]float64, axes []string, rows [][]float64, opts ParallelCoordinatesOptions) ChartResult { + if filters == nil || len(axes) < 2 || opts.Names != nil && len(opts.Names) != len(rows) { + panic("mujica: ParallelCoordinates needs filters, two or more axes and a name per row") + } + for _, r := range rows { + if len(r) != len(axes) { + panic("mujica: ParallelCoordinates rows need one value per axis") + } + } + ch := newChart(c, opts.Frame) + k := Tokens(c) + size := FontSize(c, theme.CaptionSize) + ink := internal.Palette(k)[0] + type scales struct{ lo, hi []float64 } + sc := chartMemo(ch, "scales", chartID(rows), func() scales { + s := scales{lo: make([]float64, len(axes)), hi: make([]float64, len(axes))} + for a := range axes { + lo, hi := math.Inf(1), math.Inf(-1) + for _, r := range rows { + if !math.IsNaN(r[a]) { + lo, hi = min(lo, r[a]), max(hi, r[a]) + } + } + if math.IsInf(lo, 1) { + lo, hi = 0, 1 + } + s.lo[a], s.hi[a], _ = internal.Nice(lo, hi, 4) + } + return s + }) + keep := func(r []float64) bool { + for a, name := range axes { + if f, ok := (*filters)[name]; ok && (math.IsNaN(r[a]) || r[a] < f[0] || r[a] > f[1]) { + return false + } + } + return true + } + geom := func(r ui.Rect) (ui.Rect, func(a int) float32, func(a int, v float64) float32) { + plot := ui.Rect{X: r.X + 36, Y: r.Y + 24, W: r.W - 72, H: r.H - 32} + ax := func(a int) float32 { return plot.X + plot.W*float32(a)/float32(len(axes)-1) } + y := func(a int, v float64) float32 { + return plot.Y + plot.H*float32(1-(v-sc.lo[a])/(sc.hi[a]-sc.lo[a])) + } + return plot, ax, y + } + name := func(i int) string { + if opts.Names != nil { + return opts.Names[i] + } + return "#" + chartValue(c, float64(i+1), nil) + } + spec := ChartSpec{Marks: len(rows)} + spec.Readout = func(i int) string { + parts := []string{name(i)} + for a, n := range axes { + parts = append(parts, n+" "+chartValue(c, rows[i][a], opts.Format)) + } + if !keep(rows[i]) { + parts = append(parts, msg(c, "parallel_coordinates.filtered")) + } + return strings.Join(parts, " · ") + } + spec.Pick = func(r ui.Rect, x, y float32) int { + _, ax, ys := geom(r) + best, dist := -1, float32(8) + for i, row := range rows { + for a := 0; a+1 < len(axes); a++ { + x0, x1 := ax(a), ax(a+1) + if x < x0 || x > x1 || math.IsNaN(row[a]) || math.IsNaN(row[a+1]) { + continue + } + t := (x - x0) / (x1 - x0) + if d := abs32(ys(a, row[a]) + t*(ys(a+1, row[a+1])-ys(a, row[a])) - y); d < dist { + best, dist = i, d + } + } + } + return best + } + drag := ui.Local(ch.res.Element, "mujica.pc.drag", func() pcDrag { return pcDrag{axis: -1} }) + spec.Input = func(plot *ui.Element, r ui.Rect) { + box, ax, _ := geom(r) + px, py, _ := plot.PointerPosition() + _, _, held := plot.Dragged() + switch { + case held && drag.axis < 0: + for a := range axes { + if abs32(px-ax(a)) <= 12 { + *drag = pcDrag{axis: a, y0: py, y1: py} + } + } + case held: + drag.y1 = max(box.Y, min(box.Y+box.H, py)) + case drag.axis >= 0: + a := drag.axis + m := maps.Clone(*filters) + if m == nil { + m = map[string][2]float64{} + } + if abs32(drag.y1-drag.y0) < 4 { + delete(m, axes[a]) + } else { + v := func(y float32) float64 { + return sc.lo[a] + float64((box.Y+box.H-y)/box.H)*(sc.hi[a]-sc.lo[a]) + } + m[axes[a]] = [2]float64{min(v(drag.y0), v(drag.y1)), max(v(drag.y0), v(drag.y1))} + } + *filters, ch.res.value = m, true + *drag = pcDrag{axis: -1} + slog.Debug("mujica: parallel_coordinates brush", "axis", axes[a], "filters", len(m)) + } + } + shownDrag := *drag + spec.Draw = func(p *ui.Painter, r ui.Rect, active int) { + plot, ax, ys := geom(r) + line := func(row []float64, w float32, col ui.Color) { + var path ui.Path + started := false + for a := range axes { + if math.IsNaN(row[a]) { + started = false + continue + } + x, y := ax(a), ys(a, row[a]) + if started { + path.LineTo(x, y) + } else { + path.MoveTo(x, y) + } + started = true + } + p.StrokePath(&path, w, col) + } + for _, row := range rows { + if !keep(row) { + line(row, 1, k.Border) + } + } + for _, row := range rows { + if keep(row) { + line(row, 1.25, ink.Alpha(0.6)) + } + } + if active >= 0 { + line(rows[active], 3, k.Text) + } + for a, n := range axes { + x := internal.Snap(p, ax(a)) + p.Line(x, plot.Y, x, plot.Y+plot.H, 1.5, k.ControlBorder) + if f, ok := (*filters)[n]; ok { + y0, y1 := max(plot.Y, ys(a, f[1])), min(plot.Y+plot.H, ys(a, f[0])) + p.Fill(ui.Rect{X: x - 6, Y: y0, W: 12, H: max(y1-y0, 1)}, k.Selection, 2) + p.Stroke(ui.Rect{X: x - 6, Y: y0, W: 12, H: max(y1-y0, 1)}, k.AccentText, 2, 1.5) + } + chartText(p, n, x, plot.Y-8, size, k.Text, 0.5, 1) + chartText(p, internal.FormatTick(sc.hi[a], (sc.hi[a]-sc.lo[a])/4), x+10, plot.Y, size, k.TextMuted, 0, 0) + chartText(p, internal.FormatTick(sc.lo[a], (sc.hi[a]-sc.lo[a])/4), x+10, plot.Y+plot.H, size, k.TextMuted, 0, 1) + } + if shownDrag.axis >= 0 { + x := ax(shownDrag.axis) + p.Stroke(ui.Rect{X: x - 6, Y: min(shownDrag.y0, shownDrag.y1), W: 12, H: abs32(shownDrag.y1 - shownDrag.y0)}, k.AccentText, 2, 1.5) + } + } + res, _ := ch.build(spec) + return res +} diff --git a/parallel_coordinates_test.go b/parallel_coordinates_test.go new file mode 100644 index 0000000..fbb1a32 --- /dev/null +++ b/parallel_coordinates_test.go @@ -0,0 +1,84 @@ +package mujica + +import ( + "math" + "testing" + + "github.com/egoist/mygo/ui" +) + +var pcAxes = []string{"Age", "Hymns", "Vigils"} +var pcRows = [][]float64{{20, 3, 9}, {35, 8, 2}, {50, 5, 5}, {65, 1, math.NaN()}} +var pcNames = []string{"Agnès", "Clare", "Hild", "Bede"} + +func TestParallelCoordinatesReadoutAndBrush(t *testing.T) { + filters := map[string][2]float64{} + values := 0 + h := &chartHarness{build: func(c *ui.Context) ChartResult { + r := ParallelCoordinates(c, &filters, pcAxes, pcRows, ParallelCoordinatesOptions{Frame: ChartFrame{Label: "Monks"}, Names: pcNames}) + if r.ValueChanged() { + values++ + } + return r + }} + tt := ui.NewTester(h.view, 520, 420) + tabTo(t, tt, "Monks") + tt.Key(0, ui.KeyEnd) + if got := chartReadout(tt); got != "Bede · Age 65 · Hymns 1 · Vigils no value" { + t.Fatalf("readout %q", got) + } + b := h.res.Element.Bounds() + plot := ui.Rect{X: b.X + 36, Y: b.Y + 24, W: b.W - 72, H: 240 - 32} + // Age runs 20..80 on the first axis: brush 30..55. + y := func(v float32) float32 { return plot.Y + plot.H*(1-(v-20)/60) } + tt.Press(plot.X, y(55)) + tt.Move(plot.X, y(40)) + tt.Move(plot.X, y(30)) + tt.Release(plot.X, y(30)) + f, ok := filters["Age"] + if !ok || math.Abs(f[0]-30) > 0.5 || math.Abs(f[1]-55) > 0.5 || values != 1 { + t.Fatalf("brush %v %v (%d)", f, ok, values) + } + tt.Key(0, ui.KeyHome) + if got := chartReadout(tt); got != "Agnès · Age 20 · Hymns 3 · Vigils 9 · filtered out" { + t.Fatalf("filtered readout %q", got) + } + tt.Press(plot.X, y(45)) // a click on the axis clears it + tt.Release(plot.X, y(45)) + if _, ok := filters["Age"]; ok { + t.Fatal("click did not clear the brush") + } +} + +func TestParallelCoordinatesHoverAndBad(t *testing.T) { + filters := map[string][2]float64{} + h := &chartHarness{build: func(c *ui.Context) ChartResult { + return ParallelCoordinates(c, &filters, pcAxes, pcRows, ParallelCoordinatesOptions{Frame: ChartFrame{Label: "Monks"}}) + }} + tt := ui.NewTester(h.view, 520, 420) + b := h.res.Element.Bounds() + plot := ui.Rect{X: b.X + 36, Y: b.Y + 24, W: b.W - 72, H: 240 - 32} + // A quarter into the first gap, row 2 (Age 50 of 20..80, Hymns 5 of 0..8) is 0.53 up. + tt.Move(plot.X+plot.W/8, plot.Y+plot.H*(1-0.53125)) + if h.res.Point != 2 { + t.Fatalf("hover picked %d", h.res.Point) + } + defer func() { + if recover() == nil { + t.Fatal("no panic for a short row") + } + }() + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ParallelCoordinates(c, &filters, pcAxes, [][]float64{{1}}, ParallelCoordinatesOptions{Frame: ChartFrame{Label: "x"}}) + }, 300, 300) +} + +func TestParallelCoordinatesSnapshot(t *testing.T) { + snapshot(t, "parallel_coordinates", 520, 320, func(c *ui.Context) { + filters := map[string][2]float64{"Hymns": {2, 9}} + ui.Column(c).Padding(16).Children(func() { + ParallelCoordinates(c, &filters, pcAxes, pcRows, ParallelCoordinatesOptions{Frame: ChartFrame{Label: "Monks"}, Names: pcNames}) + }) + }) +} diff --git a/testdata/snapshots/darwin/chord_diagram-dark.png b/testdata/snapshots/darwin/chord_diagram-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..0b369b7404ee913f6812cb111426b4a3a5b2b226 GIT binary patch literal 29370 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
nPYUaIyF@Jbv4G_k39PQv+IrlyZK16^ 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 DN`8pa literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/parallel_coordinates-dark.png b/testdata/snapshots/darwin/parallel_coordinates-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..b5039ea564fa8430ef35fb4c504a5877f5699aec GIT binary patch literal 13584 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 wh z#l;FfWYvj9HU4^PrzXJVCL!j0+=M9TqAkYatJ7J}6e3Z?)yYO3Lr0l|Pl&LkIG{K@ zJ7%;=4^lu=lIbU`qb!cb{zcjQZg}|MN!Ydi4{2AZbxc&-Q3e~K=DUCpD^p8zGgAsK zGbt}~>DgIUg15uzn}gpV5&`zMvsJ}*cW=*uom4@B~;F(#Oa!scR3sL9GJYVtJ@u+`==7AE&sB-JJyuKAcrmYSa;3>)h2f zd05f%NJ2}}#4nyf>>oaiBsI9xa~Vud$8WgnwVhR6vBTn-{-P;hq{l!9#30yQDqz*I z+0Z4v5P2YI4q+D~886-qx;PR8HKAiFNuM| z?OkaMQ=~?ORM(0#(M&B5y@R`QBQa#tnSmH4}YXI{Q$!Kjps^tlbcL&!Ut5?GIZgpmV?@m(9xPyQHX-E7U^(3BY7 zEo6S@{Si1Lem^=D>;VYXZjV;`Ia>#gyWO_qFwMg7u4P~~YKIzHTd!@ekB?7hjBV`f z?EKr44f)EnRPgz7^hv67WmPD-fZ=779P$L`Q!sHuTcF_Us?HZXuPrky1<&G&sFr46 z>rz=m)B<~@`6L@oyR%be^k3*AJd1(<%&Lm?#`nl`*4Kf|typ_c+Rtcq3t2rJ+22hy z^(tm77k^gZLRq(;a@?7)n^!)b-~Sg}mLFW!Gv&B$U;XaOpSS0ax<#adbu7J;fRHTF zmk5WVEeE5EVH2bjBdM^yiJ|lOoz<+W))!GzclnHuoq1v1%TF0)p0Gs!SmJ~00UcqC zkk@>36RF|e1+#V6`)XQcbCGc&>0B~e>5W%ykLaK1TtLuc&AH!Y0y~~8<5C#gx=QZf zFp`~~mAFlVXPR6wM^e>%fyuk2r=hr8t<}|heR0r>{(&W9R&7Un8|S?chio(r+<1xf zNI(0GDYNjKB= z<1NBd+1La)8~dD&1Jc_E)&c%wg_@yD)xi5+IJ9u?Q53r8-~jx#=~7vhFD_bM;wajNX$HnW(U<$mZ&IyUW9R8$HhuiwZ# z6B3>dRFujbI2O36V?`8&jSb1Q1g?4({4U1@UVE~E_#p;CegO=YJlkYN<&Q6jpMO+i z-BxAUB1>={i1;c&pojMskyx?QXzRW*xRy)!bYr5`wszmh7N|7vx-ne3^e3oPSMm9y zJt0N?`ASj$?^Q5&3HR>>l!lsL{(3EOB5m%fzqdA-3A=p%#m{Q?+LdOPsw-^SJpRrL zbTkp|Y4b5_5%#>SvF{En>I$o|R1Lfv@g7W0(L?LrvmlP;)@&*n2%*rSwH0XI%_v0huK4?gC4Ypl+; zLNWik{~*80X8o})-=l+P+-8fDuFXdnbf>1CZPZvJf3)i74u8uMs7tZul$!E;vUw~p zbT?<5 zh3mb0UGOA~QU=2V>2THEO;mSvImdzhlJ&Kq8^;_$>+$9CblWwiLFB}%(TL~2LY}kt zwL0?&#A_a$oC%h44z|;WspgG{QVO$fo+zFlMmOtW+5%f;;0R;3MMe>#^v5;%0?)OL z!@6tvN6*x^KStRhBs>|JM~bJrLeJmDV6r%?M9{B1f+@>YQ8&(2)MgA4_;ds>NKMy` zAx+<&CYpbGm&m>FH}kJt-)eLQ8E`ZsB8=Dh^{m$D$J=hwgfFw|M_s_#iAF1ls3Pgr z5|Nxf&~FZFEf(Gl7>;CdzGHV|dQ_x#&O&GQ?(g(GGwJ39}DTw3l)DpDNuQ!0*<50|Ouq&7A- zneT7^>CWF@ULH^MK>r`#=XXrl)c@!He_Vk&*uot;NDtMFXu literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/parallel_coordinates-light.png b/testdata/snapshots/darwin/parallel_coordinates-light.png new file mode 100644 index 0000000000000000000000000000000000000000..59f768c9619580d3f471a2a4fd5f00a076df8ac9 GIT binary patch literal 13165 zcmdVAbyQS;6fZgg64IbDFd#L;00JW*Al(fDf`oK85)uNE(kTN-$B1-?(%m54CEeY9 z5B%nNUFBE*|Ne<@33&wJZ%zvZ1s*e z7R|m;yP@lp;4(*(GQA!Drg$x6O2W^qy0)pf6ABdDU{vysW}*7~+G43Rjm z5QmFbN-KfmD@Ic{wEy|z$Bu$AC(eKYWESaY`)RqM3NjwHY}6u^^}D3`(qdhbXW9l1j@vEoxJxYK zB>6lyk97_ISpFRPN@H>B*0VP^LG+aT%;c~#{4dLC1t!1B#h&N!-$L?Px(es(XyO_t zJt3#l8ItMY()lSwB}ZU%Lag@3aqw?@k5B8tH`P})b90_;pT^x?u8mxlkG6DOMbAf# zcPQyDk9%EhW~$Tv{TV6WPEV&k#p#>~S&`u6g$C)^n3y=-9xW!vyHPsY zMax`O*=_mzFK_D~dxmdN`e$U6W@j5KMd`P-8N#&~i?}a!^zDcIXOi-W2IJUf!+O0L%;wq}z`O5`L)93=d3j+@=pQlc1nHKXAFOX=xFI5~#f8<(-1vAV9#L9F0;h+9H}&GOFt&Q<6;gueiPkF56d$4c(=M zBx)iFL)>cQB*-asrIb~&A?R|TAFDBS6PxFsM`NxYqueQtTpFJDR`(US57)YH# z!OMBKItrz!b}e)LwEs620cB?&E+3I!h+>_opWWHs?tFojey5_NV^>w3vJ)kfNkenD zb`9v+w19|;qCRfUb-ObNGHde5QY#9l&(OVOb#!+ASUZs#c!;;`>@;_}pCl{xQF$(j zcf7ByZDYHN)sYpAY1gA=V7TR`cLRSSn(Aj*PuRbhCpwxGx*Dpcwzj`NEuc7w@&2m) zBmctJ*ZJ5je8aU(QA=6C&|g(ycOgHYoQWxqW;R3k)vn!VyCDjCH4@Vu`V7w*i|8(N zUmwFbH2Y>+U8;<+O1x7z=8YN_RvwcdNxNYFE9Rii)>bGTj}}$_cbO~One&e-Mn85f zyPBGGu7Wz7n`fq`G;73-jE&#O7&?Cn4;Q4*p#RF*F*Bo;uGo8YFm*nyR_e6k=T{&% zUzO!4)SmL3)OG4l5@ytTf*1`mGqL?!LOMD+;<3_bR-5SItGB;Q!NI{jEh4_Pb^O5H z9EWivb3qo?K0JJ5G0auH1iidWI3Jzl&c~5(2jDd26#VNIg zyszybYiW5^S(AtK^}TD_Zv#xZSfisvm>RlLFVl$-ZB?<}cBy)fLmxp;@)X_T7s zR*;QNS(o*Tx%^_?o)qoze&1QLsWt!AjZZ{X5+*0t4&V(Tx}%EjLWx6napnJZ#=CH% zKs>kiv?q)&L3e#~b9-s2YqdS$aM8qT?T3IqjDg|o>@1PJL*M=21rd>Y^U~GjUnbau zt*!0&yx@M;HpSA`4bZV7?(A39WHY$3jB3vpgFC90L?s~fbhSnAhzMUa)BTDHI{o}8 zS{$2%n|lK2^XLJE>$|%iI~6C}+#*vM$XJFLXL?qWK(p?U>E-k@hhDL<>E=q@%!Da) zfd>1nSg5RQ4>7&K)xQa>M|ZV38$a~fCer}t18tm8^RRsFswdwT`>)t0TWLA@^2ta^ z_Zxm>F4) zN^S+K?e&_P&GzK?Gso|(8=pcgJ=<s|I;FYMKPi<*Xczla6j~b$a{ij#oYj z)Xi(rMmys~^)D`FC}f3%giP;;nFnV;>F6vl2#mCsH#9_~cKXAnyg!?}Tp5m!Z2SA_ zk3rByP1m=rtXlqoojE+_InG=ZR8>Pp?JtqT2UrJwk*Bez)4y%Nil$A={`OYkT6aOQGu@+)@@lD84Oo|_{Il94fgUi9I)Pv_QsnL6>OD(UP! zmb-~N3C=*fbB6$2)?hxHcRF9^=IY#{-+yN>W8=5Mr#3Qj`MG@Z{TOw_A1bOL9`7+x zm>iCo5)+CaHhZ~iAtQ0=zeK%szSGY<4nZdl(fFYYb1U2Kr8g}{RdMF5%=<~aLO=C! zYVAe;+qLAgy;(u$TXJe66O;BYt<{H|)TFE?f09^I`?JQkDnbZ^m(CbGwYHM0&-xdl zGc`D6*GT5A>>g1YQZSvN{X$;c*OEA-tE&&V4_LlbJcQ7fl6`mN>cPch<5H*dK9*tM zJJhntSc(lzAX1tm|Ak$(@~|?%O}O-h!}6{qgus4#J7*a+iUqyrqiuc#_41b%y>%QQ zeSNTzhE45|x`wKTmh$%56{LuxlA~fIspz$UEkgV7ZjF0|-|Z9}Cb2^!)_R}*&ZZ|d z>(z>Lxa{C{L8}+WBS;Fb(UYpVatA_aWqMWF>ub`M<<{lHL;D5GZ%kYQ-;J0m-@f3+ zq|PzVA;zcw@Qxbzs~pPkJ$wg3Yczdug@~$5bgsF?PkqII_*FxN5zQKNhUQvQJb9QXT>1OJ)s%n{Tcj0Am zFoA(bo2H8L$o^+v85M`{s@e>#8k7^lO=Q6qG7`&C=1A>sr|zQ1|HQv(fHZ*@(gG(C zdG#Tr&BCr`_DkK@oxLwAUllbDY`$f{q@|^&Uh{cC*M}vi7P7)N%x>*OhIlS}_nuL_ zDsSI)4k3X4IQKj6If>iY13Cx+*te;8_hhrRNW$$~R>c0X(x0q|jGI?H)YR1HI85lG z4nRNRYxJV>=9|8R)#5g#z6Rf-18eOUdVxwFXb?T$ADqC#yO9s)bwPw4sujTiIu;L1Ue#lkBF;MHla^6*5MM}lV?X{JcRo<{r`lU&b|--Z{q)b&bxn} zNWqm2*1aOU-y9IU#HnexC#7bD#6E2>blKkf>ehSr64*7I`+BF}%kh`8QkV6qIvyQN z!Igg3eIECUuq~Oog7afT<%*W?2?sptkk5Q2iStVLy%A;UM{g=tH+~$4e zKAgp}D0(2A8ccM72SA@51BGC*{+Eab2zLUZ4+7+k(YQ2`_nRMUaBDu0 zHwI^*=zZ*CJ%al(ZckB>-IFW&2=8CQ6aoKLD}v~If3rrfOPD$Ue6S*jzXuGkQ8$r& zfWV0rPOk?569DK(C5!c)ry7~C?n+FZ-PDAx zkwSrkM6Uq^Wfef007T{<=>?Eq-I5cL>9~>ba5O!TKes*=<+n}%sRxkwd&EVLic-7_ zKoW2x3H!0pMv%i72MlflyJCW3lO-Pfg~r z7WJ)ONcet5F4I~N{&3Xmw4k`P>UeslN3RkHH(TZeXf z>E~2c7q6$1@1FJdljUuFGcb1)5ul;m=#`uxXhxR`3_&A>yQHYWVl@+szRX4=>ym?Y z&+b0{T``deSf)LUY6iHPtiAkPqzO=4_TQgCj$)=Z?AG*5Yf7eASXK5SIwhBBJpeg6 z<&TKIQwf7{Qr7xbkNPUYnj+@97KBUq`eDh0MFH zd^l-l^oz_c$#|gFE=H(OsJxE~n6JNQ#RUA{i|}PyEASKuYa@~hj4rVuCTV^cWqHy0 z2RAa34r@_g520XyprfpckFdHoicUiVjKKFsJr|t_z~~v)7d<^hxPVM_gxE4IHm8tC zCDhEj6V^TQ}#fL4rXyIIcyNNTc6a(4oRWiMTf z=le}5!QF_N(%1$dpl{;FafZY0%Vu(<^Z{_eBl22c#krIKNDtf*0BKqfn%+4E`Wrw< zr;7mDD$>!)3(W%xYB2==j2K!*+Fh(~E*>t{3a+1`uXzg0-nO01t$!MFaQIxX{VSvg zU1|Vm;e7bM14>g5?xv5xj#uMxg8cnGB-q9c%9{DHH!>b&Z!VG2{T*kN76m3A4%X(# zm7=2cKUXwBC90)C{w450NM^wbG6w`3&oyq)%vD{LX&V&8ysULSJGI*D*;xC#n^ohc zh)c8psKW--VZ#H#nV;8?BOve@XXR8_!RfxKz4M(EG12=;5SEh^$X^KlhfgLCXfLSy zi@dyX;{jp>5UM6JtVV*T=vFNS~C7g@B`*V8i;GVt=QD5l1MGCreL#tI1j#qw`}OnE5QV2Mr& z$A1&So0?kVma>)-S5zlPqyI;8Q}Wisfn-JZ)8^ZEbqJXDm^&Is2~;bV@pVz%`R0&h z@2k3-OUc2dxxh=ba|Y_m)$OCyx-OWti2#aMKFGyO%#mBu^(3>v$#nkKO_AE@nO8ai zPJ2fA;RPnh5%iCoD2O@zXcj++nGEdp2+Y=)#w$Y-9|1~x1$re(6XmD$AAZ=F#vs$v zFA36P2YsN95)r8tHxw=A#C&{*pHc1)OXjA0_5`|OGxAU4}Z5jLLpH6=SxLnP6Zn5;v zrzIs*dGya$-$d@?1Z}BtvcBo}yy`Oboxa(?usCTyRPg+S9F|W_EPe#Z;KT$eVhhQj zW(RwCUY~BI%}*0&_RZ9`_gtwta(_83;M!!8^>iwVNWQmTytl>^>PCASG1P6V~`3`~6j5ob7I#R%$=R@3@MAl4yb;9M_=N6T_<(^s|;R zW^+WYU{-4@zv2a7h5hx)`)sc#8mf^{VP?QE5SOOq3`Ix+)IL}1beYUfj6o;k>dpm4 zlky>g7E_}^#L`pIy;MNZR1c%ugV{(BmUv_%`kplbC=CmAVM-bA4j2oGB>A~Zz2ZAC z+uCO2bTRkcxdVCJG-dsL6e&O%cDX|v&znj8h{!RTDx$S7ui>oH_Raj&dK5{D&XP7J?>NS`9QSDiPHc?qFNvzA`iXv?Rrfq zJ;xxAIAxRJm2ZYYB;H^}enP=&ayROC7enAN%UlVIRO24dJt8`#rT!6-pAZo^gco<^hkJ+pPqodnE;Ip zFJUGsy}p#s2Z)de7m?3JXTe1v%-R9r?+3#&u>xUHNPY5d*P`NGqs=I{Rw4rm2Dd_$ z$`?I1nFK z(p;)j#)qHN%Ma&1R>XZQIvG(B8=_Z$Pzh?F5bpPdxXj>yKBaFmfe6tA14<8V0i}6i zLy>8bX!L-nCimqPpb#I3GO2|zuxus?=lK~}=z$D@1_Bns5j8F(!2wd+yaZ3GrH+RHuT}UgQxDb*$PhRFubl!;} zV1Nkcl!@q-n~)TRn2G-86g!u0zQt`$W5dxoAVfNrA~~$naOtNB*oc0~fy@1yL;(*4 zBg8MbUBy&+M7cMo(V&0JaJb)1FgzQ}cg=ldl~z!4 zLzh<&G9L>G>2XV(K7BJK1Sz%gy`|lc>UUr6g4Nxv?S1jcEK#3VzZe|$v~jVwI^Uca z|AudOrwy1snL_uD_=iM^82Xsk*KXipy;1Y}7w1>k)j^6IO3ZZJ@+MaZn!sUF#FV>A zvC<`s6gO0dtiknWF-ED7_U9K0Z_cMVxG0oOk^%0BGo@-;(&U2EsXYgKCo|tXPE2<+ zN{SU^Qut7$l0sJ?=em_|qvZaev_N+c443qoSE!k9^MldnCE5xkhmi`LEdzIIifW(G z{b{4*l!SR_cD9iiM5RLbAMN?Nih#Xs%@1Sr3eXXf3Yy7g%T1W(=p1kw)#-xrZKo-&#C z8_wnq<~u!WXYD_ta=63-Vk#ePY>t$fp0q!M{NZGr{9*cG$9X->Utq;;2Z)|1j)4w0Un%0`%qqYMhOzs9U83&H?l(sz^d3#A{Lp%1m=qAQ===VF`s! zsU6rusR)3w+KWqs4uuYBgb$TdyF<``|J=-XLL>*$(FEvPn3L$REnM$m;`XvFJ zhiw9r%7u!WF6pG)7t8c*Iu-^VnIS?Crx?_gfxbW$)as)C!@$wkSYuX?)^5iL$7(#m zdS@&_d7h`n2^a#BtsBFz1c)a zW4^IvAbufObQo|ULlbF7NT?kmEwo#lR7vK&3`r5fA2(!@N>KuaJXDrI3?YWZ88h`o zgK<%e{n!{Kjl~$`8MH%{$vB~tjfBX}Kw;9DwEy@d7z!K!^ue|C!-H!=+)%M_TBxGL zN?|B0lOgjBYv$*_4aGX#bU-@{+18Eu zAm{$A2x;d1`v>m_7qc9;q5o32f0-W2#z;F``v1L#C9)0CKVsTcT9wT2Nzz|@j zMGPKxOW9h%+~BQC2YOWMHNQSwpHXUK1++X5X)|K$!UZ%*L4dT%^-!%~Nw|}Le;b&p z-kBy85$<)47UmtO^AQD=e=e_}w0d_tr*nDzeSVD#+hOZ=tn!re!s)(*RK`C|?!58TpB$Dl+`UVf5m0s{k` z_np%RH8tMZzZCMk=$9B;HY7k{5qWGfJs?Cw(m`0bC*BRN)75_3@3k_U`%2WYb^jXY#5b{%p)L71p z$Ec7kv2S%`&)SR!O4*D)k;V^+O|iAdhv%dDcWNy!UW9~wBs<%k&w~Z)bCQLLHQZ(Q z7{PfeYk=>eg9Mm=bgg4;>7o4-W0M(CW=1T^s@gIC#9&4rO{4LF^k7dQLw~s%)1Kgz zsBa&(^}LBqKuY38%&btuF`sB!KLk_aUghZR!+BaOh9cHgJHzo6$%B-)N#{F$h zL(kk+QgUa`FWX0!M@oK&_x=6r-?Cr^WlY@=I3tSmYk`- zEgmiTY`qg@D9Msk^Xal~m@YbJNl~(875##eP+1YoEWy+;*uCT+3Mbg!*-(ADvW;Py zY7N7f<1Q{TOm)WtKli5IF_@~^tF1f!DDfe$;>gGpPEf8{;KNFF@c8FUgBOAsNIT}t zY^580nrAv5zrQo}18;`%9Sd!+aB$N~NKiJ%32! zuCxga`~=jJT)6cBQW&y&f^7d{sC{e%bVf)Zb2^@x@14nZpRA4}TIFn?1+%mtNh^_Ko zt-9lknpMPWU&`gBpBgBO&qt~N#$AuW9QfpUo|pTok58lGGNJ=TN`x zZkl>Cy*7;jLiKvo2+{+=0Wmlr^#5BP^+n(_8#NBd74(X;;~TkKPB4zYrfY#h7V-&Q z+>}lE$?Puj^j7<%v%!GvSQN-=;lOJlV(;2+dU{&!qoD__>XDdZ)#hQ}SR#^AY3Zc> zeaAbcHxY%Brw*QmDIXv&V0AioOF5LI7H>o_I}Y|vJ+eOJ^o7Sm8Tpjdbw9q_;phBZ z=^Psu``+!HR+cBXw%U8i9r<7Z5c+8mIQnuQTa2L9f1J}Lm{0PIAg(9VA|;STP3tu7 z^6LCT@$tL&(Yde3D4#{bLE_X&~!xCTcCo_V)g&Kq+P|*D%larI{ z>i8>6%MY~gU>67ZM#IH47+!UPa z?Daj_ML8sxkAZy$Q8gB!$TJeAzc-Ew1`ckdWF%4`#FV~k-uS8D>Y zBmWq#kk!-Eofk9C!}IoUyrATB2KKj2cGr89cNEm+ZsWTXZ%c+v$uK$&hYm}zjlurR zfgks`Lrn=qf)&JtZJG)yKMK?f1a$=!qNsIy4>I;JhCB)J5Ac6k{~b}mfESLpLeiZ` zmN>%r*-~~Zyx(btGFCMw?^4`8oXxy{FZzBrYG#zR=#+G+cE4#g{95+p>vQegku? zXA*sZPq45{#!L%!>c7z3p%u0X-X3+BCl34VicI~Lw(&*v)xBNnF(1x~Nnw)z^4h$c z{rxM{JQY|Odl@e;56~)7-?tpR?ZEAh$FUfPuku&w@*CDPUtNg^5 zI3n49vegIErKIIcLUT7=;vBw^8k5rzEX=VCTj{mziOwYqyc#Kijg zN2t#Xil3r`p~LOq_1mMhd>L(3wfD}a#~NjX9i^n@Um1ItJ|<`?bN!;Ddl`GJH8e93 zNZ8eKkcC?9cEwZ0a9isz?zJLqm4XFuEinccL% zR^2|z9!^)MBRC+a_vIC2opNC7#ArR1j@iSy$Fgp=&X}Z|K;&`N;~ncAORoIn7yLI; z?Sz>k(icLno?Gr*R$!(tlSI>INruO!kFAbXY>oSi`>hzQnpI2@x-VaO%-3LQ4RK~o z+FRqhJ9zQ9S>;2Qs_c#=!Xz9n1BREsMXU9AT)XSI-aIQS{-?=zv*lP%EVy&R5hZqf zQ@+If5-eo5J_Rp#d=ga3NN8>9U5_Due37fr{LcPMrob@v=$|{+7br?6tY8!M0j28phxvZ*Jmsdj) zqekUtkF7iYzD-(UKKQzYZ!7Ko^4DLScR2g4aE27H)7}*SC5at(68`O}a6zq;#fXYM zWA!W7Nj2Vvp{7@gT8ZcEW4pS0Synv;D z|ELI_gkE7*{i*J~>vQ)T2-RR$NaYCE00@ktN{a*GegjDt4nR*`V@{BKD>Rm%zd_GK z$HPN6b|L zWrjaA^_z`|o10shgfBs`Y#^~)$SnUX>r>tJ4^CT-JQbQ0so;o7J=y5kug6&tyT`M3 zPIjCr5s|d>2QBXe#W2G{L;d^%5=z%-YzKY*JXWdM{gzo#rJ6TbD5cS)2X7^^o2{sZ zFmwGBR<=LLsY-t<_k3(*0{V&g_~i5gKx=hz(}20SsQ!X6h=4Ou z`_Q3lf1voaKW(*};G}^!wSlJC<(#8$6P$zlrwUAzR>YO>g|!Mjd`dBU)S^zfzha4w zj$Ro91y~hCqvC80jYT|){IaeSbHI+ARjT-MLk+Za0!AgG4VZOEKoS&waN z03C@}aCT#Pn}glSWP3(E*I&Y2z;oM|IMsdf*T>1(nF%db9r1cA!=Ac0m=LChrGIAX zT*};b%cM2e6b?G72+ZB$+>F1}863w^#$ic6clV4tJa0Ewg)t_vX4;I@-r3m`40rkB z`d6Eqi-|U*lS-sTbSbWl76%s}KWk4u3s0B@g=CYqE{b{K6So$NTGsH1<4Lya=GnYQ zYOZ7*f8DRnb;s(Zw;d~^_AxSTdhps-9b{W)(}K?C(rvLLQ;jwn%d%pK{*Olafr4$k z2uwkTL%F-;uRc^Jt-UbDSBFHvR3J|N5pP9LE^|#b%$NHFD(v>gII7h4?5m}F%ciDv zYk8pVh^ZNG)_}IuD1?hG52>7EhU%8HI5atI>Q?Qh{>qRggeq_@MQ8Zk{bZR4qw<5+ z6LAK3AXofLWl0I1HZC3Hi+@HL^fxdc8mi5&ZKypX(G}EXvy`O31J-JM*6{rccYA;F zgy^#2f57JnLT`QW{G^M}UGi;7iHTU2at`@LIM_dD#4w_lJ3Qi6oX>3zSdPq4)Vr-5 z#sJCli>EA$O+!%#MCNE#>HG z=UWca;$=zfdqEC{2K@8(_O=^EB6FMc1}rMb@i4~2A7fCLn{{OX^G*dvC9piWQ`~Pk zjOm#qKh3kPWsH?W=+a^42`}*;B_}1%dE9B|>Lo3Y9_EdzjoWIn5{1b0$LUl#e#=dd zD=RD8*o=;c(VNnz*F-iMAz~2HzL^4F1%mO!--||be3~(S`Frxn1pgSHe8zLX@6IK< z&tzCfKB&mAWnn}+&$4E+(&Q!~V1qsIN47)wXc!kuoF%FHQmLZEhwIYw?6nLIvOeAU zyS%}yVg6K1>h~xEMqvLg8smyXO<>-z7#YEkh&ioK!xbMuq!mp6W~@O7rd%F0)}u~4 zTXB6<@_mD@Zs=lRiDR%_iTbm=_C+^OlQ3Qg;@F^!|yVwYsv@9@dd%)*SuVKFwty0;}sYVNxJw%$}BSt)NsJGd}- z=t-`L91Dx#(R<$}MP)4mP1?z$c{gA&^A90pSRV+#JiyoO>v$j8#jd*&9R%BZ?=p~>ai}Sh7N}EjXM6MVS zVPRW8uqNcns8O-YsmYrjpN|W@{&qy-)uF zFQR4p{6az8ylpMj z{jW(Gst-zMo2kanSG4@d+H&%i;y`o4+aWvib)c<;-yW_1ZP>YY6Y@(N=d%w;CU5j8+E8;7@YYgAv z#X%QU7X!aN{?V!jH|a}>iHjMZp5=ABwaRrFf%{R1n)ZJ@I!pit2*b$^b*m3r?&SR` zk`&$|v?4$&bh4UnDp`?2&5V7=X|j0WVmSt>OYY=d=yZ11@55f^RT!e$Sn2Lr_L0&1 zq$m46q*YBMnM1(}&uyp2vf;dg_QLN7V#r`Ald*Q&O-vn2oa4?SxX zNn*?C=>c7tDX}Eb#frBlmapss@X6cZp8TV+lwsBzt3cPVnDD}odui_B-gC&=8#%R8Y@BIr&&O^_LI1? z^fkU~#zveyH@W5Sa)qqntrL?ny<`Q`0Z6Yw$P%}|zR}{evJs>CqPJ*)^0d9Rd4y8l zC^=ro)Jj^61hVQ*e!x>aR;?_(kb0>m)Y@~-$&=tkegA-yf~5(m`fT7|A#m@DH<&&H zW*lSHWe5@z6V;e+24}dS>N{Q!)VpE@^QEu|g3&pZ@{#tRG$g literal 0 HcmV?d00001