From f1ca5ce8826d1c2d4c116ec0d6d77e6dc0cc7a78 Mon Sep 17 00:00:00 2001 From: Clifford Ressel Date: Thu, 10 Sep 2026 22:11:08 -0400 Subject: [PATCH 1/4] feat(tui-components): add animated backgrounds and profiling storybook --- .../motion-background/environment.txt | 64 ++++ .../motion-background/methodology.md | 86 +++++ docs/performance/motion-comparison/README.md | 99 +++++ .../current-120x40-default-0.csv | 151 ++++++++ .../current-120x40-default-1.csv | 151 ++++++++ .../current-120x40-muster-0.csv | 151 ++++++++ .../current-120x40-muster-1.csv | 151 ++++++++ .../current-240x80-default-0.csv | 151 ++++++++ .../current-240x80-default-1.csv | 151 ++++++++ .../current-240x80-muster-0.csv | 151 ++++++++ .../current-240x80-muster-1.csv | 151 ++++++++ .../motion-comparison/metadata.json | 261 +++++++++++++ docs/performance/motion-comparison/run.py | 35 ++ .../performance/motion-comparison/summary.csv | 9 + .../worktree-120x40-default-0.csv | 151 ++++++++ .../worktree-120x40-default-1.csv | 151 ++++++++ .../worktree-120x40-muster-0.csv | 151 ++++++++ .../worktree-120x40-muster-1.csv | 151 ++++++++ .../worktree-240x80-default-0.csv | 151 ++++++++ .../worktree-240x80-default-1.csv | 151 ++++++++ .../worktree-240x80-muster-0.csv | 151 ++++++++ .../worktree-240x80-muster-1.csv | 151 ++++++++ docs/reference/motion-background.md | 106 ++++++ nori-rs/tui-components/Cargo.toml | 4 + nori-rs/tui-components/DESIGN.md | 17 + nori-rs/tui-components/README.md | 11 + nori-rs/tui-components/docs.md | 12 + nori-rs/tui-components/examples/README.md | 6 + .../examples/motion_storybook.rs | 106 ++++++ .../examples/motion_storybook/README.md | 61 +++ .../examples/motion_storybook/e2e.rs | 56 +++ .../examples/motion_storybook/profile.rs | 243 ++++++++++++ ...orybook_motion__muster_braille_100x34.snap | 38 ++ ...torybook_motion__muster_braille_36x20.snap | 24 ++ .../storybook_motion__muster_dots_100x34.snap | 38 ++ .../storybook_motion__muster_dots_36x20.snap | 24 ++ .../storybook_motion__muster_zoom_100x34.snap | 38 ++ .../storybook_motion__muster_zoom_36x20.snap | 24 ++ ...rybook_motion__platoon_braille_100x34.snap | 38 ++ ...orybook_motion__platoon_braille_36x20.snap | 24 ++ ...storybook_motion__platoon_dots_100x34.snap | 38 ++ .../storybook_motion__platoon_dots_36x20.snap | 24 ++ ...storybook_motion__platoon_zoom_100x34.snap | 38 ++ ...book_motion__platoon_zoom_100x34_ansi.snap | 37 ++ ...book_motion__platoon_zoom_100x34_text.snap | 37 ++ .../storybook_motion__platoon_zoom_36x20.snap | 24 ++ .../examples/motion_storybook/story.rs | 67 ++++ .../scripts/summarize-motion-profile.py | 72 ++++ nori-rs/tui-components/src/lib.rs | 6 + nori-rs/tui-components/src/motion/fields.rs | 349 ++++++++++++++++++ nori-rs/tui-components/src/motion/mod.rs | 272 ++++++++++++++ ...nents__motion__tests__blueprint_32x12.snap | 16 + ...nents__motion__tests__blueprint_80x24.snap | 28 ++ ...nents__motion__tests__creatures_32x12.snap | 16 + ...nents__motion__tests__creatures_80x24.snap | 28 ++ ...components__motion__tests__dots_32x12.snap | 16 + ...components__motion__tests__dots_80x24.snap | 28 ++ ...i_tui_components__motion__tests__fade.snap | 22 ++ ...ents__motion__tests__formations_32x12.snap | 16 + ...ents__motion__tests__formations_80x24.snap | 28 ++ ...nents__motion__tests__sandboxes_32x12.snap | 16 + ...nents__motion__tests__sandboxes_80x24.snap | 28 ++ ...i_tui_components__motion__tests__zoom.snap | 22 ++ nori-rs/tui-components/src/motion/tests.rs | 184 +++++++++ 64 files changed, 5252 insertions(+) create mode 100644 docs/performance/motion-background/environment.txt create mode 100644 docs/performance/motion-background/methodology.md create mode 100644 docs/performance/motion-comparison/README.md create mode 100644 docs/performance/motion-comparison/current-120x40-default-0.csv create mode 100644 docs/performance/motion-comparison/current-120x40-default-1.csv create mode 100644 docs/performance/motion-comparison/current-120x40-muster-0.csv create mode 100644 docs/performance/motion-comparison/current-120x40-muster-1.csv create mode 100644 docs/performance/motion-comparison/current-240x80-default-0.csv create mode 100644 docs/performance/motion-comparison/current-240x80-default-1.csv create mode 100644 docs/performance/motion-comparison/current-240x80-muster-0.csv create mode 100644 docs/performance/motion-comparison/current-240x80-muster-1.csv create mode 100644 docs/performance/motion-comparison/metadata.json create mode 100644 docs/performance/motion-comparison/run.py create mode 100644 docs/performance/motion-comparison/summary.csv create mode 100644 docs/performance/motion-comparison/worktree-120x40-default-0.csv create mode 100644 docs/performance/motion-comparison/worktree-120x40-default-1.csv create mode 100644 docs/performance/motion-comparison/worktree-120x40-muster-0.csv create mode 100644 docs/performance/motion-comparison/worktree-120x40-muster-1.csv create mode 100644 docs/performance/motion-comparison/worktree-240x80-default-0.csv create mode 100644 docs/performance/motion-comparison/worktree-240x80-default-1.csv create mode 100644 docs/performance/motion-comparison/worktree-240x80-muster-0.csv create mode 100644 docs/performance/motion-comparison/worktree-240x80-muster-1.csv create mode 100644 docs/reference/motion-background.md create mode 100644 nori-rs/tui-components/examples/motion_storybook.rs create mode 100644 nori-rs/tui-components/examples/motion_storybook/README.md create mode 100644 nori-rs/tui-components/examples/motion_storybook/e2e.rs create mode 100644 nori-rs/tui-components/examples/motion_storybook/profile.rs create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_braille_100x34.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_braille_36x20.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_dots_100x34.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_dots_36x20.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_100x34.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_36x20.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_braille_100x34.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_braille_36x20.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_dots_100x34.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_dots_36x20.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_100x34.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_100x34_ansi.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_100x34_text.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_36x20.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/story.rs create mode 100644 nori-rs/tui-components/scripts/summarize-motion-profile.py create mode 100644 nori-rs/tui-components/src/motion/fields.rs create mode 100644 nori-rs/tui-components/src/motion/mod.rs create mode 100644 nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__blueprint_32x12.snap create mode 100644 nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__blueprint_80x24.snap create mode 100644 nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__creatures_32x12.snap create mode 100644 nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__creatures_80x24.snap create mode 100644 nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__dots_32x12.snap create mode 100644 nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__dots_80x24.snap create mode 100644 nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__fade.snap create mode 100644 nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__formations_32x12.snap create mode 100644 nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__formations_80x24.snap create mode 100644 nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__sandboxes_32x12.snap create mode 100644 nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__sandboxes_80x24.snap create mode 100644 nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__zoom.snap create mode 100644 nori-rs/tui-components/src/motion/tests.rs diff --git a/docs/performance/motion-background/environment.txt b/docs/performance/motion-background/environment.txt new file mode 100644 index 000000000..0f839c448 --- /dev/null +++ b/docs/performance/motion-background/environment.txt @@ -0,0 +1,64 @@ +2026-09-11T00:25:01.830518+00:00 +Linux anubis 7.1.5-76070105-generic #202607241434~1787955023~24.04~38a419f SMP PREEMPT_DYNAMIC Fri A x86_64 x86_64 x86_64 GNU/Linux +Architecture: x86_64 +CPU op-mode(s): 32-bit, 64-bit +Address sizes: 46 bits physical, 48 bits virtual +Byte Order: Little Endian +CPU(s): 8 +On-line CPU(s) list: 0-7 +Vendor ID: GenuineIntel +Model name: Intel(R) Core(TM) Ultra 5 325 +CPU family: 6 +Model: 204 +Thread(s) per core: 1 +Core(s) per socket: 8 +Socket(s): 1 +Stepping: 3 +CPU(s) scaling MHz: 98% +CPU max MHz: 2100.0000 +CPU min MHz: 400.0000 +BogoMIPS: 6220.80 +Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdt_a rdseed adx smap clflushopt clwb intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves split_lock_detect user_shstk avx_vnni lass fred lam wbnoinvd dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp hwp_pkg_req hfi vnmi umip pku ospke waitpkg gfni vaes vpclmulqdq rdpid bus_lock_detect movdiri movdir64b fsrm md_clear serialize arch_lbr ibt flush_l1d arch_capabilities +Virtualization: VT-x +L1d cache: 320 KiB (8 instances) +L1i cache: 512 KiB (8 instances) +L2 cache: 16 MiB (5 instances) +L3 cache: 12 MiB (1 instance) +NUMA node(s): 1 +NUMA node0 CPU(s): 0-7 +Vulnerability Gather data sampling: Not affected +Vulnerability Ghostwrite: Not affected +Vulnerability Indirect target selection: Not affected +Vulnerability Itlb multihit: Not affected +Vulnerability L1tf: Not affected +Vulnerability Mds: Not affected +Vulnerability Meltdown: Not affected +Vulnerability Mmio stale data: Not affected +Vulnerability Old microcode: Not affected +Vulnerability Reg file data sampling: Not affected +Vulnerability Retbleed: Not affected +Vulnerability Spec rstack overflow: Not affected +Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl +Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization +Vulnerability Spectre v2: Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS Not affected; BHI BHI_DIS_S +Vulnerability Srbds: Not affected +Vulnerability Tsa: Not affected +Vulnerability Tsx async abort: Not affected +Vulnerability Vmscape: Not affected + +Rust 1.90.0; edition/workspace configuration unchanged. +Build: CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=cc RUSTFLAGS="" +Release overrides: CARGO_PROFILE_RELEASE_DEBUG=line-tables-only CARGO_PROFILE_RELEASE_STRIP=none +Release still uses opt-level=3, fat LTO, codegen-units=1. +Toolchain and dependencies installed under /tmp; clang/mold unavailable on this host. +Run environment: NO_COLOR unset, TERM=xterm-256color, COLORTERM=truecolor. +Shared host; no affinity or priority changes. +SHA256 310e2455b6abb6e44976d4ad2aa7b5f82b982ae46382d96e16094d8b6e6f572d target/debug/examples/motion_storybook +SHA256 415b36966afa1a414256d3d6f6d24033d7bb9bc20e76d6ac0f2ba319877b6a74 target/release/examples/motion_storybook +SHA256 f65b0b0b45142d0cda1a786264dca9547adf88a3a7740437a0f78f3722877540 tui-components/src/motion/fields.rs +SHA256 b23c9fef745d6469e193e830aa208643f295b841f15cf45a2536304d7a89ff56 tui-components/src/motion/mod.rs +SHA256 87405be278af80b04eee1700e20304c67e71beef8bcb365de4c0a792a0309ede tui-components/src/motion/tests.rs +SHA256 26c8c855e5fa18585da6640239393b2de2a84af7cfbcc69636042103a83fa74e tui-components/examples/motion_storybook/e2e.rs +SHA256 e83e867038912687a281e5221feacdc399bf9e98c443e3024f6763929751792c tui-components/examples/motion_storybook/profile.rs +SHA256 0aba99815d6bdc8f4e04a2cdc6236299bd9b3572edfd34daecaf1412a02e2698 tui-components/examples/motion_storybook/story.rs +SHA256 bed6a3f94f7812e7416bff9e57371c8803dde6412560f7281c99c0c70d42cae6 tui-components/examples/motion_storybook.rs diff --git a/docs/performance/motion-background/methodology.md b/docs/performance/motion-background/methodology.md new file mode 100644 index 000000000..e3b5348b5 --- /dev/null +++ b/docs/performance/motion-background/methodology.md @@ -0,0 +1,86 @@ +# Motion profiling methodology + +This is a baseline investigation of the stripped `motion_storybook`, before +optimizing field geometry, sampling, colors, or terminal output. The example +runs only Dots ↔ Formations (three seconds each way), on the whole screen. +Two policies pin the destination to Platoon or Muster; the default public +component still uses the ambient cycle. No former login/card UI is rendered. + +## Measurements + +- **Headless:** real widget → Ratatui lazy buffer diff → Crossterm encoding into + a byte-counting sink → buffer reset. No test backend, simplified field model, + mocked encoder, OS output, sleeping, or terminal parser. A separate diff-only + scan is a warm-cache diagnostic, excluded from pipeline total. It must not be + treated as an exact additive split of the fused diff/encoder pass. +- **Live:** actual `Terminal>::draw` through a PTY into + isolated tmux, recording widget time, total draw time, the remainder outside + the widget, and start-to-start intervals. The remainder includes terminal + size queries, buffer diff, ANSI encoding, write/flush, cursor handling, and + buffer reset. Timing is accumulated in memory and saved only after alternate + screen restoration. No per-cell timing is added to the renderer. +- **CPU sampling:** optimized build with release optimization/LTO unchanged, + `debug=line-tables-only`, `strip=none`, using Linux perf userspace cycles and + DWARF call stacks. Instruction samples identify hot functions/source lines; + they are separate runs, not mixed into the wall-clock timing data. + +A completed write is not proof that a graphical terminal displayed that frame. +The live results measure production throughput and tmux/PTY backpressure, not +monitor refresh, compositor presentation, or the user's terminal's displayed FPS. +The headless sink's Write-call count is not a system-call count. + +## Sampling protocol + +All cases run serially after builds/tests finish, on the same shared host, with +`NO_COLOR` unset, `TERM=xterm-256color`, `COLORTERM=truecolor`. No affinity, +priority, power policy, terminal setting, or system security setting is changed. + +The headless matrix has debug/release × 80×24/120×40/200×60/320×100 × +Platoon/Muster × three repetitions. Each run warms a full six-second loop, then +records 300 deterministic frames at a simulated 25 FPS (two loops). Case order +is shuffled with seed 926. The first measured full repaint is excluded from +summaries, leaving 897 frames per configuration. The clock resets only between +runs, not at zoom reversals. + +The live matrix records 300 frames per case at 25 FPS for debug/release × +120×40/200×60/320×100 × both variants. Additional release 200×60 cases request +60 FPS. Geometry advances by actual elapsed time, preserving the original +start-to-start scheduler and its behavior under overload. As a consequence, +heavy phases produce fewer frames when late; headless and live percentile +populations are not identical. First live frames are excluded from summaries. + +The report uses nearest-rank percentiles. `work_over_budget_pct` compares work +time with 1/FPS. `intervals_over_1_5_budget_pct` counts conspicuously long +start-to-start gaps, allowing small scheduler jitter. Neither is claimed to be +a measured count of display-dropped frames. `produced_fps` is the reciprocal of +mean start-to-start interval. Phase bands are early [0,.45), middle [.45,.75), +and late [.75,1]. + +## Reproduce + +From `cli/nori-rs`, build both example profiles first, then run without Cargo in +the timed region: + +```sh +cargo build -p nori-tui-components --example motion_storybook +CARGO_PROFILE_RELEASE_DEBUG=line-tables-only CARGO_PROFILE_RELEASE_STRIP=none \ + cargo build --release -p nori-tui-components --example motion_storybook + +env -u NO_COLOR TERM=xterm-256color COLORTERM=truecolor \ + target/release/examples/motion_storybook --bench --size 200x60 \ + --frames 300 --profile /tmp/platoon.csv + +env -u NO_COLOR TERM=xterm-256color COLORTERM=truecolor \ + target/release/examples/motion_storybook --bench --size 200x60 \ + --muster --frames 300 --profile /tmp/muster.csv + +# In the terminal you want to evaluate, sized as desired: +env -u NO_COLOR TERM=xterm-256color COLORTERM=truecolor \ + target/release/examples/motion_storybook --muster --frames 300 \ + --profile /tmp/muster-live.csv + +python3 tui-components/scripts/summarize-motion-profile.py \ + /tmp/platoon.csv /tmp/muster.csv /tmp/muster-live.csv --output /tmp/summary +``` + +The summary tool also accepts `.csv.gz` inputs in the saved `data/` directory. diff --git a/docs/performance/motion-comparison/README.md b/docs/performance/motion-comparison/README.md new file mode 100644 index 000000000..1a447ac66 --- /dev/null +++ b/docs/performance/motion-comparison/README.md @@ -0,0 +1,99 @@ +# Comparison of the two uncommitted motion implementations + +Measured September 10, 2026. Both checkouts have base commit +`fd92abe23e6c94c66ea6ef7afa94678895ecc8f7`; their motion implementations are +uncommitted additions. No component code was changed for this comparison. + +Current: `/home/clifford/Documents/source/nori/cli`. +Other: `/home/clifford/.codex/worktrees/b08b/nori/cli/.worktrees/animated-onboarding`, +branch `codex/animated-onboarding`. + +## Measurements + +Run `python3 run.py` from any directory to reproduce against the existing release +binaries. It runs sequentially, shuffling 16 cases with seed 910: two sizes, +two variants, two implementations, two repetitions. Each process records 150 +frames at simulated 25 FPS, excluding its first measured frame from summaries. +There is no live terminal, CPU sampling, rebuild, or concurrent benchmark. +Raw CSVs, the summary, exact commands, and binary SHA256 hashes are saved here. + +| Size / variant | Current median / p95 ms | Worktree median / p95 ms | +|---|---:|---:| +| 120x40 default | 0.86 / 5.83 | 3.42 / 6.86 | +| 120x40 muster | 0.91 / 6.38 | 3.97 / 8.16 | +| 240x80 default | 3.92 / 24.67 | 14.01 / 29.59 | +| 240x80 muster | 3.04 / 23.31 | 15.38 / 28.21 | + +These are headless widget + buffer diff + ANSI encoding + buffer reset timings, +not displayed FPS. No retained frame exceeded 40 ms in this small run. This does +not supersede the earlier live results or prove either version is smooth. +Absolute timings differ substantially from the earlier runs; compare the two +implementations within this run rather than treating the difference from old +numbers as a code improvement. There were no new rendering optimizations. + +This is a comparison of the existing examples, not identical visual work: + +- Current pins Platoon or Muster at ambient time 12s. Other starts at time 0s + (quiet field) or 94s (muster), retaining its ambient cycle. +- Their noise/hash, muster shape, palettes, and sampling schedules differ. +- Current warms a full loop. Other warms ten copies of its initial frame. +- Current streams the actual lazy diff to Crossterm. Other collects the diff + into a new Vec to time diff and encoding independently, adding allocation + and separating operations that are fused in live rendering. Widget-only + p95 is also lower in current, so the harness difference is not the whole gap. +- Build provenance was not normalized by rebuilding; these are existing release + binaries, with hashes recorded. Small sample count and shared-host scheduling + limit precision. + +Current generated approximately 13–18% more ANSI bytes per frame in these cases. +Its finer palette and different pictures make that unsurprising, but the exact +cause was not isolated. A real terminal may favor the other implementation +more than these headless timings suggest. + +## Design assessment + +Both correctly leave terminal ownership, events, authentication, and scheduling +outside the reusable widget, and both have determinism/clipping/snapshot tests. +Neither creates a scene graph of heap-allocated objects per field sample. + +The worktree has the cleaner minimal animation interface: phase, explicit time, +and transition progress. Callers can select duration, easing, and seek directly. +It also separates zoom/formation geometry from tile/creature geometry. Its +four precomputed styles are simpler and cheaper than current's per-cell RGB +mixing. At the fully formed endpoint it skips the now-invisible island field; +current still calculates that field before blending with weight one. + +Current is more complete for integration: interruptible caller-held state, +custom theme-derived palette, an optional quiet region that avoids sampling +under a panel, ASCII fallback, and an explicit fixed formation selector. Its +Field object already computes scale and shape once per frame, where the other +source expresses zoom invariants inside the per-cell function. Current's +noise interpolation weights are outside the eight-corner loop. Compiler +optimization can affect the realized benefit of these source differences. + +Current's mandatory MotionState also hardcodes three seconds per adjacent phase +and exposes no direct seek/easing control. That is less flexible as the lowest +level component API. It is better treated as an optional controller over a +renderer accepting explicit time and transition position. + +The largest obvious workload difference is braille selection: at zoom 0.5, +current takes one sample per cell while the other takes eight. At zoom 0.75, +current averages 4.94 versus eight (over the Bayer pattern). Consequently, +current's much lower median is partly a different sampling/visual policy, +not a demonstration of an equivalently detailed renderer being four times faster. + +The worktree has stronger retained profiling evidence: compressed frame traces, +CPU profiles for quiet/muster/live runs, and syscall counts. Its separate +geometry mode compiles the actual geometry source. Current has more viewport +and FPS controls and a closer-to-live lazy-diff benchmark, but its earlier +raw traces were in temporary storage and are unavailable after the interruption. +These new comparison traces are persisted in the repository directory. + +## Recommendation + +Use current's frame context and integration capabilities, adopt the other +version's explicit-time/progress rendering API, and retain state transitions as +an optional helper. Preserve the geometry module split and endpoint early-out. +Choose one desired visual/sampling schedule before comparing optimizations. +Then measure frame/tile invariant reuse and output batching independently. +Neither existing branch resolves the large-terminal smoothness problem yet. diff --git a/docs/performance/motion-comparison/current-120x40-default-0.csv b/docs/performance/motion-comparison/current-120x40-default-0.csv new file mode 100644 index 000000000..3f88696a2 --- /dev/null +++ b/docs/performance/motion-comparison/current-120x40-default-0.csv @@ -0,0 +1,151 @@ +mode,variant,build,fps,frame,width,height,phase,direction,interval_us,widget_us,output_us,reset_us,total_us,diff_probe_us,changed_cells,ansi_bytes,write_calls +bench,platoon,release,25,0,120,40,0.000000,in,0.000,419.413,166.994,3.473,589.880,55.511,4800,51450,29735 +bench,platoon,release,25,1,120,40,0.013333,in,0.000,414.418,149.467,3.393,567.278,70.701,1772,37012,20857 +bench,platoon,release,25,2,120,40,0.026667,in,0.000,408.071,152.758,3.350,564.179,70.617,1826,37553,21213 +bench,platoon,release,25,3,120,40,0.040000,in,0.000,413.397,151.196,3.580,568.173,73.415,1797,38060,21558 +bench,platoon,release,25,4,120,40,0.053333,in,0.000,428.317,163.755,3.397,595.469,69.507,1852,39706,22468 +bench,platoon,release,25,5,120,40,0.066667,in,0.000,423.347,162.357,3.474,589.178,72.503,1847,39302,22257 +bench,platoon,release,25,6,120,40,0.080000,in,0.000,425.347,159.910,3.386,588.643,71.796,1877,40971,23194 +bench,platoon,release,25,7,120,40,0.093333,in,0.000,425.146,161.868,3.413,590.427,80.554,1928,41481,23520 +bench,platoon,release,25,8,120,40,0.106667,in,0.000,429.723,172.390,3.493,605.606,73.653,1889,41911,23741 +bench,platoon,release,25,9,120,40,0.120000,in,0.000,435.076,168.732,3.382,607.190,71.419,1940,41106,23342 +bench,platoon,release,25,10,120,40,0.133333,in,0.000,443.836,169.286,3.401,616.523,75.020,1944,43699,24775 +bench,platoon,release,25,11,120,40,0.146667,in,0.000,455.678,179.790,3.507,638.975,76.356,1984,43564,24708 +bench,platoon,release,25,12,120,40,0.160000,in,0.000,504.852,188.603,3.448,696.903,79.380,2036,45575,25905 +bench,platoon,release,25,13,120,40,0.173333,in,0.000,456.754,184.414,3.394,644.562,75.038,2080,44904,25612 +bench,platoon,release,25,14,120,40,0.186667,in,0.000,462.385,187.211,3.486,653.082,75.593,2091,45644,25962 +bench,platoon,release,25,15,120,40,0.200000,in,0.000,458.357,196.985,3.565,658.907,81.557,2113,47026,26709 +bench,platoon,release,25,16,120,40,0.213333,in,0.000,463.225,183.394,3.391,650.010,77.907,2167,48124,27372 +bench,platoon,release,25,17,120,40,0.226667,in,0.000,460.237,196.492,3.484,660.213,79.490,2160,48625,27696 +bench,platoon,release,25,18,120,40,0.240000,in,0.000,468.578,187.623,3.391,659.592,78.547,2161,49055,27962 +bench,platoon,release,25,19,120,40,0.253333,in,0.000,458.233,191.341,3.403,652.977,77.156,2239,51022,29051 +bench,platoon,release,25,20,120,40,0.266667,in,0.000,469.581,192.621,3.387,665.589,77.379,2225,50144,28553 +bench,platoon,release,25,21,120,40,0.280000,in,0.000,478.929,186.289,3.400,668.618,78.852,2213,49919,28473 +bench,platoon,release,25,22,120,40,0.293333,in,0.000,479.842,202.415,3.465,685.722,80.991,2288,52564,29965 +bench,platoon,release,25,23,120,40,0.306667,in,0.000,480.008,212.165,3.433,695.606,99.500,2328,53240,30408 +bench,platoon,release,25,24,120,40,0.320000,in,0.000,483.872,199.134,3.459,686.465,85.503,2353,53053,30336 +bench,platoon,release,25,25,120,40,0.333333,in,0.000,485.388,210.439,3.400,699.227,81.638,2366,54491,31137 +bench,platoon,release,25,26,120,40,0.346667,in,0.000,505.308,216.621,3.486,725.415,85.363,2385,54704,31235 +bench,platoon,release,25,27,120,40,0.360000,in,0.000,496.655,217.577,3.436,717.668,86.359,2431,56610,32318 +bench,platoon,release,25,28,120,40,0.373333,in,0.000,503.249,224.801,3.389,731.439,86.170,2554,60807,34778 +bench,platoon,release,25,29,120,40,0.386667,in,0.000,501.276,209.207,3.389,713.872,89.036,2608,58718,33703 +bench,platoon,release,25,30,120,40,0.400000,in,0.000,495.304,231.333,3.441,730.078,87.296,2525,59168,33788 +bench,platoon,release,25,31,120,40,0.413333,in,0.000,495.472,213.388,3.397,712.257,85.680,2552,58515,33517 +bench,platoon,release,25,32,120,40,0.426667,in,0.000,507.104,215.368,3.392,725.864,86.770,2624,60876,34809 +bench,platoon,release,25,33,120,40,0.440000,in,0.000,509.595,235.176,3.472,748.243,90.731,2606,61148,34999 +bench,platoon,release,25,34,120,40,0.453333,in,0.000,490.162,236.659,3.360,730.181,88.163,2634,61012,34946 +bench,platoon,release,25,35,120,40,0.466667,in,0.000,488.052,240.550,3.459,732.061,91.187,2734,64646,37022 +bench,platoon,release,25,36,120,40,0.480000,in,0.000,511.565,234.415,3.381,749.361,89.604,2623,61813,35421 +bench,platoon,release,25,37,120,40,0.493333,in,0.000,495.161,220.850,3.392,719.403,90.772,2682,64330,36862 +bench,platoon,release,25,38,120,40,0.506667,in,0.000,498.396,238.228,3.378,740.002,90.603,2659,62635,35936 +bench,platoon,release,25,39,120,40,0.520000,in,0.000,702.370,245.199,3.357,950.926,91.498,2720,63381,36276 +bench,platoon,release,25,40,120,40,0.533333,in,0.000,706.798,257.359,3.481,967.638,99.451,2767,68701,39220 +bench,platoon,release,25,41,120,40,0.546667,in,0.000,715.031,240.219,3.393,958.643,98.386,2839,69693,39811 +bench,platoon,release,25,42,120,40,0.560000,in,0.000,919.125,259.274,3.388,1181.787,120.568,2913,71530,40788 +bench,platoon,release,25,43,120,40,0.573333,in,0.000,911.647,256.975,3.386,1172.008,96.546,2856,67174,38542 +bench,platoon,release,25,44,120,40,0.586667,in,0.000,937.171,284.547,3.498,1225.216,102.982,3109,85317,48132 +bench,platoon,release,25,45,120,40,0.600000,in,0.000,1128.485,285.021,3.509,1417.015,109.669,3282,78684,44801 +bench,platoon,release,25,46,120,40,0.613333,in,0.000,1146.863,279.119,3.394,1429.376,106.123,3160,77334,43944 +bench,platoon,release,25,47,120,40,0.626667,in,0.000,1349.336,287.438,3.414,1640.188,103.347,3257,79258,44926 +bench,platoon,release,25,48,120,40,0.640000,in,0.000,1368.035,301.057,3.408,1672.500,107.294,3228,80902,45900 +bench,platoon,release,25,49,120,40,0.653333,in,0.000,1566.309,307.049,3.380,1876.738,113.340,3359,85982,48556 +bench,platoon,release,25,50,120,40,0.666667,in,0.000,1575.754,301.084,3.389,1880.227,109.656,3360,84869,47992 +bench,platoon,release,25,51,120,40,0.680000,in,0.000,1776.298,285.165,3.350,2064.813,112.999,3432,85323,48139 +bench,platoon,release,25,52,120,40,0.693333,in,0.000,2011.150,293.175,3.466,2307.791,110.253,3495,88708,49857 +bench,platoon,release,25,53,120,40,0.706667,in,0.000,1949.830,306.611,5.552,2261.993,104.364,3624,90921,51035 +bench,platoon,release,25,54,120,40,0.720000,in,0.000,2168.939,384.659,3.368,2556.966,102.915,3632,89823,50344 +bench,platoon,release,25,55,120,40,0.733333,in,0.000,2176.882,304.520,3.385,2484.787,106.188,3696,90255,50638 +bench,platoon,release,25,56,120,40,0.746667,in,0.000,2390.399,307.654,3.457,2701.510,105.646,3762,86993,48538 +bench,platoon,release,25,57,120,40,0.760000,in,0.000,3896.117,296.984,3.362,4196.463,103.589,3872,86077,47908 +bench,platoon,release,25,58,120,40,0.773333,in,0.000,3968.102,302.898,3.498,4274.498,107.023,3891,84450,46913 +bench,platoon,release,25,59,120,40,0.786667,in,0.000,4186.599,296.190,3.462,4486.251,106.491,3992,83152,45831 +bench,platoon,release,25,60,120,40,0.800000,in,0.000,4182.770,301.018,3.379,4487.167,101.650,3944,84492,46611 +bench,platoon,release,25,61,120,40,0.813333,in,0.000,4561.368,293.545,3.393,4858.306,101.467,3921,81973,44876 +bench,platoon,release,25,62,120,40,0.826667,in,0.000,4512.979,250.840,3.390,4767.209,100.348,3807,75024,41054 +bench,platoon,release,25,63,120,40,0.840000,in,0.000,4807.521,258.941,3.480,5069.942,102.942,3826,68099,36869 +bench,platoon,release,25,64,120,40,0.853333,in,0.000,4772.573,250.212,3.385,5026.170,105.822,3608,68072,37026 +bench,platoon,release,25,65,120,40,0.866667,in,0.000,5080.962,243.008,3.454,5327.424,103.347,3731,68424,37020 +bench,platoon,release,25,66,120,40,0.880000,in,0.000,5162.292,239.793,3.386,5405.471,103.121,3406,60904,32980 +bench,platoon,release,25,67,120,40,0.893333,in,0.000,5102.905,222.452,3.393,5328.750,103.418,3024,57283,31302 +bench,platoon,release,25,68,120,40,0.906667,in,0.000,5456.401,231.198,3.640,5691.239,104.932,3024,56223,30569 +bench,platoon,release,25,69,120,40,0.920000,in,0.000,5382.406,206.699,3.543,5592.648,100.545,2655,49006,26832 +bench,platoon,release,25,70,120,40,0.933333,in,0.000,5367.676,196.474,3.480,5567.630,100.663,2349,39941,21858 +bench,platoon,release,25,71,120,40,0.946667,in,0.000,5629.763,177.240,3.487,5810.490,93.361,1853,35207,19461 +bench,platoon,release,25,72,120,40,0.960000,in,0.000,5695.682,133.062,3.510,5832.254,83.869,1080,21137,11856 +bench,platoon,release,25,73,120,40,0.973333,in,0.000,5582.337,123.416,3.501,5709.254,79.971,744,16232,9095 +bench,platoon,release,25,74,120,40,0.986667,in,0.000,5504.116,92.886,3.493,5600.495,76.153,519,7973,4457 +bench,platoon,release,25,75,120,40,1.000000,out,0.000,5170.859,110.314,3.484,5284.657,77.887,805,14501,8093 +bench,platoon,release,25,76,120,40,0.986667,out,0.000,5545.597,101.698,3.485,5650.780,76.063,643,11391,6350 +bench,platoon,release,25,77,120,40,0.973333,out,0.000,5575.090,93.356,3.391,5671.837,75.295,494,7960,4417 +bench,platoon,release,25,78,120,40,0.960000,out,0.000,5727.440,116.873,3.487,5847.800,79.499,751,17331,9752 +bench,platoon,release,25,79,120,40,0.946667,out,0.000,5690.330,136.174,3.509,5830.013,83.741,1055,21716,12176 +bench,platoon,release,25,80,120,40,0.933333,out,0.000,5402.911,190.648,3.483,5597.042,92.976,1842,39886,22168 +bench,platoon,release,25,81,120,40,0.920000,out,0.000,5394.379,200.873,3.498,5598.750,100.225,2348,41712,22777 +bench,platoon,release,25,82,120,40,0.906667,out,0.000,5427.846,214.794,3.410,5646.050,101.049,2684,54873,30158 +bench,platoon,release,25,83,120,40,0.893333,out,0.000,5194.639,230.336,3.449,5428.424,106.051,3063,56424,30783 +bench,platoon,release,25,84,120,40,0.880000,out,0.000,5108.119,231.128,3.389,5342.636,104.520,3010,60453,33085 +bench,platoon,release,25,85,120,40,0.866667,out,0.000,5158.606,246.122,3.493,5408.221,105.106,3376,63963,34773 +bench,platoon,release,25,86,120,40,0.853333,out,0.000,4908.620,257.437,3.383,5169.440,103.420,3699,70777,38564 +bench,platoon,release,25,87,120,40,0.840000,out,0.000,4802.624,274.356,3.472,5080.452,105.904,3702,71931,39166 +bench,platoon,release,25,88,120,40,0.826667,out,0.000,4782.238,295.264,3.394,5080.896,100.442,3847,78048,42816 +bench,platoon,release,25,89,120,40,0.813333,out,0.000,4497.710,260.962,3.504,4762.176,103.041,3835,78966,43311 +bench,platoon,release,25,90,120,40,0.800000,out,0.000,4190.112,297.433,3.492,4491.037,104.915,3950,85921,47510 +bench,platoon,release,25,91,120,40,0.786667,out,0.000,4171.622,293.137,3.384,4468.143,103.364,3943,83307,45966 +bench,platoon,release,25,92,120,40,0.773333,out,0.000,3942.492,293.355,3.452,4239.299,106.689,4009,86957,48379 +bench,platoon,release,25,93,120,40,0.760000,out,0.000,3882.325,298.884,3.388,4184.597,103.866,3887,86095,47967 +bench,platoon,release,25,94,120,40,0.746667,out,0.000,2418.954,312.786,3.388,2735.128,105.005,3866,89066,49766 +bench,platoon,release,25,95,120,40,0.733333,out,0.000,2183.011,312.404,3.417,2498.832,103.252,3756,90927,51049 +bench,platoon,release,25,96,120,40,0.720000,out,0.000,2215.914,311.920,3.489,2531.323,105.023,3733,90782,50890 +bench,platoon,release,25,97,120,40,0.706667,out,0.000,1971.262,288.362,3.442,2263.066,103.677,3653,89951,50430 +bench,platoon,release,25,98,120,40,0.693333,out,0.000,2000.072,301.438,3.404,2304.914,102.815,3625,89636,50472 +bench,platoon,release,25,99,120,40,0.680000,out,0.000,1776.681,300.606,3.502,2080.789,107.999,3512,87194,49214 +bench,platoon,release,25,100,120,40,0.666667,out,0.000,1584.987,286.288,3.351,1874.626,106.247,3454,84385,47726 +bench,platoon,release,25,101,120,40,0.653333,out,0.000,1612.417,294.420,3.400,1910.237,105.289,3375,85223,48159 +bench,platoon,release,25,102,120,40,0.640000,out,0.000,1356.478,290.805,3.389,1650.672,141.259,3333,81863,46512 +bench,platoon,release,25,103,120,40,0.626667,out,0.000,1355.633,265.512,3.387,1624.532,105.552,3216,79424,45062 +bench,platoon,release,25,104,120,40,0.613333,out,0.000,1141.796,261.443,3.495,1406.734,103.023,3163,78589,44732 +bench,platoon,release,25,105,120,40,0.600000,out,0.000,1133.403,267.542,3.487,1404.432,106.300,3110,76932,43749 +bench,platoon,release,25,106,120,40,0.586667,out,0.000,935.296,276.653,3.513,1215.462,106.038,3240,86120,48741 +bench,platoon,release,25,107,120,40,0.573333,out,0.000,1037.102,246.609,3.496,1287.207,100.952,3001,70582,40520 +bench,platoon,release,25,108,120,40,0.560000,out,0.000,934.156,253.772,3.398,1191.326,99.561,2827,69999,39951 +bench,platoon,release,25,109,120,40,0.546667,out,0.000,763.165,264.406,3.388,1030.959,100.256,2850,69467,39741 +bench,platoon,release,25,110,120,40,0.533333,out,0.000,713.868,258.992,3.616,976.476,102.732,2793,67492,38566 +bench,platoon,release,25,111,120,40,0.520000,out,0.000,724.620,245.235,3.399,973.254,95.844,2753,65590,37547 +bench,platoon,release,25,112,120,40,0.506667,out,0.000,500.039,242.080,3.357,745.476,92.416,2657,60692,34839 +bench,platoon,release,25,113,120,40,0.493333,out,0.000,502.211,234.563,3.396,740.170,92.528,2621,64341,36836 +bench,platoon,release,25,114,120,40,0.480000,out,0.000,525.986,232.915,3.387,762.288,91.718,2610,61559,35309 +bench,platoon,release,25,115,120,40,0.466667,out,0.000,558.381,216.728,3.400,778.509,86.772,2569,58856,33692 +bench,platoon,release,25,116,120,40,0.453333,out,0.000,504.087,239.431,3.494,747.012,88.288,2660,61995,35498 +bench,platoon,release,25,117,120,40,0.440000,out,0.000,505.357,232.003,3.352,740.712,87.092,2566,60514,34626 +bench,platoon,release,25,118,120,40,0.426667,out,0.000,507.936,222.559,3.470,733.965,90.390,2537,59327,33966 +bench,platoon,release,25,119,120,40,0.413333,out,0.000,497.903,214.412,3.394,715.709,88.469,2554,59461,34055 +bench,platoon,release,25,120,120,40,0.400000,out,0.000,494.079,226.515,3.391,723.985,84.222,2498,58342,33360 +bench,platoon,release,25,121,120,40,0.386667,out,0.000,496.084,216.926,3.353,716.363,83.196,2484,57833,33080 +bench,platoon,release,25,122,120,40,0.373333,out,0.000,487.645,217.757,3.398,708.800,83.089,2576,58790,33686 +bench,platoon,release,25,123,120,40,0.360000,out,0.000,489.494,213.534,3.383,706.411,82.688,2486,56744,32452 +bench,platoon,release,25,124,120,40,0.346667,out,0.000,504.987,205.999,3.417,714.403,86.284,2433,55569,31730 +bench,platoon,release,25,125,120,40,0.333333,out,0.000,485.677,213.220,3.405,702.302,81.911,2417,56053,31968 +bench,platoon,release,25,126,120,40,0.320000,out,0.000,491.420,219.239,3.385,714.044,82.557,2391,54569,31171 +bench,platoon,release,25,127,120,40,0.306667,out,0.000,485.767,208.599,3.490,697.856,83.025,2300,52394,29895 +bench,platoon,release,25,128,120,40,0.293333,out,0.000,482.861,209.362,3.653,695.876,83.472,2283,51542,29406 +bench,platoon,release,25,129,120,40,0.280000,out,0.000,502.492,205.928,3.485,711.905,81.962,2266,51737,29504 +bench,platoon,release,25,130,120,40,0.266667,out,0.000,479.354,206.452,3.386,689.192,79.759,2257,51487,29321 +bench,platoon,release,25,131,120,40,0.253333,out,0.000,469.124,189.879,3.505,662.508,77.628,2136,47152,26878 +bench,platoon,release,25,132,120,40,0.240000,out,0.000,470.494,182.464,3.389,656.347,82.592,2122,47135,26829 +bench,platoon,release,25,133,120,40,0.226667,out,0.000,467.323,194.482,3.480,665.285,78.910,2126,48265,27453 +bench,platoon,release,25,134,120,40,0.213333,out,0.000,471.524,192.801,3.519,667.844,77.893,2109,46863,26695 +bench,platoon,release,25,135,120,40,0.200000,out,0.000,467.882,180.096,3.444,651.422,76.584,2043,43841,24971 +bench,platoon,release,25,136,120,40,0.186667,out,0.000,464.135,173.896,3.489,641.520,75.505,1970,42684,24286 +bench,platoon,release,25,137,120,40,0.173333,out,0.000,451.184,178.154,3.405,632.743,71.335,1993,42951,24522 +bench,platoon,release,25,138,120,40,0.160000,out,0.000,448.075,164.176,3.496,615.747,74.897,1923,42072,23959 +bench,platoon,release,25,139,120,40,0.146667,out,0.000,441.533,171.406,3.486,616.425,74.165,1868,41022,23323 +bench,platoon,release,25,140,120,40,0.133333,out,0.000,438.351,162.579,3.490,604.420,71.456,1857,38711,22076 +bench,platoon,release,25,141,120,40,0.120000,out,0.000,429.521,144.131,3.389,577.041,66.090,1707,34468,19662 +bench,platoon,release,25,142,120,40,0.106667,out,0.000,420.990,150.416,3.355,574.761,65.821,1652,35468,20124 +bench,platoon,release,25,143,120,40,0.093333,out,0.000,439.027,161.261,3.494,603.782,67.333,1621,34747,19740 +bench,platoon,release,25,144,120,40,0.080000,out,0.000,426.471,152.445,3.391,582.307,66.306,1642,35347,20069 +bench,platoon,release,25,145,120,40,0.066667,out,0.000,430.262,150.397,3.387,584.046,65.421,1603,33405,18967 +bench,platoon,release,25,146,120,40,0.053333,out,0.000,409.476,138.982,3.369,551.827,64.362,1513,30696,17466 +bench,platoon,release,25,147,120,40,0.040000,out,0.000,411.459,136.955,3.596,552.010,65.479,1512,30299,17259 +bench,platoon,release,25,148,120,40,0.026667,out,0.000,409.628,136.916,3.591,550.135,70.103,1475,30195,17131 +bench,platoon,release,25,149,120,40,0.013333,out,0.000,400.308,142.126,3.389,545.823,62.657,1508,30929,17505 diff --git a/docs/performance/motion-comparison/current-120x40-default-1.csv b/docs/performance/motion-comparison/current-120x40-default-1.csv new file mode 100644 index 000000000..0b2375309 --- /dev/null +++ b/docs/performance/motion-comparison/current-120x40-default-1.csv @@ -0,0 +1,151 @@ +mode,variant,build,fps,frame,width,height,phase,direction,interval_us,widget_us,output_us,reset_us,total_us,diff_probe_us,changed_cells,ansi_bytes,write_calls +bench,platoon,release,25,0,120,40,0.000000,in,0.000,426.156,179.760,3.501,609.417,54.874,4800,51450,29735 +bench,platoon,release,25,1,120,40,0.013333,in,0.000,437.944,179.287,3.737,620.968,79.080,1772,37012,20857 +bench,platoon,release,25,2,120,40,0.026667,in,0.000,814.713,184.266,3.560,1002.539,73.102,1826,37553,21213 +bench,platoon,release,25,3,120,40,0.040000,in,0.000,429.200,163.292,3.469,595.961,70.323,1797,38060,21558 +bench,platoon,release,25,4,120,40,0.053333,in,0.000,419.450,172.786,3.401,595.637,70.906,1852,39706,22468 +bench,platoon,release,25,5,120,40,0.066667,in,0.000,415.275,166.239,3.400,584.914,71.378,1847,39302,22257 +bench,platoon,release,25,6,120,40,0.080000,in,0.000,428.240,174.088,3.478,605.806,72.692,1877,40971,23194 +bench,platoon,release,25,7,120,40,0.093333,in,0.000,426.463,178.977,3.388,608.828,72.449,1928,41481,23520 +bench,platoon,release,25,8,120,40,0.106667,in,0.000,433.674,174.621,3.358,611.653,71.117,1889,41911,23741 +bench,platoon,release,25,9,120,40,0.120000,in,0.000,433.663,174.851,3.496,612.010,73.632,1940,41106,23342 +bench,platoon,release,25,10,120,40,0.133333,in,0.000,439.293,170.955,3.482,613.730,74.980,1944,43699,24775 +bench,platoon,release,25,11,120,40,0.146667,in,0.000,451.208,176.689,3.388,631.285,74.361,1984,43564,24708 +bench,platoon,release,25,12,120,40,0.160000,in,0.000,495.731,202.984,3.497,702.212,76.531,2036,45575,25905 +bench,platoon,release,25,13,120,40,0.173333,in,0.000,451.985,185.771,3.383,641.139,74.300,2080,44904,25612 +bench,platoon,release,25,14,120,40,0.186667,in,0.000,457.433,200.039,3.395,660.867,76.095,2091,45644,25962 +bench,platoon,release,25,15,120,40,0.200000,in,0.000,454.537,191.364,3.470,649.371,77.616,2113,47026,26709 +bench,platoon,release,25,16,120,40,0.213333,in,0.000,464.976,195.277,3.482,663.735,78.999,2167,48124,27372 +bench,platoon,release,25,17,120,40,0.226667,in,0.000,463.861,197.611,3.365,664.837,78.342,2160,48625,27696 +bench,platoon,release,25,18,120,40,0.240000,in,0.000,480.734,206.744,3.680,691.158,83.545,2161,49055,27962 +bench,platoon,release,25,19,120,40,0.253333,in,0.000,470.083,197.547,3.571,671.201,82.016,2239,51022,29051 +bench,platoon,release,25,20,120,40,0.266667,in,0.000,520.553,220.314,3.986,744.853,91.059,2225,50144,28553 +bench,platoon,release,25,21,120,40,0.280000,in,0.000,524.352,205.624,3.483,733.459,81.396,2213,49919,28473 +bench,platoon,release,25,22,120,40,0.293333,in,0.000,481.622,220.981,3.769,706.372,83.861,2288,52564,29965 +bench,platoon,release,25,23,120,40,0.306667,in,0.000,526.089,281.595,4.387,812.071,102.008,2328,53240,30408 +bench,platoon,release,25,24,120,40,0.320000,in,0.000,590.614,224.269,3.865,818.748,94.266,2353,53053,30336 +bench,platoon,release,25,25,120,40,0.333333,in,0.000,538.865,232.560,4.129,775.554,95.941,2366,54491,31137 +bench,platoon,release,25,26,120,40,0.346667,in,0.000,553.003,213.393,3.398,769.794,81.944,2385,54704,31235 +bench,platoon,release,25,27,120,40,0.360000,in,0.000,494.364,224.844,3.384,722.592,85.137,2431,56610,32318 +bench,platoon,release,25,28,120,40,0.373333,in,0.000,498.936,237.016,3.396,739.348,88.036,2554,60807,34778 +bench,platoon,release,25,29,120,40,0.386667,in,0.000,497.529,226.919,3.407,727.855,87.621,2608,58718,33703 +bench,platoon,release,25,30,120,40,0.400000,in,0.000,490.185,220.302,3.389,713.876,85.140,2525,59168,33788 +bench,platoon,release,25,31,120,40,0.413333,in,0.000,491.000,232.795,3.412,727.207,92.241,2552,58515,33517 +bench,platoon,release,25,32,120,40,0.426667,in,0.000,491.004,236.057,3.355,730.416,87.062,2624,60876,34809 +bench,platoon,release,25,33,120,40,0.440000,in,0.000,494.185,239.548,3.360,737.093,90.243,2606,61148,34999 +bench,platoon,release,25,34,120,40,0.453333,in,0.000,494.454,233.826,3.366,731.646,88.125,2634,61012,34946 +bench,platoon,release,25,35,120,40,0.466667,in,0.000,505.985,252.402,3.486,761.873,91.253,2734,64646,37022 +bench,platoon,release,25,36,120,40,0.480000,in,0.000,494.756,242.764,3.379,740.899,92.229,2623,61813,35421 +bench,platoon,release,25,37,120,40,0.493333,in,0.000,494.085,243.470,3.589,741.144,99.043,2682,64330,36862 +bench,platoon,release,25,38,120,40,0.506667,in,0.000,580.725,247.154,3.382,831.261,92.634,2659,62635,35936 +bench,platoon,release,25,39,120,40,0.520000,in,0.000,721.922,259.429,3.776,985.127,104.252,2720,63381,36276 +bench,platoon,release,25,40,120,40,0.533333,in,0.000,722.976,275.083,3.568,1001.627,102.002,2767,68701,39220 +bench,platoon,release,25,41,120,40,0.546667,in,0.000,766.093,697.189,4.245,1467.527,125.350,2839,69693,39811 +bench,platoon,release,25,42,120,40,0.560000,in,0.000,1130.203,316.949,3.401,1450.553,102.351,2913,71530,40788 +bench,platoon,release,25,43,120,40,0.573333,in,0.000,914.789,252.253,3.390,1170.432,97.386,2856,67174,38542 +bench,platoon,release,25,44,120,40,0.586667,in,0.000,915.005,305.466,3.565,1224.036,105.249,3109,85317,48132 +bench,platoon,release,25,45,120,40,0.600000,in,0.000,1310.513,313.654,3.463,1627.630,109.905,3282,78684,44801 +bench,platoon,release,25,46,120,40,0.613333,in,0.000,1195.285,318.149,3.785,1517.219,124.653,3160,77334,43944 +bench,platoon,release,25,47,120,40,0.626667,in,0.000,1807.844,321.691,3.744,2133.279,127.730,3257,79258,44926 +bench,platoon,release,25,48,120,40,0.640000,in,0.000,1364.300,290.333,3.413,1658.046,107.216,3228,80902,45900 +bench,platoon,release,25,49,120,40,0.653333,in,0.000,1553.156,307.164,3.387,1863.707,105.765,3359,85982,48556 +bench,platoon,release,25,50,120,40,0.666667,in,0.000,1557.794,345.535,3.406,1906.735,108.245,3360,84869,47992 +bench,platoon,release,25,51,120,40,0.680000,in,0.000,1790.284,349.424,3.484,2143.192,109.341,3432,85323,48139 +bench,platoon,release,25,52,120,40,0.693333,in,0.000,1975.718,309.920,3.386,2289.024,105.737,3495,88708,49857 +bench,platoon,release,25,53,120,40,0.706667,in,0.000,2181.513,415.401,3.877,2600.791,120.907,3624,90921,51035 +bench,platoon,release,25,54,120,40,0.720000,in,0.000,2374.234,410.433,4.255,2788.922,131.090,3632,89823,50344 +bench,platoon,release,25,55,120,40,0.733333,in,0.000,2517.446,314.794,3.365,2835.605,102.115,3696,90255,50638 +bench,platoon,release,25,56,120,40,0.746667,in,0.000,2379.164,303.777,3.381,2686.322,103.115,3762,86993,48538 +bench,platoon,release,25,57,120,40,0.760000,in,0.000,3887.405,313.288,3.399,4204.092,103.691,3872,86077,47908 +bench,platoon,release,25,58,120,40,0.773333,in,0.000,4014.572,310.569,3.415,4328.556,106.085,3891,84450,46913 +bench,platoon,release,25,59,120,40,0.786667,in,0.000,4746.057,334.843,3.770,5084.670,115.999,3992,83152,45831 +bench,platoon,release,25,60,120,40,0.800000,in,0.000,4150.194,303.894,3.485,4457.573,105.042,3944,84492,46611 +bench,platoon,release,25,61,120,40,0.813333,in,0.000,4483.212,298.175,3.372,4784.759,102.065,3921,81973,44876 +bench,platoon,release,25,62,120,40,0.826667,in,0.000,4474.319,281.327,3.392,4759.038,99.977,3807,75024,41054 +bench,platoon,release,25,63,120,40,0.840000,in,0.000,4858.104,273.702,3.563,5135.369,104.469,3826,68099,36869 +bench,platoon,release,25,64,120,40,0.853333,in,0.000,5610.125,265.318,3.384,5878.827,105.496,3608,68072,37026 +bench,platoon,release,25,65,120,40,0.866667,in,0.000,5038.827,262.006,3.397,5304.230,117.200,3731,68424,37020 +bench,platoon,release,25,66,120,40,0.880000,in,0.000,5332.469,248.861,3.412,5584.742,101.284,3406,60904,32980 +bench,platoon,release,25,67,120,40,0.893333,in,0.000,5651.569,238.088,3.397,5893.054,103.906,3024,57283,31302 +bench,platoon,release,25,68,120,40,0.906667,in,0.000,5378.931,237.474,3.400,5619.805,101.766,3024,56223,30569 +bench,platoon,release,25,69,120,40,0.920000,in,0.000,5881.866,276.292,3.790,6161.948,115.883,2655,49006,26832 +bench,platoon,release,25,70,120,40,0.933333,in,0.000,5723.834,198.992,3.389,5926.215,100.138,2349,39941,21858 +bench,platoon,release,25,71,120,40,0.946667,in,0.000,6021.517,181.776,3.387,6206.680,90.954,1853,35207,19461 +bench,platoon,release,25,72,120,40,0.960000,in,0.000,5654.801,141.726,3.497,5800.024,88.179,1080,21137,11856 +bench,platoon,release,25,73,120,40,0.973333,in,0.000,6235.908,158.300,3.558,6397.766,81.009,744,16232,9095 +bench,platoon,release,25,74,120,40,0.986667,in,0.000,5643.460,95.750,3.403,5742.613,74.378,519,7973,4457 +bench,platoon,release,25,75,120,40,1.000000,out,0.000,5058.691,146.897,4.588,5210.176,97.509,805,14501,8093 +bench,platoon,release,25,76,120,40,0.986667,out,0.000,6411.086,104.257,3.370,6518.713,76.025,643,11391,6350 +bench,platoon,release,25,77,120,40,0.973333,out,0.000,5998.028,112.057,4.177,6114.262,95.778,494,7960,4417 +bench,platoon,release,25,78,120,40,0.960000,out,0.000,5775.399,124.168,3.449,5903.016,79.578,751,17331,9752 +bench,platoon,release,25,79,120,40,0.946667,out,0.000,5736.126,137.992,3.367,5877.485,81.280,1055,21716,12176 +bench,platoon,release,25,80,120,40,0.933333,out,0.000,6107.738,203.735,3.543,6315.016,104.784,1842,39886,22168 +bench,platoon,release,25,81,120,40,0.920000,out,0.000,5465.548,205.678,3.412,5674.638,100.907,2348,41712,22777 +bench,platoon,release,25,82,120,40,0.906667,out,0.000,5394.976,271.304,4.116,5670.396,123.084,2684,54873,30158 +bench,platoon,release,25,83,120,40,0.893333,out,0.000,6028.465,247.585,3.401,6279.451,104.386,3063,56424,30783 +bench,platoon,release,25,84,120,40,0.880000,out,0.000,5063.726,255.857,3.390,5322.973,104.958,3010,60453,33085 +bench,platoon,release,25,85,120,40,0.866667,out,0.000,5074.346,258.561,3.364,5336.271,101.182,3376,63963,34773 +bench,platoon,release,25,86,120,40,0.853333,out,0.000,4780.401,271.509,3.409,5055.319,102.645,3699,70777,38564 +bench,platoon,release,25,87,120,40,0.840000,out,0.000,4847.320,303.370,3.489,5154.179,110.175,3702,71931,39166 +bench,platoon,release,25,88,120,40,0.826667,out,0.000,4660.663,292.482,3.409,4956.554,103.188,3847,78048,42816 +bench,platoon,release,25,89,120,40,0.813333,out,0.000,4475.525,295.636,3.413,4774.574,103.911,3835,78966,43311 +bench,platoon,release,25,90,120,40,0.800000,out,0.000,4254.797,309.050,3.401,4567.248,100.392,3950,85921,47510 +bench,platoon,release,25,91,120,40,0.786667,out,0.000,4290.235,316.023,3.465,4609.723,105.145,3943,83307,45966 +bench,platoon,release,25,92,120,40,0.773333,out,0.000,4169.076,296.911,3.406,4469.393,103.815,4009,86957,48379 +bench,platoon,release,25,93,120,40,0.760000,out,0.000,4158.475,332.955,3.398,4494.828,103.261,3887,86095,47967 +bench,platoon,release,25,94,120,40,0.746667,out,0.000,2497.713,418.105,3.510,2919.328,119.302,3866,89066,49766 +bench,platoon,release,25,95,120,40,0.733333,out,0.000,2307.502,670.166,4.120,2981.788,125.688,3756,90927,51049 +bench,platoon,release,25,96,120,40,0.720000,out,0.000,2370.656,312.843,3.403,2686.902,101.706,3733,90782,50890 +bench,platoon,release,25,97,120,40,0.706667,out,0.000,2159.134,328.265,3.450,2490.849,104.277,3653,89951,50430 +bench,platoon,release,25,98,120,40,0.693333,out,0.000,2120.913,638.552,4.050,2763.515,117.713,3625,89636,50472 +bench,platoon,release,25,99,120,40,0.680000,out,0.000,1941.679,331.723,3.378,2276.780,105.443,3512,87194,49214 +bench,platoon,release,25,100,120,40,0.666667,out,0.000,1565.443,288.295,3.388,1857.126,108.043,3454,84385,47726 +bench,platoon,release,25,101,120,40,0.653333,out,0.000,1560.781,308.864,3.553,1873.198,106.979,3375,85223,48159 +bench,platoon,release,25,102,120,40,0.640000,out,0.000,1381.522,605.236,4.538,1991.296,142.267,3333,81863,46512 +bench,platoon,release,25,103,120,40,0.626667,out,0.000,1650.585,318.685,3.485,1972.755,105.811,3216,79424,45062 +bench,platoon,release,25,104,120,40,0.613333,out,0.000,1142.530,298.146,3.393,1444.069,104.065,3163,78589,44732 +bench,platoon,release,25,105,120,40,0.600000,out,0.000,1132.225,292.791,3.359,1428.375,102.036,3110,76932,43749 +bench,platoon,release,25,106,120,40,0.586667,out,0.000,919.287,317.783,3.400,1240.470,105.365,3240,86120,48741 +bench,platoon,release,25,107,120,40,0.573333,out,0.000,921.224,266.889,3.387,1191.500,100.848,3001,70582,40520 +bench,platoon,release,25,108,120,40,0.560000,out,0.000,935.352,343.873,4.013,1283.238,123.144,2827,69999,39951 +bench,platoon,release,25,109,120,40,0.546667,out,0.000,761.934,268.392,3.394,1033.720,99.920,2850,69467,39741 +bench,platoon,release,25,110,120,40,0.533333,out,0.000,855.727,281.807,3.409,1140.943,100.626,2793,67492,38566 +bench,platoon,release,25,111,120,40,0.520000,out,0.000,717.775,265.830,4.384,987.989,113.558,2753,65590,37547 +bench,platoon,release,25,112,120,40,0.506667,out,0.000,543.099,238.899,3.381,785.379,96.779,2657,60692,34839 +bench,platoon,release,25,113,120,40,0.493333,out,0.000,505.793,248.524,3.360,757.677,91.329,2621,64341,36836 +bench,platoon,release,25,114,120,40,0.480000,out,0.000,505.376,234.595,3.397,743.368,90.705,2610,61559,35309 +bench,platoon,release,25,115,120,40,0.466667,out,0.000,516.159,505.675,4.154,1025.988,102.834,2569,58856,33692 +bench,platoon,release,25,116,120,40,0.453333,out,0.000,622.782,254.443,3.762,880.987,104.821,2660,61995,35498 +bench,platoon,release,25,117,120,40,0.440000,out,0.000,549.239,236.559,3.380,789.178,88.985,2566,60514,34626 +bench,platoon,release,25,118,120,40,0.426667,out,0.000,520.068,228.016,3.390,751.474,88.492,2537,59327,33966 +bench,platoon,release,25,119,120,40,0.413333,out,0.000,506.723,233.266,3.394,743.383,88.728,2554,59461,34055 +bench,platoon,release,25,120,120,40,0.400000,out,0.000,495.763,230.870,3.468,730.101,87.350,2498,58342,33360 +bench,platoon,release,25,121,120,40,0.386667,out,0.000,497.058,227.639,6.606,731.303,85.074,2484,57833,33080 +bench,platoon,release,25,122,120,40,0.373333,out,0.000,488.480,226.350,3.392,718.222,86.106,2576,58790,33686 +bench,platoon,release,25,123,120,40,0.360000,out,0.000,497.860,216.913,3.408,718.181,82.024,2486,56744,32452 +bench,platoon,release,25,124,120,40,0.346667,out,0.000,492.346,218.668,3.394,714.408,84.370,2433,55569,31730 +bench,platoon,release,25,125,120,40,0.333333,out,0.000,488.084,211.702,3.478,703.264,84.190,2417,56053,31968 +bench,platoon,release,25,126,120,40,0.320000,out,0.000,487.438,216.410,3.498,707.346,85.169,2391,54569,31171 +bench,platoon,release,25,127,120,40,0.306667,out,0.000,488.535,206.013,3.397,697.945,81.259,2300,52394,29895 +bench,platoon,release,25,128,120,40,0.293333,out,0.000,483.697,208.998,3.488,696.183,82.824,2283,51542,29406 +bench,platoon,release,25,129,120,40,0.280000,out,0.000,480.695,208.291,3.352,692.338,81.489,2266,51737,29504 +bench,platoon,release,25,130,120,40,0.266667,out,0.000,503.812,225.055,3.578,732.445,84.818,2257,51487,29321 +bench,platoon,release,25,131,120,40,0.253333,out,0.000,477.529,194.975,3.671,676.175,82.515,2136,47152,26878 +bench,platoon,release,25,132,120,40,0.240000,out,0.000,509.809,211.930,3.767,725.506,86.816,2122,47135,26829 +bench,platoon,release,25,133,120,40,0.226667,out,0.000,536.197,216.578,3.395,756.170,77.178,2126,48265,27453 +bench,platoon,release,25,134,120,40,0.213333,out,0.000,495.071,214.239,4.234,713.544,96.010,2109,46863,26695 +bench,platoon,release,25,135,120,40,0.200000,out,0.000,588.089,221.167,3.483,812.739,402.902,2043,43841,24971 +bench,platoon,release,25,136,120,40,0.186667,out,0.000,557.996,231.655,3.488,793.139,78.626,1970,42684,24286 +bench,platoon,release,25,137,120,40,0.173333,out,0.000,466.976,190.001,3.590,660.567,77.391,1993,42951,24522 +bench,platoon,release,25,138,120,40,0.160000,out,0.000,451.181,192.805,3.394,647.380,72.015,1923,42072,23959 +bench,platoon,release,25,139,120,40,0.146667,out,0.000,444.669,181.453,3.478,629.600,74.904,1868,41022,23323 +bench,platoon,release,25,140,120,40,0.133333,out,0.000,439.938,163.817,3.480,607.235,72.240,1857,38711,22076 +bench,platoon,release,25,141,120,40,0.120000,out,0.000,427.575,153.258,3.479,584.312,68.931,1707,34468,19662 +bench,platoon,release,25,142,120,40,0.106667,out,0.000,427.088,155.386,3.495,585.969,68.257,1652,35468,20124 +bench,platoon,release,25,143,120,40,0.093333,out,0.000,433.267,295.195,3.400,731.862,66.549,1621,34747,19740 +bench,platoon,release,25,144,120,40,0.080000,out,0.000,421.681,163.462,3.921,589.064,73.095,1642,35347,20069 +bench,platoon,release,25,145,120,40,0.066667,out,0.000,423.623,155.102,3.479,582.204,67.816,1603,33405,18967 +bench,platoon,release,25,146,120,40,0.053333,out,0.000,414.641,148.897,3.486,567.024,66.230,1513,30696,17466 +bench,platoon,release,25,147,120,40,0.040000,out,0.000,404.457,146.426,3.499,554.382,65.699,1512,30299,17259 +bench,platoon,release,25,148,120,40,0.026667,out,0.000,409.496,145.094,3.581,558.171,65.090,1475,30195,17131 +bench,platoon,release,25,149,120,40,0.013333,out,0.000,570.446,180.573,4.425,755.444,82.618,1508,30929,17505 diff --git a/docs/performance/motion-comparison/current-120x40-muster-0.csv b/docs/performance/motion-comparison/current-120x40-muster-0.csv new file mode 100644 index 000000000..4e80bbf8c --- /dev/null +++ b/docs/performance/motion-comparison/current-120x40-muster-0.csv @@ -0,0 +1,151 @@ +mode,variant,build,fps,frame,width,height,phase,direction,interval_us,widget_us,output_us,reset_us,total_us,diff_probe_us,changed_cells,ansi_bytes,write_calls +bench,muster,release,25,0,120,40,0.000000,in,0.000,430.791,191.997,3.533,626.321,56.346,4800,51450,29735 +bench,muster,release,25,1,120,40,0.013333,in,0.000,415.713,159.710,3.351,578.774,71.196,1772,37012,20857 +bench,muster,release,25,2,120,40,0.026667,in,0.000,409.291,152.570,3.389,565.250,71.556,1826,37553,21213 +bench,muster,release,25,3,120,40,0.040000,in,0.000,422.731,174.804,3.566,601.101,73.171,1797,38060,21558 +bench,muster,release,25,4,120,40,0.053333,in,0.000,418.707,173.299,3.758,595.764,79.241,1852,39706,22468 +bench,muster,release,25,5,120,40,0.066667,in,0.000,448.030,163.022,3.438,614.490,72.528,1847,39302,22257 +bench,muster,release,25,6,120,40,0.080000,in,0.000,430.153,174.893,3.451,608.497,73.913,1877,40971,23194 +bench,muster,release,25,7,120,40,0.093333,in,0.000,429.367,173.124,3.384,605.875,73.075,1928,41481,23520 +bench,muster,release,25,8,120,40,0.106667,in,0.000,424.258,171.229,3.479,598.966,73.290,1889,41911,23741 +bench,muster,release,25,9,120,40,0.120000,in,0.000,432.830,174.882,3.389,611.101,74.387,1940,41106,23342 +bench,muster,release,25,10,120,40,0.133333,in,0.000,442.112,180.751,3.458,626.321,77.287,1944,43699,24775 +bench,muster,release,25,11,120,40,0.146667,in,0.000,445.712,180.896,3.460,630.068,76.814,1984,43564,24708 +bench,muster,release,25,12,120,40,0.160000,in,0.000,450.337,183.886,3.398,637.621,73.699,2036,45575,25905 +bench,muster,release,25,13,120,40,0.173333,in,0.000,448.597,184.166,3.374,636.137,76.531,2080,44904,25612 +bench,muster,release,25,14,120,40,0.186667,in,0.000,449.452,186.954,3.383,639.789,76.119,2091,45644,25962 +bench,muster,release,25,15,120,40,0.200000,in,0.000,456.662,184.524,3.390,644.576,76.202,2113,47026,26709 +bench,muster,release,25,16,120,40,0.213333,in,0.000,541.734,195.072,3.387,740.193,79.315,2167,48124,27372 +bench,muster,release,25,17,120,40,0.226667,in,0.000,459.530,195.481,3.462,658.473,78.480,2160,48625,27696 +bench,muster,release,25,18,120,40,0.240000,in,0.000,463.712,202.214,3.371,669.297,80.970,2161,49055,27962 +bench,muster,release,25,19,120,40,0.253333,in,0.000,458.105,228.876,3.349,690.330,80.197,2239,51022,29051 +bench,muster,release,25,20,120,40,0.266667,in,0.000,474.084,188.433,3.391,665.908,77.390,2225,50144,28553 +bench,muster,release,25,21,120,40,0.280000,in,0.000,470.296,200.324,3.437,674.057,82.854,2213,49919,28473 +bench,muster,release,25,22,120,40,0.293333,in,0.000,473.088,204.886,3.440,681.414,83.433,2288,52564,29965 +bench,muster,release,25,23,120,40,0.306667,in,0.000,485.998,195.162,3.372,684.532,82.542,2328,53240,30408 +bench,muster,release,25,24,120,40,0.320000,in,0.000,482.565,215.241,3.345,701.151,84.219,2353,53053,30336 +bench,muster,release,25,25,120,40,0.333333,in,0.000,485.684,218.963,3.475,708.122,84.781,2366,54491,31137 +bench,muster,release,25,26,120,40,0.346667,in,0.000,482.056,205.771,3.382,691.209,83.117,2385,54704,31235 +bench,muster,release,25,27,120,40,0.360000,in,0.000,486.980,223.513,3.380,713.873,91.019,2431,56610,32318 +bench,muster,release,25,28,120,40,0.373333,in,0.000,491.108,226.214,3.343,720.665,86.970,2554,60807,34778 +bench,muster,release,25,29,120,40,0.386667,in,0.000,531.121,229.210,3.476,763.807,87.460,2608,58718,33703 +bench,muster,release,25,30,120,40,0.400000,in,0.000,501.015,221.836,3.385,726.236,88.070,2525,59168,33788 +bench,muster,release,25,31,120,40,0.413333,in,0.000,494.259,235.162,3.571,732.992,91.127,2552,58515,33517 +bench,muster,release,25,32,120,40,0.426667,in,0.000,498.158,235.366,3.360,736.884,90.630,2624,60876,34809 +bench,muster,release,25,33,120,40,0.440000,in,0.000,489.265,235.235,3.443,727.943,93.077,2606,61148,34999 +bench,muster,release,25,34,120,40,0.453333,in,0.000,491.393,237.401,3.384,732.178,87.596,2634,61012,34946 +bench,muster,release,25,35,120,40,0.466667,in,0.000,507.521,244.371,3.396,755.288,88.906,2734,64646,37022 +bench,muster,release,25,36,120,40,0.480000,in,0.000,498.936,237.340,3.385,739.661,89.728,2623,61813,35421 +bench,muster,release,25,37,120,40,0.493333,in,0.000,494.411,238.141,3.403,735.955,91.171,2682,64330,36862 +bench,muster,release,25,38,120,40,0.506667,in,0.000,495.744,238.019,3.441,737.204,93.693,2659,62635,35936 +bench,muster,release,25,39,120,40,0.520000,in,0.000,698.109,236.880,3.353,938.342,95.100,2720,63381,36276 +bench,muster,release,25,40,120,40,0.533333,in,0.000,704.959,257.230,3.432,965.621,98.986,2767,68701,39220 +bench,muster,release,25,41,120,40,0.546667,in,0.000,714.334,260.863,3.392,978.589,101.251,2839,69693,39811 +bench,muster,release,25,42,120,40,0.560000,in,0.000,916.983,273.459,3.413,1193.855,101.418,2913,71530,40788 +bench,muster,release,25,43,120,40,0.573333,in,0.000,929.113,262.039,3.440,1194.592,98.970,2856,67174,38542 +bench,muster,release,25,44,120,40,0.586667,in,0.000,915.112,293.804,3.466,1212.382,103.041,3109,85317,48132 +bench,muster,release,25,45,120,40,0.600000,in,0.000,1127.905,277.342,3.370,1408.617,106.803,3282,78684,44801 +bench,muster,release,25,46,120,40,0.613333,in,0.000,1132.986,285.704,3.360,1422.050,104.840,3160,77334,43944 +bench,muster,release,25,47,120,40,0.626667,in,0.000,1337.954,290.416,3.367,1631.737,106.873,3257,79258,44926 +bench,muster,release,25,48,120,40,0.640000,in,0.000,1345.379,303.472,3.348,1652.199,104.710,3228,80902,45900 +bench,muster,release,25,49,120,40,0.653333,in,0.000,1550.473,304.438,3.390,1858.301,106.798,3359,85982,48556 +bench,muster,release,25,50,120,40,0.666667,in,0.000,1577.453,314.303,3.369,1895.125,107.180,3360,84869,47992 +bench,muster,release,25,51,120,40,0.680000,in,0.000,1769.030,307.047,3.375,2079.452,107.666,3432,85323,48139 +bench,muster,release,25,52,120,40,0.693333,in,0.000,1976.600,305.128,3.382,2285.110,107.625,3495,88708,49857 +bench,muster,release,25,53,120,40,0.706667,in,0.000,1956.917,323.630,3.395,2283.942,104.722,3624,90921,51035 +bench,muster,release,25,54,120,40,0.720000,in,0.000,2184.330,314.322,3.380,2502.032,104.941,3632,89823,50344 +bench,muster,release,25,55,120,40,0.733333,in,0.000,2172.425,303.886,3.352,2479.663,104.245,3696,90255,50638 +bench,muster,release,25,56,120,40,0.746667,in,0.000,2419.697,301.393,3.365,2724.455,103.930,3762,86993,48538 +bench,muster,release,25,57,120,40,0.760000,in,0.000,3988.114,299.365,3.353,4290.832,105.338,3880,85985,47856 +bench,muster,release,25,58,120,40,0.773333,in,0.000,4020.593,294.546,3.387,4318.526,103.489,3887,84597,47010 +bench,muster,release,25,59,120,40,0.786667,in,0.000,4322.352,301.567,3.680,4627.599,113.409,4019,82654,45505 +bench,muster,release,25,60,120,40,0.800000,in,0.000,4344.226,283.129,3.360,4630.715,105.954,3916,83108,45764 +bench,muster,release,25,61,120,40,0.813333,in,0.000,4632.684,275.363,3.362,4911.409,103.396,3918,82154,44876 +bench,muster,release,25,62,120,40,0.826667,in,0.000,4655.166,270.981,3.444,4929.591,103.687,3858,77641,42352 +bench,muster,release,25,63,120,40,0.840000,in,0.000,4972.564,256.025,3.353,5231.942,101.061,3884,66087,35585 +bench,muster,release,25,64,120,40,0.853333,in,0.000,4939.783,233.286,3.482,5176.551,104.336,3685,58914,31773 +bench,muster,release,25,65,120,40,0.866667,in,0.000,5253.988,220.526,3.367,5477.881,99.057,3563,57116,30690 +bench,muster,release,25,66,120,40,0.880000,in,0.000,5266.693,248.947,3.358,5518.998,99.801,3363,63402,34436 +bench,muster,release,25,67,120,40,0.893333,in,0.000,5258.155,256.836,3.380,5518.371,103.339,3368,66725,36292 +bench,muster,release,25,68,120,40,0.906667,in,0.000,5568.016,256.555,3.361,5827.932,106.424,3115,62907,34239 +bench,muster,release,25,69,120,40,0.920000,in,0.000,5613.638,233.330,3.381,5850.349,101.401,2801,54351,29653 +bench,muster,release,25,70,120,40,0.933333,in,0.000,5595.458,191.065,3.369,5789.892,97.049,2215,42228,23142 +bench,muster,release,25,71,120,40,0.946667,in,0.000,5838.471,182.612,3.479,6024.562,92.305,1787,37164,20525 +bench,muster,release,25,72,120,40,0.960000,in,0.000,5804.408,161.594,3.458,5969.460,88.598,1682,30062,16489 +bench,muster,release,25,73,120,40,0.973333,in,0.000,5795.233,119.855,3.374,5918.462,78.135,896,16344,8951 +bench,muster,release,25,74,120,40,0.986667,in,0.000,5744.453,109.295,3.486,5857.234,77.164,702,12106,6598 +bench,muster,release,25,75,120,40,1.000000,out,0.000,5315.099,108.751,3.469,5427.319,76.209,779,13864,7536 +bench,muster,release,25,76,120,40,0.986667,out,0.000,5740.187,117.153,3.467,5860.807,78.041,928,16255,8906 +bench,muster,release,25,77,120,40,0.973333,out,0.000,5772.788,104.896,3.457,5881.141,77.515,707,11494,6273 +bench,muster,release,25,78,120,40,0.960000,out,0.000,5849.813,145.762,3.370,5998.945,84.404,1510,25604,13854 +bench,muster,release,25,79,120,40,0.946667,out,0.000,5859.622,159.190,3.466,6022.278,91.353,1571,29648,16245 +bench,muster,release,25,80,120,40,0.933333,out,0.000,5549.814,177.784,3.381,5730.979,89.502,1940,38832,21273 +bench,muster,release,25,81,120,40,0.920000,out,0.000,5533.715,210.399,3.476,5747.590,97.713,2250,47920,26382 +bench,muster,release,25,82,120,40,0.906667,out,0.000,5572.950,237.532,3.369,5813.851,101.592,2666,56027,30632 +bench,muster,release,25,83,120,40,0.893333,out,0.000,5244.762,252.143,3.387,5500.292,107.829,3191,63694,34779 +bench,muster,release,25,84,120,40,0.880000,out,0.000,5275.883,251.210,3.390,5530.483,106.286,3357,62466,33898 +bench,muster,release,25,85,120,40,0.866667,out,0.000,5256.083,240.373,3.383,5499.839,101.777,3455,58419,31597 +bench,muster,release,25,86,120,40,0.853333,out,0.000,4971.438,255.604,3.393,5230.435,100.395,3626,62677,33956 +bench,muster,release,25,87,120,40,0.840000,out,0.000,4963.660,271.995,3.394,5239.049,102.500,3711,70331,38191 +bench,muster,release,25,88,120,40,0.826667,out,0.000,4655.553,287.353,3.398,4946.304,100.037,3911,79400,43325 +bench,muster,release,25,89,120,40,0.813333,out,0.000,4657.609,281.771,3.461,4942.841,103.143,3833,80197,43989 +bench,muster,release,25,90,120,40,0.800000,out,0.000,4343.613,284.463,3.386,4631.462,103.266,3935,83984,46329 +bench,muster,release,25,91,120,40,0.786667,out,0.000,4312.480,293.530,3.398,4609.408,104.239,3938,85371,47153 +bench,muster,release,25,92,120,40,0.773333,out,0.000,4041.110,318.325,3.664,4363.099,108.467,4030,87197,48532 +bench,muster,release,25,93,120,40,0.760000,out,0.000,4096.968,303.946,3.391,4404.305,103.803,3901,86129,47992 +bench,muster,release,25,94,120,40,0.746667,out,0.000,2412.972,298.158,3.365,2714.495,106.050,3862,89061,49764 +bench,muster,release,25,95,120,40,0.733333,out,0.000,2182.625,317.322,3.398,2503.345,140.374,3756,90927,51049 +bench,muster,release,25,96,120,40,0.720000,out,0.000,2182.562,305.860,3.487,2491.909,105.490,3733,90782,50890 +bench,muster,release,25,97,120,40,0.706667,out,0.000,1956.695,307.603,3.404,2267.702,105.783,3653,89951,50430 +bench,muster,release,25,98,120,40,0.693333,out,0.000,1996.456,304.054,3.395,2303.905,104.194,3625,89636,50472 +bench,muster,release,25,99,120,40,0.680000,out,0.000,1783.696,305.448,3.396,2092.540,104.497,3512,87194,49214 +bench,muster,release,25,100,120,40,0.666667,out,0.000,1580.911,295.124,3.384,1879.419,106.949,3454,84385,47726 +bench,muster,release,25,101,120,40,0.653333,out,0.000,1565.287,306.791,3.417,1875.495,109.133,3375,85223,48159 +bench,muster,release,25,102,120,40,0.640000,out,0.000,1355.137,298.326,3.486,1656.949,108.160,3333,81863,46512 +bench,muster,release,25,103,120,40,0.626667,out,0.000,1352.888,291.554,3.352,1647.794,102.754,3216,79424,45062 +bench,muster,release,25,104,120,40,0.613333,out,0.000,1137.791,277.406,3.456,1418.653,103.951,3163,78589,44732 +bench,muster,release,25,105,120,40,0.600000,out,0.000,1132.676,283.495,3.400,1419.571,102.862,3110,76932,43749 +bench,muster,release,25,106,120,40,0.586667,out,0.000,914.061,302.324,3.401,1219.786,106.355,3240,86120,48741 +bench,muster,release,25,107,120,40,0.573333,out,0.000,921.459,251.921,3.407,1176.787,100.798,3001,70582,40520 +bench,muster,release,25,108,120,40,0.560000,out,0.000,923.521,265.794,3.387,1192.702,96.943,2827,69999,39951 +bench,muster,release,25,109,120,40,0.546667,out,0.000,715.770,266.149,3.455,985.374,102.552,2850,69467,39741 +bench,muster,release,25,110,120,40,0.533333,out,0.000,713.415,255.957,3.403,972.775,98.373,2793,67492,38566 +bench,muster,release,25,111,120,40,0.520000,out,0.000,706.486,362.148,3.393,1072.027,97.908,2753,65590,37547 +bench,muster,release,25,112,120,40,0.506667,out,0.000,504.215,238.182,3.538,745.935,97.463,2657,60692,34839 +bench,muster,release,25,113,120,40,0.493333,out,0.000,512.757,247.103,3.563,763.423,95.709,2621,64341,36836 +bench,muster,release,25,114,120,40,0.480000,out,0.000,525.289,233.593,3.347,762.229,89.239,2610,61559,35309 +bench,muster,release,25,115,120,40,0.466667,out,0.000,505.031,230.807,3.396,739.234,89.616,2569,58856,33692 +bench,muster,release,25,116,120,40,0.453333,out,0.000,503.240,236.269,3.405,742.914,88.879,2660,61995,35498 +bench,muster,release,25,117,120,40,0.440000,out,0.000,505.576,230.514,3.383,739.473,87.439,2566,60514,34626 +bench,muster,release,25,118,120,40,0.426667,out,0.000,497.392,234.083,3.394,734.869,88.672,2537,59327,33966 +bench,muster,release,25,119,120,40,0.413333,out,0.000,499.012,237.060,3.358,739.430,88.259,2554,59461,34055 +bench,muster,release,25,120,120,40,0.400000,out,0.000,493.168,222.677,3.388,719.233,84.569,2498,58342,33360 +bench,muster,release,25,121,120,40,0.386667,out,0.000,501.652,225.816,3.470,730.938,87.264,2484,57833,33080 +bench,muster,release,25,122,120,40,0.373333,out,0.000,493.101,226.915,3.388,723.404,84.594,2576,58790,33686 +bench,muster,release,25,123,120,40,0.360000,out,0.000,493.186,210.271,3.351,706.808,84.119,2486,56744,32452 +bench,muster,release,25,124,120,40,0.346667,out,0.000,486.108,209.843,3.520,699.471,88.026,2433,55569,31730 +bench,muster,release,25,125,120,40,0.333333,out,0.000,499.080,201.300,3.389,703.769,83.652,2417,56053,31968 +bench,muster,release,25,126,120,40,0.320000,out,0.000,489.148,221.673,3.368,714.189,83.436,2391,54569,31171 +bench,muster,release,25,127,120,40,0.306667,out,0.000,485.199,205.376,3.453,694.028,83.239,2300,52394,29895 +bench,muster,release,25,128,120,40,0.293333,out,0.000,484.498,202.546,3.362,690.406,79.981,2283,51542,29406 +bench,muster,release,25,129,120,40,0.280000,out,0.000,477.128,208.161,3.466,688.755,88.095,2266,51737,29504 +bench,muster,release,25,130,120,40,0.266667,out,0.000,476.916,199.282,3.364,679.562,80.388,2257,51487,29321 +bench,muster,release,25,131,120,40,0.253333,out,0.000,466.716,191.750,3.444,661.910,78.122,2136,47152,26878 +bench,muster,release,25,132,120,40,0.240000,out,0.000,478.518,184.283,3.343,666.144,78.871,2122,47135,26829 +bench,muster,release,25,133,120,40,0.226667,out,0.000,462.779,179.005,3.392,645.176,79.886,2126,48265,27453 +bench,muster,release,25,134,120,40,0.213333,out,0.000,461.882,189.275,3.393,654.550,76.957,2109,46863,26695 +bench,muster,release,25,135,120,40,0.200000,out,0.000,461.325,177.465,3.451,642.241,77.849,2043,43841,24971 +bench,muster,release,25,136,120,40,0.186667,out,0.000,451.515,179.766,3.477,634.758,75.914,1970,42684,24286 +bench,muster,release,25,137,120,40,0.173333,out,0.000,452.878,178.247,3.389,634.514,72.943,1993,42951,24522 +bench,muster,release,25,138,120,40,0.160000,out,0.000,448.038,178.999,3.496,630.533,75.101,1923,42072,23959 +bench,muster,release,25,139,120,40,0.146667,out,0.000,440.359,176.632,3.394,620.385,72.498,1868,41022,23323 +bench,muster,release,25,140,120,40,0.133333,out,0.000,436.165,171.093,3.471,610.729,73.588,1857,38711,22076 +bench,muster,release,25,141,120,40,0.120000,out,0.000,426.135,155.691,3.409,585.235,67.725,1707,34468,19662 +bench,muster,release,25,142,120,40,0.106667,out,0.000,429.956,156.232,3.394,589.582,66.647,1652,35468,20124 +bench,muster,release,25,143,120,40,0.093333,out,0.000,424.043,153.758,3.384,581.185,66.446,1621,34747,19740 +bench,muster,release,25,144,120,40,0.080000,out,0.000,428.075,156.435,3.386,587.896,66.027,1642,35347,20069 +bench,muster,release,25,145,120,40,0.066667,out,0.000,423.126,155.901,3.373,582.400,65.949,1603,33405,18967 +bench,muster,release,25,146,120,40,0.053333,out,0.000,410.405,144.978,3.345,558.728,63.332,1513,30696,17466 +bench,muster,release,25,147,120,40,0.040000,out,0.000,405.938,144.474,3.351,553.763,64.302,1512,30299,17259 +bench,muster,release,25,148,120,40,0.026667,out,0.000,398.724,143.021,3.438,545.183,64.266,1475,30195,17131 +bench,muster,release,25,149,120,40,0.013333,out,0.000,397.664,140.546,3.439,541.649,65.380,1508,30929,17505 diff --git a/docs/performance/motion-comparison/current-120x40-muster-1.csv b/docs/performance/motion-comparison/current-120x40-muster-1.csv new file mode 100644 index 000000000..61698b19b --- /dev/null +++ b/docs/performance/motion-comparison/current-120x40-muster-1.csv @@ -0,0 +1,151 @@ +mode,variant,build,fps,frame,width,height,phase,direction,interval_us,widget_us,output_us,reset_us,total_us,diff_probe_us,changed_cells,ansi_bytes,write_calls +bench,muster,release,25,0,120,40,0.000000,in,0.000,417.728,190.345,3.482,611.555,57.784,4800,51450,29735 +bench,muster,release,25,1,120,40,0.013333,in,0.000,406.219,171.110,3.397,580.726,71.327,1772,37012,20857 +bench,muster,release,25,2,120,40,0.026667,in,0.000,415.777,153.115,3.400,572.292,70.300,1826,37553,21213 +bench,muster,release,25,3,120,40,0.040000,in,0.000,413.358,153.797,3.403,570.558,69.804,1797,38060,21558 +bench,muster,release,25,4,120,40,0.053333,in,0.000,422.489,171.137,3.407,597.033,69.614,1852,39706,22468 +bench,muster,release,25,5,120,40,0.066667,in,0.000,423.474,177.600,3.388,604.462,71.486,1847,39302,22257 +bench,muster,release,25,6,120,40,0.080000,in,0.000,428.282,180.551,3.410,612.243,75.213,1877,40971,23194 +bench,muster,release,25,7,120,40,0.093333,in,0.000,426.676,175.402,3.384,605.462,71.632,1928,41481,23520 +bench,muster,release,25,8,120,40,0.106667,in,0.000,439.985,189.070,3.492,632.547,75.135,1889,41911,23741 +bench,muster,release,25,9,120,40,0.120000,in,0.000,444.842,182.524,3.652,631.018,78.738,1940,41106,23342 +bench,muster,release,25,10,120,40,0.133333,in,0.000,452.518,181.736,3.380,637.634,73.287,1944,43699,24775 +bench,muster,release,25,11,120,40,0.146667,in,0.000,452.884,186.142,3.462,642.488,76.134,1984,43564,24708 +bench,muster,release,25,12,120,40,0.160000,in,0.000,469.711,192.957,3.444,666.112,76.322,2036,45575,25905 +bench,muster,release,25,13,120,40,0.173333,in,0.000,451.482,188.871,6.030,646.383,76.178,2080,44904,25612 +bench,muster,release,25,14,120,40,0.186667,in,0.000,470.475,195.512,3.481,669.468,75.800,2091,45644,25962 +bench,muster,release,25,15,120,40,0.200000,in,0.000,467.777,219.726,3.721,691.224,86.016,2113,47026,26709 +bench,muster,release,25,16,120,40,0.213333,in,0.000,468.908,203.036,3.684,675.628,80.328,2167,48124,27372 +bench,muster,release,25,17,120,40,0.226667,in,0.000,473.577,201.621,3.382,678.580,80.036,2160,48625,27696 +bench,muster,release,25,18,120,40,0.240000,in,0.000,469.866,201.569,3.364,674.799,76.812,2161,49055,27962 +bench,muster,release,25,19,120,40,0.253333,in,0.000,467.274,200.317,3.481,671.072,79.488,2239,51022,29051 +bench,muster,release,25,20,120,40,0.266667,in,0.000,475.521,202.842,3.426,681.789,80.184,2225,50144,28553 +bench,muster,release,25,21,120,40,0.280000,in,0.000,470.888,200.296,3.416,674.600,81.315,2213,49919,28473 +bench,muster,release,25,22,120,40,0.293333,in,0.000,477.922,208.716,3.386,690.024,82.593,2288,52564,29965 +bench,muster,release,25,23,120,40,0.306667,in,0.000,483.036,215.887,3.391,702.314,83.924,2328,53240,30408 +bench,muster,release,25,24,120,40,0.320000,in,0.000,488.707,213.538,3.490,705.735,83.917,2353,53053,30336 +bench,muster,release,25,25,120,40,0.333333,in,0.000,483.491,222.257,3.676,709.424,90.020,2366,54491,31137 +bench,muster,release,25,26,120,40,0.346667,in,0.000,509.741,216.996,3.411,730.148,84.853,2385,54704,31235 +bench,muster,release,25,27,120,40,0.360000,in,0.000,489.275,224.103,3.432,716.810,83.808,2431,56610,32318 +bench,muster,release,25,28,120,40,0.373333,in,0.000,493.372,234.665,3.482,731.519,88.043,2554,60807,34778 +bench,muster,release,25,29,120,40,0.386667,in,0.000,496.919,225.673,3.380,725.972,84.834,2608,58718,33703 +bench,muster,release,25,30,120,40,0.400000,in,0.000,510.309,252.021,3.558,765.888,94.622,2525,59168,33788 +bench,muster,release,25,31,120,40,0.413333,in,0.000,503.554,240.533,3.567,747.654,91.832,2552,58515,33517 +bench,muster,release,25,32,120,40,0.426667,in,0.000,517.857,237.554,3.432,758.843,91.861,2624,60876,34809 +bench,muster,release,25,33,120,40,0.440000,in,0.000,512.126,243.415,3.418,758.959,93.506,2606,61148,34999 +bench,muster,release,25,34,120,40,0.453333,in,0.000,517.127,239.814,3.412,760.353,89.425,2634,61012,34946 +bench,muster,release,25,35,120,40,0.466667,in,0.000,495.403,234.028,3.410,732.841,87.718,2734,64646,37022 +bench,muster,release,25,36,120,40,0.480000,in,0.000,494.831,231.163,3.447,729.441,89.783,2623,61813,35421 +bench,muster,release,25,37,120,40,0.493333,in,0.000,493.805,243.427,3.410,740.642,93.578,2682,64330,36862 +bench,muster,release,25,38,120,40,0.506667,in,0.000,497.250,236.319,3.366,736.935,94.350,2659,62635,35936 +bench,muster,release,25,39,120,40,0.520000,in,0.000,699.690,251.443,3.409,954.542,97.656,2720,63381,36276 +bench,muster,release,25,40,120,40,0.533333,in,0.000,707.691,261.320,3.390,972.401,96.864,2767,68701,39220 +bench,muster,release,25,41,120,40,0.546667,in,0.000,707.801,270.733,3.372,981.906,99.647,2839,69693,39811 +bench,muster,release,25,42,120,40,0.560000,in,0.000,918.396,273.542,3.581,1195.519,107.758,2913,71530,40788 +bench,muster,release,25,43,120,40,0.573333,in,0.000,931.428,248.161,3.379,1182.968,97.087,2856,67174,38542 +bench,muster,release,25,44,120,40,0.586667,in,0.000,909.379,302.064,4.128,1215.571,120.520,3109,85317,48132 +bench,muster,release,25,45,120,40,0.600000,in,0.000,1249.038,297.498,3.368,1549.904,107.735,3282,78684,44801 +bench,muster,release,25,46,120,40,0.613333,in,0.000,1322.326,399.609,4.609,1726.544,140.347,3160,77334,43944 +bench,muster,release,25,47,120,40,0.626667,in,0.000,1660.500,409.656,3.551,2073.707,128.984,3257,79258,44926 +bench,muster,release,25,48,120,40,0.640000,in,0.000,1650.453,299.858,3.485,1953.796,105.526,3228,80902,45900 +bench,muster,release,25,49,120,40,0.653333,in,0.000,1549.072,303.815,3.398,1856.285,106.124,3359,85982,48556 +bench,muster,release,25,50,120,40,0.666667,in,0.000,1722.722,344.246,3.550,2070.518,117.202,3360,84869,47992 +bench,muster,release,25,51,120,40,0.680000,in,0.000,1850.898,321.914,4.083,2176.895,136.004,3432,85323,48139 +bench,muster,release,25,52,120,40,0.693333,in,0.000,2021.781,318.616,3.379,2343.776,107.349,3495,88708,49857 +bench,muster,release,25,53,120,40,0.706667,in,0.000,2160.871,421.162,4.003,2586.036,121.791,3624,90921,51035 +bench,muster,release,25,54,120,40,0.720000,in,0.000,2523.187,383.755,4.418,2911.360,314.637,3632,89823,50344 +bench,muster,release,25,55,120,40,0.733333,in,0.000,2664.075,318.742,3.439,2986.256,104.925,3696,90255,50638 +bench,muster,release,25,56,120,40,0.746667,in,0.000,2376.591,310.312,4.231,2691.134,104.809,3762,86993,48538 +bench,muster,release,25,57,120,40,0.760000,in,0.000,4286.655,317.004,3.381,4607.040,104.544,3880,85985,47856 +bench,muster,release,25,58,120,40,0.773333,in,0.000,4489.556,411.221,5.470,4906.247,137.465,3887,84597,47010 +bench,muster,release,25,59,120,40,0.786667,in,0.000,4996.149,292.283,3.381,5291.813,104.219,4019,82654,45505 +bench,muster,release,25,60,120,40,0.800000,in,0.000,5313.787,396.142,4.250,5714.179,128.771,3916,83108,45764 +bench,muster,release,25,61,120,40,0.813333,in,0.000,4759.356,297.837,3.394,5060.587,101.616,3918,82154,44876 +bench,muster,release,25,62,120,40,0.826667,in,0.000,5321.325,361.353,4.042,5686.720,117.991,3858,77641,42352 +bench,muster,release,25,63,120,40,0.840000,in,0.000,5662.270,302.537,3.491,5968.298,102.798,3884,66087,35585 +bench,muster,release,25,64,120,40,0.853333,in,0.000,6075.045,272.907,4.200,6352.152,119.010,3685,58914,31773 +bench,muster,release,25,65,120,40,0.866667,in,0.000,6077.572,329.778,4.089,6411.439,123.247,3563,57116,30690 +bench,muster,release,25,66,120,40,0.880000,in,0.000,6489.279,285.886,4.229,6779.394,120.802,3363,63402,34436 +bench,muster,release,25,67,120,40,0.893333,in,0.000,6238.259,256.007,3.370,6497.636,105.035,3368,66725,36292 +bench,muster,release,25,68,120,40,0.906667,in,0.000,5588.079,257.539,3.379,5848.997,102.683,3115,62907,34239 +bench,muster,release,25,69,120,40,0.920000,in,0.000,6281.850,250.567,3.770,6536.187,111.885,2801,54351,29653 +bench,muster,release,25,70,120,40,0.933333,in,0.000,6731.091,238.767,3.785,6973.643,108.095,2215,42228,23142 +bench,muster,release,25,71,120,40,0.946667,in,0.000,6647.796,182.098,3.448,6833.342,92.572,1787,37164,20525 +bench,muster,release,25,72,120,40,0.960000,in,0.000,6995.953,191.716,3.894,7191.563,101.906,1682,30062,16489 +bench,muster,release,25,73,120,40,0.973333,in,0.000,6684.965,117.849,3.855,6806.669,93.719,896,16344,8951 +bench,muster,release,25,74,120,40,0.986667,in,0.000,5766.944,105.504,3.484,5875.932,76.387,702,12106,6598 +bench,muster,release,25,75,120,40,1.000000,out,0.000,5953.554,142.361,4.439,6100.354,97.120,779,13864,7536 +bench,muster,release,25,76,120,40,0.986667,out,0.000,6891.840,119.667,3.447,7014.954,79.049,928,16255,8906 +bench,muster,release,25,77,120,40,0.973333,out,0.000,5786.735,106.229,3.409,5896.373,75.519,707,11494,6273 +bench,muster,release,25,78,120,40,0.960000,out,0.000,5790.831,146.344,3.486,5940.661,84.048,1510,25604,13854 +bench,muster,release,25,79,120,40,0.946667,out,0.000,7182.091,191.606,3.753,7377.450,94.769,1571,29648,16245 +bench,muster,release,25,80,120,40,0.933333,out,0.000,6184.416,188.606,3.750,6376.772,90.418,1940,38832,21273 +bench,muster,release,25,81,120,40,0.920000,out,0.000,6894.681,233.330,3.994,7132.005,104.917,2250,47920,26382 +bench,muster,release,25,82,120,40,0.906667,out,0.000,7059.532,228.845,3.395,7291.772,102.776,2666,56027,30632 +bench,muster,release,25,83,120,40,0.893333,out,0.000,5338.090,261.261,3.407,5602.758,105.187,3191,63694,34779 +bench,muster,release,25,84,120,40,0.880000,out,0.000,6520.003,350.851,4.224,6875.078,138.605,3357,62466,33898 +bench,muster,release,25,85,120,40,0.866667,out,0.000,6218.681,267.657,4.275,6490.613,124.076,3455,58419,31597 +bench,muster,release,25,86,120,40,0.853333,out,0.000,5918.009,321.047,4.522,6243.578,137.545,3626,62677,33956 +bench,muster,release,25,87,120,40,0.840000,out,0.000,5634.132,318.764,3.558,5956.454,107.788,3711,70331,38191 +bench,muster,release,25,88,120,40,0.826667,out,0.000,5621.308,327.231,3.894,5952.433,118.694,3911,79400,43325 +bench,muster,release,25,89,120,40,0.813333,out,0.000,4673.904,294.063,3.406,4971.373,98.176,3833,80197,43989 +bench,muster,release,25,90,120,40,0.800000,out,0.000,4352.410,305.583,3.356,4661.349,102.965,3935,83984,46329 +bench,muster,release,25,91,120,40,0.786667,out,0.000,5162.080,369.930,4.852,5536.862,148.505,3938,85371,47153 +bench,muster,release,25,92,120,40,0.773333,out,0.000,4389.586,306.193,3.362,4699.141,106.576,4030,87197,48532 +bench,muster,release,25,93,120,40,0.760000,out,0.000,4024.380,299.272,3.392,4327.044,102.892,3901,86129,47992 +bench,muster,release,25,94,120,40,0.746667,out,0.000,2403.683,313.684,3.388,2720.755,104.677,3862,89061,49764 +bench,muster,release,25,95,120,40,0.733333,out,0.000,2180.127,313.983,3.394,2497.504,103.884,3756,90927,51049 +bench,muster,release,25,96,120,40,0.720000,out,0.000,2183.199,308.614,3.362,2495.175,101.430,3733,90782,50890 +bench,muster,release,25,97,120,40,0.706667,out,0.000,2029.279,327.540,3.560,2360.379,106.567,3653,89951,50430 +bench,muster,release,25,98,120,40,0.693333,out,0.000,2153.917,357.376,3.571,2514.864,107.534,3625,89636,50472 +bench,muster,release,25,99,120,40,0.680000,out,0.000,2006.130,329.318,3.568,2339.016,112.586,3512,87194,49214 +bench,muster,release,25,100,120,40,0.666667,out,0.000,1690.486,305.568,3.387,1999.441,106.292,3454,84385,47726 +bench,muster,release,25,101,120,40,0.653333,out,0.000,1560.041,306.637,3.400,1870.078,106.813,3375,85223,48159 +bench,muster,release,25,102,120,40,0.640000,out,0.000,1356.172,294.129,3.409,1653.710,104.619,3333,81863,46512 +bench,muster,release,25,103,120,40,0.626667,out,0.000,1353.499,296.350,3.357,1653.206,104.082,3216,79424,45062 +bench,muster,release,25,104,120,40,0.613333,out,0.000,1145.329,374.068,4.500,1523.897,134.751,3163,78589,44732 +bench,muster,release,25,105,120,40,0.600000,out,0.000,1168.156,294.689,6.156,1469.001,128.052,3110,76932,43749 +bench,muster,release,25,106,120,40,0.586667,out,0.000,1061.103,367.791,4.402,1433.296,142.797,3240,86120,48741 +bench,muster,release,25,107,120,40,0.573333,out,0.000,1130.133,334.443,4.139,1468.715,124.105,3001,70582,40520 +bench,muster,release,25,108,120,40,0.560000,out,0.000,1081.556,485.880,4.247,1571.683,122.835,2827,69999,39951 +bench,muster,release,25,109,120,40,0.546667,out,0.000,957.667,311.780,4.259,1273.706,127.036,2850,69467,39741 +bench,muster,release,25,110,120,40,0.533333,out,0.000,768.148,254.516,3.388,1026.052,97.680,2793,67492,38566 +bench,muster,release,25,111,120,40,0.520000,out,0.000,708.563,264.283,3.393,976.239,96.375,2753,65590,37547 +bench,muster,release,25,112,120,40,0.506667,out,0.000,501.265,247.486,3.380,752.131,92.876,2657,60692,34839 +bench,muster,release,25,113,120,40,0.493333,out,0.000,502.507,238.980,3.404,744.891,93.117,2621,64341,36836 +bench,muster,release,25,114,120,40,0.480000,out,0.000,501.012,230.330,3.382,734.724,89.139,2610,61559,35309 +bench,muster,release,25,115,120,40,0.466667,out,0.000,502.895,230.718,3.407,737.020,90.315,2569,58856,33692 +bench,muster,release,25,116,120,40,0.453333,out,0.000,505.777,237.550,3.361,746.688,88.202,2660,61995,35498 +bench,muster,release,25,117,120,40,0.440000,out,0.000,501.226,234.148,3.399,738.773,88.134,2566,60514,34626 +bench,muster,release,25,118,120,40,0.426667,out,0.000,499.753,231.653,3.485,734.891,87.739,2537,59327,33966 +bench,muster,release,25,119,120,40,0.413333,out,0.000,500.161,227.323,3.485,730.969,89.517,2554,59461,34055 +bench,muster,release,25,120,120,40,0.400000,out,0.000,498.965,229.174,3.478,731.617,86.977,2498,58342,33360 +bench,muster,release,25,121,120,40,0.386667,out,0.000,501.962,216.385,3.395,721.742,85.299,2484,57833,33080 +bench,muster,release,25,122,120,40,0.373333,out,0.000,565.413,310.198,4.654,880.265,115.656,2576,58790,33686 +bench,muster,release,25,123,120,40,0.360000,out,0.000,574.458,302.766,3.585,880.809,95.243,2486,56744,32452 +bench,muster,release,25,124,120,40,0.346667,out,0.000,625.756,270.876,3.922,900.554,88.895,2433,55569,31730 +bench,muster,release,25,125,120,40,0.333333,out,0.000,623.223,283.894,4.264,911.381,101.980,2417,56053,31968 +bench,muster,release,25,126,120,40,0.320000,out,0.000,765.591,302.315,5.333,1073.239,127.641,2391,54569,31171 +bench,muster,release,25,127,120,40,0.306667,out,0.000,632.374,284.347,4.658,921.379,112.980,2300,52394,29895 +bench,muster,release,25,128,120,40,0.293333,out,0.000,574.152,211.138,3.475,788.765,82.374,2283,51542,29406 +bench,muster,release,25,129,120,40,0.280000,out,0.000,484.737,212.214,3.480,700.431,83.178,2266,51737,29504 +bench,muster,release,25,130,120,40,0.266667,out,0.000,476.266,212.811,3.487,692.564,82.535,2257,51487,29321 +bench,muster,release,25,131,120,40,0.253333,out,0.000,578.034,245.911,4.393,828.338,100.290,2136,47152,26878 +bench,muster,release,25,132,120,40,0.240000,out,0.000,554.470,209.271,4.245,767.986,98.342,2122,47135,26829 +bench,muster,release,25,133,120,40,0.226667,out,0.000,621.147,235.832,5.782,862.761,90.889,2126,48265,27453 +bench,muster,release,25,134,120,40,0.213333,out,0.000,556.624,208.579,3.762,768.965,85.060,2109,46863,26695 +bench,muster,release,25,135,120,40,0.200000,out,0.000,559.288,217.353,3.506,780.147,77.759,2043,43841,24971 +bench,muster,release,25,136,120,40,0.186667,out,0.000,454.617,182.394,3.493,640.504,75.319,1970,42684,24286 +bench,muster,release,25,137,120,40,0.173333,out,0.000,455.110,216.433,4.700,676.243,99.697,1993,42951,24522 +bench,muster,release,25,138,120,40,0.160000,out,0.000,631.925,213.163,4.858,849.946,93.437,1923,42072,23959 +bench,muster,release,25,139,120,40,0.146667,out,0.000,583.734,245.313,4.212,833.259,89.521,1868,41022,23323 +bench,muster,release,25,140,120,40,0.133333,out,0.000,477.593,168.641,3.483,649.717,73.361,1857,38711,22076 +bench,muster,release,25,141,120,40,0.120000,out,0.000,427.544,152.189,3.488,583.221,69.453,1707,34468,19662 +bench,muster,release,25,142,120,40,0.106667,out,0.000,429.970,156.762,3.481,590.213,67.562,1652,35468,20124 +bench,muster,release,25,143,120,40,0.093333,out,0.000,423.044,153.867,3.394,580.305,67.421,1621,34747,19740 +bench,muster,release,25,144,120,40,0.080000,out,0.000,423.884,161.715,3.486,589.085,68.630,1642,35347,20069 +bench,muster,release,25,145,120,40,0.066667,out,0.000,419.418,154.219,3.497,577.134,70.285,1603,33405,18967 +bench,muster,release,25,146,120,40,0.053333,out,0.000,412.073,149.052,3.494,564.619,66.668,1513,30696,17466 +bench,muster,release,25,147,120,40,0.040000,out,0.000,403.454,143.387,3.496,550.337,65.441,1512,30299,17259 +bench,muster,release,25,148,120,40,0.026667,out,0.000,401.037,144.837,4.180,550.054,69.941,1475,30195,17131 +bench,muster,release,25,149,120,40,0.013333,out,0.000,473.289,141.233,3.402,617.924,63.175,1508,30929,17505 diff --git a/docs/performance/motion-comparison/current-240x80-default-0.csv b/docs/performance/motion-comparison/current-240x80-default-0.csv new file mode 100644 index 000000000..4f7579bcb --- /dev/null +++ b/docs/performance/motion-comparison/current-240x80-default-0.csv @@ -0,0 +1,151 @@ +mode,variant,build,fps,frame,width,height,phase,direction,interval_us,widget_us,output_us,reset_us,total_us,diff_probe_us,changed_cells,ansi_bytes,write_calls +bench,platoon,release,25,0,240,80,0.000000,in,0.000,1937.550,779.636,14.992,2732.178,258.680,19200,194459,112925 +bench,platoon,release,25,1,240,80,0.013333,in,0.000,1913.696,708.267,19.972,2641.935,384.677,8513,149522,84179 +bench,platoon,release,25,2,240,80,0.026667,in,0.000,2244.851,901.075,19.030,3164.956,375.743,8549,151044,85160 +bench,platoon,release,25,3,240,80,0.040000,in,0.000,2188.945,777.981,16.380,2983.306,315.859,8695,160176,90215 +bench,platoon,release,25,4,240,80,0.053333,in,0.000,2094.284,861.010,16.096,2971.390,377.326,8809,160643,90498 +bench,platoon,release,25,5,240,80,0.066667,in,0.000,2134.781,733.430,18.175,2886.386,358.466,8878,160414,90520 +bench,platoon,release,25,6,240,80,0.080000,in,0.000,1925.864,691.008,13.663,2630.535,279.188,8952,165967,93654 +bench,platoon,release,25,7,240,80,0.093333,in,0.000,2082.850,782.631,15.551,2881.032,325.532,9188,174356,98320 +bench,platoon,release,25,8,240,80,0.106667,in,0.000,2101.906,855.786,18.290,2975.982,363.155,9195,176929,99984 +bench,platoon,release,25,9,240,80,0.120000,in,0.000,2108.921,831.806,17.661,2958.388,364.341,9460,177491,100274 +bench,platoon,release,25,10,240,80,0.133333,in,0.000,2099.852,771.173,16.571,2887.596,340.014,9585,183742,103805 +bench,platoon,release,25,11,240,80,0.146667,in,0.000,1911.872,777.607,14.774,2704.253,295.495,9632,182595,103296 +bench,platoon,release,25,12,240,80,0.160000,in,0.000,1920.757,1001.889,17.278,2939.924,382.474,9746,192506,108767 +bench,platoon,release,25,13,240,80,0.173333,in,0.000,2027.205,878.296,13.609,2919.110,364.158,10025,195925,111052 +bench,platoon,release,25,14,240,80,0.186667,in,0.000,1866.858,751.664,13.910,2632.432,301.841,10156,200436,113363 +bench,platoon,release,25,15,240,80,0.200000,in,0.000,1842.428,775.865,13.584,2631.877,308.079,10260,202411,114620 +bench,platoon,release,25,16,240,80,0.213333,in,0.000,2143.245,1034.298,15.609,3193.152,371.194,10441,208127,117756 +bench,platoon,release,25,17,240,80,0.226667,in,0.000,2300.099,912.916,15.533,3228.548,359.249,10505,211078,119543 +bench,platoon,release,25,18,240,80,0.240000,in,0.000,2086.753,907.240,14.034,3008.027,324.130,10515,217005,122810 +bench,platoon,release,25,19,240,80,0.253333,in,0.000,1841.998,835.815,13.573,2691.386,316.603,10642,219078,124145 +bench,platoon,release,25,20,240,80,0.266667,in,0.000,2392.587,1035.826,18.708,3447.121,387.604,10610,222931,126116 +bench,platoon,release,25,21,240,80,0.280000,in,0.000,2220.056,954.920,17.310,3192.286,421.054,10661,223997,126948 +bench,platoon,release,25,22,240,80,0.293333,in,0.000,2456.648,1063.427,18.817,3538.892,402.429,10709,224692,127423 +bench,platoon,release,25,23,240,80,0.306667,in,0.000,2162.336,961.027,18.756,3142.119,401.874,10573,223042,126390 +bench,platoon,release,25,24,240,80,0.320000,in,0.000,2019.441,1020.621,15.987,3056.049,416.730,10647,227761,129146 +bench,platoon,release,25,25,240,80,0.333333,in,0.000,2298.655,1083.569,16.524,3398.748,437.733,10669,229855,130349 +bench,platoon,release,25,26,240,80,0.346667,in,0.000,2391.412,1108.350,17.731,3517.493,462.697,10603,232090,131541 +bench,platoon,release,25,27,240,80,0.360000,in,0.000,2330.789,1059.111,18.019,3407.919,399.170,10733,236114,133791 +bench,platoon,release,25,28,240,80,0.373333,in,0.000,2183.514,946.199,16.121,3145.834,353.459,10987,239137,135749 +bench,platoon,release,25,29,240,80,0.386667,in,0.000,2411.641,985.195,14.356,3411.192,414.772,11049,242870,137844 +bench,platoon,release,25,30,240,80,0.400000,in,0.000,2290.572,940.540,13.512,3244.624,390.427,10738,240478,136389 +bench,platoon,release,25,31,240,80,0.413333,in,0.000,2211.496,1124.053,19.913,3355.462,469.180,10758,242490,137545 +bench,platoon,release,25,32,240,80,0.426667,in,0.000,2558.390,1066.429,18.737,3643.556,439.389,10767,245352,139141 +bench,platoon,release,25,33,240,80,0.440000,in,0.000,2505.353,1090.544,17.028,3612.925,412.786,10826,248687,141085 +bench,platoon,release,25,34,240,80,0.453333,in,0.000,2364.218,1188.519,13.665,3566.402,386.283,10842,249084,141412 +bench,platoon,release,25,35,240,80,0.466667,in,0.000,1972.076,1331.027,19.752,3322.855,488.021,11041,252418,143475 +bench,platoon,release,25,36,240,80,0.480000,in,0.000,2383.553,1084.711,13.656,3481.920,361.194,10698,253617,144024 +bench,platoon,release,25,37,240,80,0.493333,in,0.000,2147.764,1229.227,19.793,3396.784,481.758,10768,254186,144316 +bench,platoon,release,25,38,240,80,0.506667,in,0.000,2513.925,1069.186,13.664,3596.775,370.000,10777,253743,144066 +bench,platoon,release,25,39,240,80,0.520000,in,0.000,3486.424,1349.506,13.954,4849.884,454.549,11125,262337,148552 +bench,platoon,release,25,40,240,80,0.533333,in,0.000,3233.434,1100.893,13.718,4348.045,389.279,11269,275092,155701 +bench,platoon,release,25,41,240,80,0.546667,in,0.000,3146.021,1280.861,18.653,4445.535,509.023,11354,268948,152567 +bench,platoon,release,25,42,240,80,0.560000,in,0.000,4591.166,1310.801,15.194,5917.161,542.366,11862,290656,164144 +bench,platoon,release,25,43,240,80,0.573333,in,0.000,4261.627,1176.333,13.539,5451.499,406.531,12137,295508,167113 +bench,platoon,release,25,44,240,80,0.586667,in,0.000,4405.817,1333.062,18.087,5756.966,468.328,12757,326898,184140 +bench,platoon,release,25,45,240,80,0.600000,in,0.000,5727.839,1277.056,13.851,7018.746,507.374,13107,319705,180427 +bench,platoon,release,25,46,240,80,0.613333,in,0.000,4982.826,1365.743,15.234,6363.803,502.540,12687,313454,176880 +bench,platoon,release,25,47,240,80,0.626667,in,0.000,5952.493,1168.517,19.088,7140.098,521.801,12999,320513,180240 +bench,platoon,release,25,48,240,80,0.640000,in,0.000,6414.984,1350.818,15.602,7781.404,538.591,12936,322559,181547 +bench,platoon,release,25,49,240,80,0.653333,in,0.000,6579.922,1391.761,19.369,7991.052,522.708,13335,342373,192156 +bench,platoon,release,25,50,240,80,0.666667,in,0.000,7560.973,1352.654,15.659,8929.286,542.574,13526,338687,190243 +bench,platoon,release,25,51,240,80,0.680000,in,0.000,7414.739,1461.788,19.682,8896.209,585.765,13929,345740,193656 +bench,platoon,release,25,52,240,80,0.693333,in,0.000,9331.128,1184.275,13.519,10528.922,423.600,14319,357230,199625 +bench,platoon,release,25,53,240,80,0.706667,in,0.000,9088.219,1317.196,16.287,10421.702,549.417,14689,365464,203917 +bench,platoon,release,25,54,240,80,0.720000,in,0.000,10843.454,1477.680,13.902,12335.036,493.823,14851,366452,204275 +bench,platoon,release,25,55,240,80,0.733333,in,0.000,9948.839,1567.386,21.321,11537.546,556.296,14941,359927,200701 +bench,platoon,release,25,56,240,80,0.746667,in,0.000,9665.981,1244.861,16.175,10927.017,446.954,15242,356851,198193 +bench,platoon,release,25,57,240,80,0.760000,in,0.000,16601.601,1237.167,15.139,17853.907,411.518,15567,345743,191384 +bench,platoon,release,25,58,240,80,0.773333,in,0.000,16339.732,1218.620,14.125,17572.477,444.187,15797,344627,190490 +bench,platoon,release,25,59,240,80,0.786667,in,0.000,17383.303,1146.502,19.528,18549.333,423.010,15962,338234,185982 +bench,platoon,release,25,60,240,80,0.800000,in,0.000,18340.126,1187.725,14.056,19541.907,403.249,15888,336821,184855 +bench,platoon,release,25,61,240,80,0.813333,in,0.000,20013.651,1381.400,13.647,21408.698,459.018,15757,321133,174643 +bench,platoon,release,25,62,240,80,0.826667,in,0.000,19283.656,1447.244,17.862,20748.762,535.910,15402,305679,165813 +bench,platoon,release,25,63,240,80,0.840000,in,0.000,19760.113,1105.631,13.688,20879.432,401.306,15355,277416,149008 +bench,platoon,release,25,64,240,80,0.853333,in,0.000,21189.156,1065.031,14.008,22268.195,409.556,14616,272555,146776 +bench,platoon,release,25,65,240,80,0.866667,in,0.000,22138.371,1167.648,13.650,23319.669,404.694,14900,262575,140438 +bench,platoon,release,25,66,240,80,0.880000,in,0.000,21344.970,958.822,13.725,22317.517,408.510,13805,247013,132473 +bench,platoon,release,25,67,240,80,0.893333,in,0.000,21997.474,953.781,13.623,22964.878,414.358,12394,232906,125334 +bench,platoon,release,25,68,240,80,0.906667,in,0.000,23086.356,1138.603,16.102,24241.061,418.569,11993,220567,118283 +bench,platoon,release,25,69,240,80,0.920000,in,0.000,24187.189,874.518,17.449,25079.156,528.315,10741,191356,102637 +bench,platoon,release,25,70,240,80,0.933333,in,0.000,25360.420,759.953,14.304,26134.677,391.157,9360,154322,82443 +bench,platoon,release,25,71,240,80,0.946667,in,0.000,25807.054,675.413,13.693,26496.160,368.398,7402,135857,73214 +bench,platoon,release,25,72,240,80,0.960000,in,0.000,25237.351,602.795,13.781,25853.927,345.758,4500,83134,45157 +bench,platoon,release,25,73,240,80,0.973333,in,0.000,23939.200,607.797,14.078,24561.075,371.250,2756,57362,31326 +bench,platoon,release,25,74,240,80,0.986667,in,0.000,23070.408,387.263,13.740,23471.411,305.124,1725,26904,14554 +bench,platoon,release,25,75,240,80,1.000000,out,0.000,21525.178,445.157,13.652,21983.987,302.469,3449,60475,32655 +bench,platoon,release,25,76,240,80,0.986667,out,0.000,23785.569,448.881,13.656,24248.106,296.366,2964,55524,30024 +bench,platoon,release,25,77,240,80,0.973333,out,0.000,24803.118,379.768,13.741,25196.627,297.512,1687,27879,15047 +bench,platoon,release,25,78,240,80,0.960000,out,0.000,25565.674,555.170,16.990,26137.834,382.568,2814,63225,34699 +bench,platoon,release,25,79,240,80,0.946667,out,0.000,27104.271,529.320,13.696,27647.287,324.849,4481,87577,47559 +bench,platoon,release,25,80,240,80,0.933333,out,0.000,24471.725,922.460,14.628,25408.813,445.279,7399,162215,88483 +bench,platoon,release,25,81,240,80,0.920000,out,0.000,26585.201,934.507,15.891,27535.599,511.271,9382,169381,90924 +bench,platoon,release,25,82,240,80,0.906667,out,0.000,25609.751,1013.597,14.895,26638.243,525.797,10625,210911,113982 +bench,platoon,release,25,83,240,80,0.893333,out,0.000,24808.550,899.163,13.520,25721.233,411.534,12098,227654,122720 +bench,platoon,release,25,84,240,80,0.880000,out,0.000,24575.668,1380.553,19.187,25975.408,568.386,12337,249197,134810 +bench,platoon,release,25,85,240,80,0.866667,out,0.000,23083.102,1094.845,14.292,24192.239,515.618,13893,258853,139178 +bench,platoon,release,25,86,240,80,0.853333,out,0.000,20484.087,1099.215,14.080,21597.382,419.229,14986,280634,151289 +bench,platoon,release,25,87,240,80,0.840000,out,0.000,19958.772,1056.521,14.339,21029.632,423.323,14664,284207,153637 +bench,platoon,release,25,88,240,80,0.826667,out,0.000,18887.259,1114.616,13.611,20015.486,402.235,15426,318563,173490 +bench,platoon,release,25,89,240,80,0.813333,out,0.000,18968.181,1131.192,13.628,20113.001,388.420,15402,318450,173516 +bench,platoon,release,25,90,240,80,0.800000,out,0.000,18329.377,1121.395,15.607,19466.379,399.751,15724,339817,186926 +bench,platoon,release,25,91,240,80,0.786667,out,0.000,18476.502,1487.587,20.475,19984.564,560.098,15733,338261,186448 +bench,platoon,release,25,92,240,80,0.773333,out,0.000,17369.679,1323.093,13.746,18706.518,417.279,15974,353173,195550 +bench,platoon,release,25,93,240,80,0.760000,out,0.000,17051.067,1200.675,13.680,18265.422,413.093,15757,348393,193004 +bench,platoon,release,25,94,240,80,0.746667,out,0.000,10846.253,1498.620,17.689,12362.562,533.477,15623,360811,200644 +bench,platoon,release,25,95,240,80,0.733333,out,0.000,9162.724,1576.432,13.678,10752.834,416.736,15233,365451,203888 +bench,platoon,release,25,96,240,80,0.720000,out,0.000,10398.795,1299.793,14.233,11712.821,406.065,14958,366589,204476 +bench,platoon,release,25,97,240,80,0.706667,out,0.000,8144.863,1317.738,21.383,9483.984,583.811,14816,369804,206485 +bench,platoon,release,25,98,240,80,0.693333,out,0.000,9301.960,1195.610,14.536,10512.106,408.747,14605,360392,201578 +bench,platoon,release,25,99,240,80,0.680000,out,0.000,8431.979,1362.025,15.796,9809.800,563.704,14316,351552,197196 +bench,platoon,release,25,100,240,80,0.666667,out,0.000,7042.152,1152.582,14.473,8209.207,425.248,13909,339796,191031 +bench,platoon,release,25,101,240,80,0.653333,out,0.000,8162.728,1224.483,13.728,9400.939,417.745,13478,342745,192445 +bench,platoon,release,25,102,240,80,0.640000,out,0.000,5928.092,1458.987,19.576,7406.655,579.421,13375,326929,184253 +bench,platoon,release,25,103,240,80,0.626667,out,0.000,6310.323,1089.960,15.078,7415.361,405.818,12939,322615,181581 +bench,platoon,release,25,104,240,80,0.613333,out,0.000,5534.217,1376.465,17.268,6927.950,475.451,12950,317712,179490 +bench,platoon,release,25,105,240,80,0.600000,out,0.000,5446.996,1116.295,14.124,6577.415,408.765,12595,311338,175618 +bench,platoon,release,25,106,240,80,0.586667,out,0.000,3650.672,1401.371,22.194,5074.237,564.912,13060,325547,183729 +bench,platoon,release,25,107,240,80,0.573333,out,0.000,4457.212,1470.492,24.132,5951.836,566.178,12640,303237,171675 +bench,platoon,release,25,108,240,80,0.560000,out,0.000,4415.892,1046.035,15.488,5477.415,404.379,12156,293861,166249 +bench,platoon,release,25,109,240,80,0.546667,out,0.000,2943.370,1390.967,20.773,4355.110,445.340,11884,273635,155421 +bench,platoon,release,25,110,240,80,0.533333,out,0.000,2851.338,1014.858,15.831,3882.027,389.537,11406,275351,155918 +bench,platoon,release,25,111,240,80,0.520000,out,0.000,3394.413,1208.722,16.257,4619.392,395.591,11324,268202,152045 +bench,platoon,release,25,112,240,80,0.506667,out,0.000,2562.648,1343.902,17.939,3924.489,504.969,11196,259199,147353 +bench,platoon,release,25,113,240,80,0.493333,out,0.000,2622.206,1313.780,19.245,3955.231,455.680,10874,257452,146209 +bench,platoon,release,25,114,240,80,0.480000,out,0.000,2597.617,1056.099,26.237,3679.953,508.254,10784,253613,143969 +bench,platoon,release,25,115,240,80,0.466667,out,0.000,2785.256,1265.619,19.772,4070.647,480.454,10744,249743,141800 +bench,platoon,release,25,116,240,80,0.453333,out,0.000,2615.576,1137.804,21.819,3775.199,477.533,11246,255656,145331 +bench,platoon,release,25,117,240,80,0.440000,out,0.000,2590.317,1219.746,20.279,3830.342,438.589,10742,248048,140789 +bench,platoon,release,25,118,240,80,0.426667,out,0.000,2646.471,1276.283,25.779,3948.533,481.620,10713,244880,138965 +bench,platoon,release,25,119,240,80,0.413333,out,0.000,2732.377,1157.071,20.068,3909.516,453.002,10734,243182,138004 +bench,platoon,release,25,120,240,80,0.400000,out,0.000,2504.062,1122.477,21.023,3647.562,473.767,10619,238948,135532 +bench,platoon,release,25,121,240,80,0.386667,out,0.000,2538.780,1081.902,17.376,3638.058,452.055,10574,236144,133860 +bench,platoon,release,25,122,240,80,0.373333,out,0.000,2378.222,1454.069,19.659,3851.950,472.049,10808,231702,131655 +bench,platoon,release,25,123,240,80,0.360000,out,0.000,2494.362,1075.844,16.772,3586.978,440.210,10623,230138,130654 +bench,platoon,release,25,124,240,80,0.346667,out,0.000,2389.291,871.835,13.890,3275.016,329.827,10531,227815,129201 +bench,platoon,release,25,125,240,80,0.333333,out,0.000,2480.695,1158.125,21.015,3659.835,450.780,10364,223770,126872 +bench,platoon,release,25,126,240,80,0.320000,out,0.000,2531.892,1329.932,21.744,3883.568,453.122,10479,223908,127027 +bench,platoon,release,25,127,240,80,0.306667,out,0.000,2683.219,1116.360,16.507,3816.086,386.687,10369,218771,124064 +bench,platoon,release,25,128,240,80,0.293333,out,0.000,2335.706,929.322,16.814,3281.842,323.100,10342,217260,123275 +bench,platoon,release,25,129,240,80,0.280000,out,0.000,2735.238,1148.472,14.154,3897.864,367.898,10264,216120,122511 +bench,platoon,release,25,130,240,80,0.266667,out,0.000,2358.854,1052.473,16.469,3427.796,377.745,10319,214922,121798 +bench,platoon,release,25,131,240,80,0.253333,out,0.000,2637.074,1084.773,18.678,3740.525,380.177,10110,200382,113543 +bench,platoon,release,25,132,240,80,0.240000,out,0.000,2306.453,999.881,19.503,3325.837,373.553,10194,209889,118688 +bench,platoon,release,25,133,240,80,0.226667,out,0.000,2423.267,926.717,19.071,3369.055,330.656,10324,208269,117959 +bench,platoon,release,25,134,240,80,0.213333,out,0.000,2263.311,939.233,18.970,3221.514,384.096,10272,203466,115166 +bench,platoon,release,25,135,240,80,0.200000,out,0.000,2186.308,1120.608,24.454,3331.370,431.136,10164,199193,112834 +bench,platoon,release,25,136,240,80,0.186667,out,0.000,2403.270,985.744,19.467,3408.481,372.251,10060,198931,112556 +bench,platoon,release,25,137,240,80,0.173333,out,0.000,2266.745,1360.325,22.262,3649.332,421.552,10125,198507,112468 +bench,platoon,release,25,138,240,80,0.160000,out,0.000,2335.181,942.373,15.865,3293.419,373.126,9983,194969,110219 +bench,platoon,release,25,139,240,80,0.146667,out,0.000,2044.997,819.922,17.922,2882.841,373.555,9903,187424,106059 +bench,platoon,release,25,140,240,80,0.133333,out,0.000,2483.292,904.084,16.055,3403.431,328.804,9797,185466,104784 +bench,platoon,release,25,141,240,80,0.120000,out,0.000,2278.978,712.174,15.118,3006.270,316.864,9593,178995,101161 +bench,platoon,release,25,142,240,80,0.106667,out,0.000,2078.057,810.832,15.191,2904.080,344.038,9419,175819,99269 +bench,platoon,release,25,143,240,80,0.093333,out,0.000,1900.087,778.846,16.225,2695.158,343.795,9331,173216,97779 +bench,platoon,release,25,144,240,80,0.080000,out,0.000,2405.594,1107.033,15.581,3528.208,380.962,9239,172930,97550 +bench,platoon,release,25,145,240,80,0.066667,out,0.000,2048.074,831.395,13.745,2893.214,342.894,9120,164310,92751 +bench,platoon,release,25,146,240,80,0.053333,out,0.000,1977.334,799.518,14.093,2790.945,286.366,9002,164447,92611 +bench,platoon,release,25,147,240,80,0.040000,out,0.000,1719.888,643.214,14.172,2377.274,277.643,8896,155027,87394 +bench,platoon,release,25,148,240,80,0.026667,out,0.000,1691.615,660.175,13.713,2365.503,275.876,8713,154631,87131 +bench,platoon,release,25,149,240,80,0.013333,out,0.000,1859.860,665.292,17.583,2542.735,321.656,8557,150590,84799 diff --git a/docs/performance/motion-comparison/current-240x80-default-1.csv b/docs/performance/motion-comparison/current-240x80-default-1.csv new file mode 100644 index 000000000..d6ca373c2 --- /dev/null +++ b/docs/performance/motion-comparison/current-240x80-default-1.csv @@ -0,0 +1,151 @@ +mode,variant,build,fps,frame,width,height,phase,direction,interval_us,widget_us,output_us,reset_us,total_us,diff_probe_us,changed_cells,ansi_bytes,write_calls +bench,platoon,release,25,0,240,80,0.000000,in,0.000,1687.554,721.481,14.250,2423.285,216.000,19200,194459,112925 +bench,platoon,release,25,1,240,80,0.013333,in,0.000,1778.749,662.516,16.064,2457.329,290.010,8513,149522,84179 +bench,platoon,release,25,2,240,80,0.026667,in,0.000,1890.718,749.315,16.456,2656.489,325.562,8549,151044,85160 +bench,platoon,release,25,3,240,80,0.040000,in,0.000,1778.606,656.252,13.556,2448.414,273.178,8695,160176,90215 +bench,platoon,release,25,4,240,80,0.053333,in,0.000,1707.864,648.948,13.522,2370.334,276.101,8809,160643,90498 +bench,platoon,release,25,5,240,80,0.066667,in,0.000,1740.103,661.620,13.502,2415.225,277.198,8878,160414,90520 +bench,platoon,release,25,6,240,80,0.080000,in,0.000,1732.446,666.084,14.339,2412.869,276.684,8952,165967,93654 +bench,platoon,release,25,7,240,80,0.093333,in,0.000,1756.033,746.225,13.832,2516.090,289.663,9188,174356,98320 +bench,platoon,release,25,8,240,80,0.106667,in,0.000,1921.408,789.270,15.043,2725.721,326.357,9195,176929,99984 +bench,platoon,release,25,9,240,80,0.120000,in,0.000,2308.658,722.488,13.501,3044.647,290.142,9460,177491,100274 +bench,platoon,release,25,10,240,80,0.133333,in,0.000,1801.338,731.745,13.661,2546.744,289.285,9585,183742,103805 +bench,platoon,release,25,11,240,80,0.146667,in,0.000,1803.319,736.039,13.499,2552.857,291.787,9632,182595,103296 +bench,platoon,release,25,12,240,80,0.160000,in,0.000,1844.771,733.921,13.525,2592.217,294.633,9746,192506,108767 +bench,platoon,release,25,13,240,80,0.173333,in,0.000,1835.913,751.952,13.497,2601.362,296.469,10025,195925,111052 +bench,platoon,release,25,14,240,80,0.186667,in,0.000,1842.636,775.433,13.497,2631.566,300.173,10156,200436,113363 +bench,platoon,release,25,15,240,80,0.200000,in,0.000,1868.109,729.143,13.406,2610.658,307.446,10260,202411,114620 +bench,platoon,release,25,16,240,80,0.213333,in,0.000,1944.111,815.763,14.231,2774.105,335.537,10441,208127,117756 +bench,platoon,release,25,17,240,80,0.226667,in,0.000,2490.186,972.071,15.432,3477.689,364.588,10505,211078,119543 +bench,platoon,release,25,18,240,80,0.240000,in,0.000,1897.408,758.423,13.409,2669.240,317.883,10515,217005,122810 +bench,platoon,release,25,19,240,80,0.253333,in,0.000,1849.516,829.909,13.965,2693.390,319.445,10642,219078,124145 +bench,platoon,release,25,20,240,80,0.266667,in,0.000,1984.982,843.790,13.407,2842.179,321.223,10610,222931,126116 +bench,platoon,release,25,21,240,80,0.280000,in,0.000,1922.804,848.056,14.085,2784.945,345.340,10661,223997,126948 +bench,platoon,release,25,22,240,80,0.293333,in,0.000,2073.662,1105.818,16.398,3195.878,399.403,10709,224692,127423 +bench,platoon,release,25,23,240,80,0.306667,in,0.000,2059.612,828.240,13.404,2901.256,329.243,10573,223042,126390 +bench,platoon,release,25,24,240,80,0.320000,in,0.000,1936.251,834.400,13.548,2784.199,333.107,10647,227761,129146 +bench,platoon,release,25,25,240,80,0.333333,in,0.000,1966.900,856.028,13.822,2836.750,335.366,10669,229855,130349 +bench,platoon,release,25,26,240,80,0.346667,in,0.000,1947.204,913.109,13.560,2873.873,334.140,10603,232090,131541 +bench,platoon,release,25,27,240,80,0.360000,in,0.000,2104.634,1313.060,13.536,3431.230,413.023,10733,236114,133791 +bench,platoon,release,25,28,240,80,0.373333,in,0.000,2028.577,909.421,13.551,2951.549,346.091,10987,239137,135749 +bench,platoon,release,25,29,240,80,0.386667,in,0.000,2075.066,1004.200,13.850,3093.116,395.038,11049,242870,137844 +bench,platoon,release,25,30,240,80,0.400000,in,0.000,2103.809,945.162,14.268,3063.239,367.255,10738,240478,136389 +bench,platoon,release,25,31,240,80,0.413333,in,0.000,1989.878,912.701,13.515,2916.094,350.199,10758,242490,137545 +bench,platoon,release,25,32,240,80,0.426667,in,0.000,1978.458,923.962,13.515,2915.935,349.297,10767,245352,139141 +bench,platoon,release,25,33,240,80,0.440000,in,0.000,2046.356,888.908,13.518,2948.782,348.900,10826,248687,141085 +bench,platoon,release,25,34,240,80,0.453333,in,0.000,2028.712,989.256,15.052,3033.020,379.316,10842,249084,141412 +bench,platoon,release,25,35,240,80,0.466667,in,0.000,2245.396,941.251,13.481,3200.128,348.178,11041,252418,143475 +bench,platoon,release,25,36,240,80,0.480000,in,0.000,1982.443,927.201,21.906,2931.550,461.321,10698,253617,144024 +bench,platoon,release,25,37,240,80,0.493333,in,0.000,2158.486,943.172,14.276,3115.934,352.747,10768,254186,144316 +bench,platoon,release,25,38,240,80,0.506667,in,0.000,1994.145,935.758,17.908,2947.811,453.654,10777,253743,144066 +bench,platoon,release,25,39,240,80,0.520000,in,0.000,3043.421,1416.800,13.951,4474.172,436.083,11125,262337,148552 +bench,platoon,release,25,40,240,80,0.533333,in,0.000,3025.379,996.476,13.440,4035.295,398.845,11269,275092,155701 +bench,platoon,release,25,41,240,80,0.546667,in,0.000,3067.357,1237.289,15.914,4320.560,415.842,11354,268948,152567 +bench,platoon,release,25,42,240,80,0.560000,in,0.000,3716.454,995.430,13.456,4725.340,392.315,11862,290656,164144 +bench,platoon,release,25,43,240,80,0.573333,in,0.000,3659.106,1034.898,16.385,4710.389,434.580,12137,295508,167113 +bench,platoon,release,25,44,240,80,0.586667,in,0.000,3947.196,1595.446,14.204,5556.846,462.478,12757,326898,184140 +bench,platoon,release,25,45,240,80,0.600000,in,0.000,4495.805,1128.150,13.422,5637.377,413.690,13107,319705,180427 +bench,platoon,release,25,46,240,80,0.613333,in,0.000,4541.295,1098.101,15.088,5654.484,441.178,12687,313454,176880 +bench,platoon,release,25,47,240,80,0.626667,in,0.000,6350.361,1061.869,13.525,7425.755,408.204,12999,320513,180240 +bench,platoon,release,25,48,240,80,0.640000,in,0.000,5368.823,1125.608,13.444,6507.875,407.037,12936,322559,181547 +bench,platoon,release,25,49,240,80,0.653333,in,0.000,6218.786,1158.754,13.814,7391.354,420.294,13335,342373,192156 +bench,platoon,release,25,50,240,80,0.666667,in,0.000,6960.271,1283.472,13.574,8257.317,461.245,13526,338687,190243 +bench,platoon,release,25,51,240,80,0.680000,in,0.000,7050.877,1176.956,13.462,8241.295,455.507,13929,345740,193656 +bench,platoon,release,25,52,240,80,0.693333,in,0.000,8556.315,1202.351,13.531,9772.197,417.805,14319,357230,199625 +bench,platoon,release,25,53,240,80,0.706667,in,0.000,7862.925,1326.244,14.338,9203.507,523.278,14689,365464,203917 +bench,platoon,release,25,54,240,80,0.720000,in,0.000,9211.379,1193.754,14.606,10419.739,442.962,14851,366452,204275 +bench,platoon,release,25,55,240,80,0.733333,in,0.000,9163.418,1446.050,13.625,10623.093,414.911,14941,359927,200701 +bench,platoon,release,25,56,240,80,0.746667,in,0.000,10168.309,1135.943,13.701,11317.953,412.055,15242,356851,198193 +bench,platoon,release,25,57,240,80,0.760000,in,0.000,16854.932,1173.491,20.836,18049.259,564.316,15567,345743,191384 +bench,platoon,release,25,58,240,80,0.773333,in,0.000,17065.294,1363.665,14.944,18443.903,435.858,15797,344627,190490 +bench,platoon,release,25,59,240,80,0.786667,in,0.000,17842.605,1110.837,13.564,18967.006,412.893,15962,338234,185982 +bench,platoon,release,25,60,240,80,0.800000,in,0.000,18188.448,1302.959,15.100,19506.507,491.814,15888,336821,184855 +bench,platoon,release,25,61,240,80,0.813333,in,0.000,19956.937,1123.582,14.530,21095.049,450.880,15757,321133,174643 +bench,platoon,release,25,62,240,80,0.826667,in,0.000,18817.886,1112.422,14.437,19944.745,407.155,15402,305679,165813 +bench,platoon,release,25,63,240,80,0.840000,in,0.000,20974.946,1045.457,14.184,22034.587,418.411,15355,277416,149008 +bench,platoon,release,25,64,240,80,0.853333,in,0.000,21242.270,1010.415,14.317,22267.002,407.622,14616,272555,146776 +bench,platoon,release,25,65,240,80,0.866667,in,0.000,22673.130,1059.024,13.535,23745.689,401.302,14900,262575,140438 +bench,platoon,release,25,66,240,80,0.880000,in,0.000,21115.431,986.364,13.559,22115.354,402.943,13805,247013,132473 +bench,platoon,release,25,67,240,80,0.893333,in,0.000,21118.122,920.449,13.407,22051.978,416.561,12394,232906,125334 +bench,platoon,release,25,68,240,80,0.906667,in,0.000,22715.384,973.632,15.002,23704.018,426.432,11993,220567,118283 +bench,platoon,release,25,69,240,80,0.920000,in,0.000,23119.637,842.838,15.409,23977.884,466.969,10741,191356,102637 +bench,platoon,release,25,70,240,80,0.933333,in,0.000,23328.452,721.921,13.621,24063.994,388.762,9360,154322,82443 +bench,platoon,release,25,71,240,80,0.946667,in,0.000,23646.258,683.228,13.571,24343.057,365.610,7402,135857,73214 +bench,platoon,release,25,72,240,80,0.960000,in,0.000,23860.954,529.042,13.904,24403.900,329.085,4500,83134,45157 +bench,platoon,release,25,73,240,80,0.973333,in,0.000,24210.671,446.081,13.805,24670.557,311.124,2756,57362,31326 +bench,platoon,release,25,74,240,80,0.986667,in,0.000,23631.189,363.478,13.521,24008.188,296.576,1725,26904,14554 +bench,platoon,release,25,75,240,80,1.000000,out,0.000,20787.137,457.610,14.957,21259.704,314.396,3449,60475,32655 +bench,platoon,release,25,76,240,80,0.986667,out,0.000,23737.352,479.108,13.539,24229.999,302.472,2964,55524,30024 +bench,platoon,release,25,77,240,80,0.973333,out,0.000,23890.685,471.335,13.561,24375.581,348.845,1687,27879,15047 +bench,platoon,release,25,78,240,80,0.960000,out,0.000,23979.532,518.738,15.112,24513.382,343.882,2814,63225,34699 +bench,platoon,release,25,79,240,80,0.946667,out,0.000,24259.435,515.133,13.702,24788.270,325.185,4481,87577,47559 +bench,platoon,release,25,80,240,80,0.933333,out,0.000,22665.996,729.311,13.529,23408.836,364.611,7399,162215,88483 +bench,platoon,release,25,81,240,80,0.920000,out,0.000,23565.831,860.548,14.278,24440.657,413.300,9382,169381,90924 +bench,platoon,release,25,82,240,80,0.906667,out,0.000,23819.457,868.950,15.326,24703.733,407.294,10625,210911,113982 +bench,platoon,release,25,83,240,80,0.893333,out,0.000,22740.848,876.111,15.897,23632.856,410.732,12098,227654,122720 +bench,platoon,release,25,84,240,80,0.880000,out,0.000,22600.779,1029.301,15.030,23645.110,523.921,12337,249197,134810 +bench,platoon,release,25,85,240,80,0.866667,out,0.000,21996.565,980.173,13.404,22990.142,406.359,13893,258853,139178 +bench,platoon,release,25,86,240,80,0.853333,out,0.000,20792.339,999.182,13.561,21805.082,425.400,14986,280634,151289 +bench,platoon,release,25,87,240,80,0.840000,out,0.000,19685.775,996.326,13.520,20695.621,410.108,14664,284207,153637 +bench,platoon,release,25,88,240,80,0.826667,out,0.000,18981.415,1232.060,13.497,20226.972,425.546,15426,318563,173490 +bench,platoon,release,25,89,240,80,0.813333,out,0.000,18921.895,1204.354,14.248,20140.497,414.279,15402,318450,173516 +bench,platoon,release,25,90,240,80,0.800000,out,0.000,17522.652,1165.601,14.521,18702.774,708.554,15724,339817,186926 +bench,platoon,release,25,91,240,80,0.786667,out,0.000,17492.860,1123.117,13.543,18629.520,411.809,15733,338261,186448 +bench,platoon,release,25,92,240,80,0.773333,out,0.000,16748.088,1207.618,13.995,17969.701,413.012,15974,353173,195550 +bench,platoon,release,25,93,240,80,0.760000,out,0.000,17300.851,1169.780,13.893,18484.524,417.044,15757,348393,193004 +bench,platoon,release,25,94,240,80,0.746667,out,0.000,10686.016,1674.888,17.962,12378.866,506.501,15623,360811,200644 +bench,platoon,release,25,95,240,80,0.733333,out,0.000,9289.311,1212.070,14.082,10515.463,411.497,15233,365451,203888 +bench,platoon,release,25,96,240,80,0.720000,out,0.000,9490.415,1684.756,14.967,11190.138,436.843,14958,366589,204476 +bench,platoon,release,25,97,240,80,0.706667,out,0.000,8240.483,1300.111,16.788,9557.382,523.182,14816,369804,206485 +bench,platoon,release,25,98,240,80,0.693333,out,0.000,9530.516,1240.500,16.271,10787.287,442.441,14605,360392,201578 +bench,platoon,release,25,99,240,80,0.680000,out,0.000,7359.940,1234.676,15.992,8610.608,462.190,14316,351552,197196 +bench,platoon,release,25,100,240,80,0.666667,out,0.000,7580.921,1235.329,14.827,8831.077,445.493,13909,339796,191031 +bench,platoon,release,25,101,240,80,0.653333,out,0.000,7249.600,1102.533,17.184,8369.317,584.515,13478,342745,192445 +bench,platoon,release,25,102,240,80,0.640000,out,0.000,6393.265,1169.696,14.253,7577.214,416.341,13375,326929,184253 +bench,platoon,release,25,103,240,80,0.626667,out,0.000,5656.297,1172.425,13.524,6842.246,427.016,12939,322615,181581 +bench,platoon,release,25,104,240,80,0.613333,out,0.000,5591.748,1167.643,13.517,6772.908,420.685,12950,317712,179490 +bench,platoon,release,25,105,240,80,0.600000,out,0.000,5160.385,1180.322,13.519,6354.226,421.618,12595,311338,175618 +bench,platoon,release,25,106,240,80,0.586667,out,0.000,3717.533,1123.998,13.532,4855.063,409.749,13060,325547,183729 +bench,platoon,release,25,107,240,80,0.573333,out,0.000,3678.349,1080.985,13.385,4772.719,407.219,12640,303237,171675 +bench,platoon,release,25,108,240,80,0.560000,out,0.000,3727.832,1072.634,13.508,4813.974,401.889,12156,293861,166249 +bench,platoon,release,25,109,240,80,0.546667,out,0.000,2920.173,1004.034,13.547,3937.754,422.509,11884,273635,155421 +bench,platoon,release,25,110,240,80,0.533333,out,0.000,3252.341,1103.696,15.074,4371.111,409.947,11406,275351,155918 +bench,platoon,release,25,111,240,80,0.520000,out,0.000,2984.501,996.432,13.431,3994.364,386.338,11324,268202,152045 +bench,platoon,release,25,112,240,80,0.506667,out,0.000,2039.671,1125.563,14.509,3179.743,406.897,11196,259199,147353 +bench,platoon,release,25,113,240,80,0.493333,out,0.000,2118.194,1010.415,13.538,3142.147,360.594,10874,257452,146209 +bench,platoon,release,25,114,240,80,0.480000,out,0.000,2555.603,1076.368,14.981,3646.952,428.891,10784,253613,143969 +bench,platoon,release,25,115,240,80,0.466667,out,0.000,2234.512,938.812,13.485,3186.809,353.342,10744,249743,141800 +bench,platoon,release,25,116,240,80,0.453333,out,0.000,2007.851,921.563,13.556,2942.970,344.744,11246,255656,145331 +bench,platoon,release,25,117,240,80,0.440000,out,0.000,2000.528,909.092,13.522,2923.142,350.040,10742,248048,140789 +bench,platoon,release,25,118,240,80,0.426667,out,0.000,2114.223,883.444,13.578,3011.245,403.557,10713,244880,138965 +bench,platoon,release,25,119,240,80,0.413333,out,0.000,2132.437,1019.677,14.853,3166.967,372.194,10734,243182,138004 +bench,platoon,release,25,120,240,80,0.400000,out,0.000,2137.062,915.770,15.362,3068.194,356.961,10619,238948,135532 +bench,platoon,release,25,121,240,80,0.386667,out,0.000,2208.454,980.460,16.410,3205.324,386.663,10574,236144,133860 +bench,platoon,release,25,122,240,80,0.373333,out,0.000,2342.108,926.511,13.998,3282.617,333.958,10808,231702,131655 +bench,platoon,release,25,123,240,80,0.360000,out,0.000,1969.607,805.215,13.851,2788.673,332.213,10623,230138,130654 +bench,platoon,release,25,124,240,80,0.346667,out,0.000,1956.657,1258.177,26.666,3241.500,447.860,10531,227815,129201 +bench,platoon,release,25,125,240,80,0.333333,out,0.000,2170.900,828.101,14.982,3013.983,374.282,10364,223770,126872 +bench,platoon,release,25,126,240,80,0.320000,out,0.000,2163.054,970.060,32.010,3165.124,370.818,10479,223908,127027 +bench,platoon,release,25,127,240,80,0.306667,out,0.000,2386.216,913.684,13.916,3313.816,330.731,10369,218771,124064 +bench,platoon,release,25,128,240,80,0.293333,out,0.000,1930.391,773.536,13.539,2717.466,320.358,10342,217260,123275 +bench,platoon,release,25,129,240,80,0.280000,out,0.000,1952.209,784.161,13.722,2750.092,322.992,10264,216120,122511 +bench,platoon,release,25,130,240,80,0.266667,out,0.000,1985.782,870.900,16.297,2872.979,380.193,10319,214922,121798 +bench,platoon,release,25,131,240,80,0.253333,out,0.000,2050.313,823.580,15.309,2889.202,362.460,10110,200382,113543 +bench,platoon,release,25,132,240,80,0.240000,out,0.000,2168.014,741.115,13.517,2922.646,301.335,10194,209889,118688 +bench,platoon,release,25,133,240,80,0.226667,out,0.000,1964.618,760.862,15.888,2741.368,338.634,10324,208269,117959 +bench,platoon,release,25,134,240,80,0.213333,out,0.000,2092.256,755.300,16.917,2864.473,422.264,10272,203466,115166 +bench,platoon,release,25,135,240,80,0.200000,out,0.000,2097.557,780.162,13.514,2891.233,304.429,10164,199193,112834 +bench,platoon,release,25,136,240,80,0.186667,out,0.000,1871.130,772.145,13.532,2656.807,301.043,10060,198931,112556 +bench,platoon,release,25,137,240,80,0.173333,out,0.000,1882.899,768.067,13.514,2664.480,297.831,10125,198507,112468 +bench,platoon,release,25,138,240,80,0.160000,out,0.000,1858.089,755.210,14.965,2628.264,316.476,9983,194969,110219 +bench,platoon,release,25,139,240,80,0.146667,out,0.000,1909.628,742.614,15.026,2667.268,321.630,9903,187424,106059 +bench,platoon,release,25,140,240,80,0.133333,out,0.000,2371.097,749.305,14.994,3135.396,333.208,9797,185466,104784 +bench,platoon,release,25,141,240,80,0.120000,out,0.000,1890.526,756.286,13.540,2660.352,290.840,9593,178995,101161 +bench,platoon,release,25,142,240,80,0.106667,out,0.000,1833.639,674.375,13.519,2521.533,301.887,9419,175819,99269 +bench,platoon,release,25,143,240,80,0.093333,out,0.000,2080.431,775.099,13.400,2868.930,299.269,9331,173216,97779 +bench,platoon,release,25,144,240,80,0.080000,out,0.000,1766.020,706.235,13.552,2485.807,283.227,9239,172930,97550 +bench,platoon,release,25,145,240,80,0.066667,out,0.000,1752.041,698.798,13.558,2464.397,295.562,9120,164310,92751 +bench,platoon,release,25,146,240,80,0.053333,out,0.000,1765.840,691.814,15.033,2472.687,309.408,9002,164447,92611 +bench,platoon,release,25,147,240,80,0.040000,out,0.000,1746.238,726.719,13.521,2486.478,275.652,8896,155027,87394 +bench,platoon,release,25,148,240,80,0.026667,out,0.000,2079.103,656.506,15.023,2750.632,302.485,8713,154631,87131 +bench,platoon,release,25,149,240,80,0.013333,out,0.000,1704.472,667.289,13.404,2385.165,275.113,8557,150590,84799 diff --git a/docs/performance/motion-comparison/current-240x80-muster-0.csv b/docs/performance/motion-comparison/current-240x80-muster-0.csv new file mode 100644 index 000000000..4a15cd1ab --- /dev/null +++ b/docs/performance/motion-comparison/current-240x80-muster-0.csv @@ -0,0 +1,151 @@ +mode,variant,build,fps,frame,width,height,phase,direction,interval_us,widget_us,output_us,reset_us,total_us,diff_probe_us,changed_cells,ansi_bytes,write_calls +bench,muster,release,25,0,240,80,0.000000,in,0.000,1639.736,697.591,13.522,2350.849,209.112,19200,194459,112925 +bench,muster,release,25,1,240,80,0.013333,in,0.000,1642.481,621.633,13.543,2277.657,273.276,8513,149522,84179 +bench,muster,release,25,2,240,80,0.026667,in,0.000,1683.927,630.857,13.500,2328.284,277.036,8549,151044,85160 +bench,muster,release,25,3,240,80,0.040000,in,0.000,1690.566,656.038,13.373,2359.977,274.668,8695,160176,90215 +bench,muster,release,25,4,240,80,0.053333,in,0.000,1769.107,681.329,13.479,2463.915,276.960,8809,160643,90498 +bench,muster,release,25,5,240,80,0.066667,in,0.000,1926.135,701.669,16.756,2644.560,301.016,8878,160414,90520 +bench,muster,release,25,6,240,80,0.080000,in,0.000,1767.257,753.174,13.614,2534.045,329.259,8952,165967,93654 +bench,muster,release,25,7,240,80,0.093333,in,0.000,1797.969,796.802,14.226,2608.997,294.022,9188,174356,98320 +bench,muster,release,25,8,240,80,0.106667,in,0.000,1866.741,761.936,16.883,2645.560,318.420,9195,176929,99984 +bench,muster,release,25,9,240,80,0.120000,in,0.000,1846.108,684.544,13.525,2544.177,287.977,9460,177491,100274 +bench,muster,release,25,10,240,80,0.133333,in,0.000,1800.845,729.655,13.650,2544.150,290.242,9585,183742,103805 +bench,muster,release,25,11,240,80,0.146667,in,0.000,1816.409,755.673,13.721,2585.803,292.354,9632,182595,103296 +bench,muster,release,25,12,240,80,0.160000,in,0.000,1826.618,846.279,13.748,2686.645,328.965,9746,192506,108767 +bench,muster,release,25,13,240,80,0.173333,in,0.000,1969.744,781.036,13.416,2764.196,297.487,10025,195925,111052 +bench,muster,release,25,14,240,80,0.186667,in,0.000,2116.125,806.067,13.532,2935.724,302.523,10156,200436,113363 +bench,muster,release,25,15,240,80,0.200000,in,0.000,1851.471,780.788,13.729,2645.988,312.281,10260,202411,114620 +bench,muster,release,25,16,240,80,0.213333,in,0.000,1870.650,760.984,13.402,2645.036,314.695,10441,208127,117756 +bench,muster,release,25,17,240,80,0.226667,in,0.000,1874.957,806.286,13.469,2694.712,316.630,10505,211078,119543 +bench,muster,release,25,18,240,80,0.240000,in,0.000,1871.956,801.334,13.634,2686.924,320.694,10515,217005,122810 +bench,muster,release,25,19,240,80,0.253333,in,0.000,1853.023,841.620,13.861,2708.504,320.784,10642,219078,124145 +bench,muster,release,25,20,240,80,0.266667,in,0.000,1924.771,928.107,16.788,2869.666,401.378,10610,222931,126116 +bench,muster,release,25,21,240,80,0.280000,in,0.000,2073.808,856.580,14.961,2945.349,361.413,10661,223997,126948 +bench,muster,release,25,22,240,80,0.293333,in,0.000,2017.570,856.671,13.390,2887.631,326.044,10709,224692,127423 +bench,muster,release,25,23,240,80,0.306667,in,0.000,1928.334,863.426,14.865,2806.625,380.395,10573,223042,126390 +bench,muster,release,25,24,240,80,0.320000,in,0.000,1944.373,824.422,13.418,2782.213,337.522,10647,227761,129146 +bench,muster,release,25,25,240,80,0.333333,in,0.000,1967.546,867.331,14.121,2848.998,350.685,10669,229855,130349 +bench,muster,release,25,26,240,80,0.346667,in,0.000,1994.603,903.939,13.505,2912.047,334.411,10603,232090,131541 +bench,muster,release,25,27,240,80,0.360000,in,0.000,2076.272,953.706,15.414,3045.392,347.762,10733,236114,133791 +bench,muster,release,25,28,240,80,0.373333,in,0.000,1951.471,852.943,13.401,2817.815,344.492,10987,239137,135749 +bench,muster,release,25,29,240,80,0.386667,in,0.000,2036.261,940.595,13.394,2990.250,343.525,11049,242870,137844 +bench,muster,release,25,30,240,80,0.400000,in,0.000,1964.687,914.229,15.881,2894.797,346.391,10738,240478,136389 +bench,muster,release,25,31,240,80,0.413333,in,0.000,2143.287,886.029,15.364,3044.680,377.736,10758,242490,137545 +bench,muster,release,25,32,240,80,0.426667,in,0.000,2172.441,999.874,13.569,3185.884,386.370,10767,245352,139141 +bench,muster,release,25,33,240,80,0.440000,in,0.000,1983.329,936.116,15.021,2934.466,354.587,10826,248687,141085 +bench,muster,release,25,34,240,80,0.453333,in,0.000,2033.977,944.688,14.452,2993.117,378.836,10842,249084,141412 +bench,muster,release,25,35,240,80,0.466667,in,0.000,2055.113,949.410,13.521,3018.044,348.549,11041,252418,143475 +bench,muster,release,25,36,240,80,0.480000,in,0.000,1989.261,915.215,13.399,2917.875,353.986,10698,253617,144024 +bench,muster,release,25,37,240,80,0.493333,in,0.000,1972.304,938.110,13.947,2924.361,357.310,10768,254186,144316 +bench,muster,release,25,38,240,80,0.506667,in,0.000,1984.417,901.081,13.908,2899.406,403.271,10777,253743,144066 +bench,muster,release,25,39,240,80,0.520000,in,0.000,2986.658,966.090,13.543,3966.291,371.556,11125,262337,148552 +bench,muster,release,25,40,240,80,0.533333,in,0.000,2820.835,984.130,14.955,3819.920,449.645,11269,275092,155701 +bench,muster,release,25,41,240,80,0.546667,in,0.000,2897.377,1032.972,13.511,3943.860,383.896,11354,268948,152567 +bench,muster,release,25,42,240,80,0.560000,in,0.000,3653.284,1041.725,13.398,4708.407,395.378,11862,290656,164144 +bench,muster,release,25,43,240,80,0.573333,in,0.000,3641.454,1056.157,13.575,4711.186,401.021,12137,295508,167113 +bench,muster,release,25,44,240,80,0.586667,in,0.000,3946.445,1265.117,16.373,5227.935,504.005,12757,326898,184140 +bench,muster,release,25,45,240,80,0.600000,in,0.000,4510.077,1142.457,13.528,5666.062,416.351,13107,319705,180427 +bench,muster,release,25,46,240,80,0.613333,in,0.000,4519.667,1285.349,13.557,5818.573,417.952,12687,313454,176880 +bench,muster,release,25,47,240,80,0.626667,in,0.000,5692.474,1106.787,13.550,6812.811,408.306,12999,320513,180240 +bench,muster,release,25,48,240,80,0.640000,in,0.000,5355.791,1081.854,13.515,6451.160,407.179,12936,322559,181547 +bench,muster,release,25,49,240,80,0.653333,in,0.000,6204.332,1242.967,13.541,7460.840,454.339,13335,342373,192156 +bench,muster,release,25,50,240,80,0.666667,in,0.000,6623.608,1187.682,13.523,7824.813,424.049,13526,338687,190243 +bench,muster,release,25,51,240,80,0.680000,in,0.000,7031.146,1161.787,16.917,8209.850,428.613,13929,345740,193656 +bench,muster,release,25,52,240,80,0.693333,in,0.000,8280.555,1229.818,13.508,9523.881,418.543,14319,357230,199625 +bench,muster,release,25,53,240,80,0.706667,in,0.000,8051.748,1153.728,13.396,9218.872,410.514,14689,365464,203917 +bench,muster,release,25,54,240,80,0.720000,in,0.000,9030.077,1300.179,13.433,10343.689,413.280,14851,366452,204275 +bench,muster,release,25,55,240,80,0.733333,in,0.000,8653.518,1139.199,13.512,9806.229,406.918,14941,359927,200701 +bench,muster,release,25,56,240,80,0.746667,in,0.000,9701.400,1246.895,13.391,10961.686,410.147,15242,356851,198193 +bench,muster,release,25,57,240,80,0.760000,in,0.000,16063.183,1173.166,13.400,17249.749,414.836,15560,345751,191376 +bench,muster,release,25,58,240,80,0.773333,in,0.000,16281.092,1163.411,13.382,17457.885,436.710,15792,345922,191206 +bench,muster,release,25,59,240,80,0.786667,in,0.000,17665.107,1221.599,13.531,18900.237,419.237,15923,335937,184436 +bench,muster,release,25,60,240,80,0.800000,in,0.000,17220.746,1170.344,13.403,18404.493,405.038,15675,338113,185457 +bench,muster,release,25,61,240,80,0.813333,in,0.000,19122.763,1118.071,13.517,20254.351,404.035,15669,324241,176172 +bench,muster,release,25,62,240,80,0.826667,in,0.000,18775.438,1062.690,13.554,19851.682,397.060,15443,305102,165122 +bench,muster,release,25,63,240,80,0.840000,in,0.000,19893.926,1026.387,13.487,20933.800,398.486,15515,266488,142619 +bench,muster,release,25,64,240,80,0.853333,in,0.000,19836.637,941.814,13.541,20791.992,406.759,14808,229533,122450 +bench,muster,release,25,65,240,80,0.866667,in,0.000,21015.036,948.431,15.371,21978.838,443.915,14416,235048,125261 +bench,muster,release,25,66,240,80,0.880000,in,0.000,21210.769,996.424,13.943,22221.136,400.222,13999,261572,140627 +bench,muster,release,25,67,240,80,0.893333,in,0.000,21117.223,928.287,13.817,22059.327,417.931,13208,250926,134992 +bench,muster,release,25,68,240,80,0.906667,in,0.000,22370.841,926.063,13.367,23310.271,408.905,12181,224799,120572 +bench,muster,release,25,69,240,80,0.920000,in,0.000,22441.720,802.485,13.519,23257.724,400.167,10260,188254,101296 +bench,muster,release,25,70,240,80,0.933333,in,0.000,22260.859,754.575,13.398,23028.832,388.449,8610,153948,82925 +bench,muster,release,25,71,240,80,0.946667,in,0.000,23520.147,822.245,14.149,24356.541,376.225,6799,138339,75160 +bench,muster,release,25,72,240,80,0.960000,in,0.000,23171.214,651.002,13.515,23835.731,343.459,6971,124200,66709 +bench,muster,release,25,73,240,80,0.973333,in,0.000,23138.954,503.635,13.541,23656.130,314.486,4871,77155,40919 +bench,muster,release,25,74,240,80,0.986667,in,0.000,22964.533,439.839,13.506,23417.878,295.218,2988,47257,25037 +bench,muster,release,25,75,240,80,1.000000,out,0.000,21166.694,418.264,13.488,21598.446,288.789,2939,54444,29290 +bench,muster,release,25,76,240,80,0.986667,out,0.000,22792.935,429.699,13.482,23236.116,297.480,3338,51843,27534 +bench,muster,release,25,77,240,80,0.973333,out,0.000,22929.344,413.660,13.376,23356.380,296.535,3040,48722,25863 +bench,muster,release,25,78,240,80,0.960000,out,0.000,23150.464,530.586,13.429,23694.479,324.968,6631,92901,48626 +bench,muster,release,25,79,240,80,0.946667,out,0.000,23119.807,630.965,13.384,23764.156,343.548,6774,120276,64310 +bench,muster,release,25,80,240,80,0.933333,out,0.000,22039.442,699.891,13.553,22752.886,356.034,7554,152039,82249 +bench,muster,release,25,81,240,80,0.920000,out,0.000,22137.223,840.226,13.515,22990.964,379.785,9174,183894,99530 +bench,muster,release,25,82,240,80,0.906667,out,0.000,22746.015,895.336,13.629,23654.980,430.545,10460,203346,109574 +bench,muster,release,25,83,240,80,0.893333,out,0.000,21078.601,1032.574,13.524,22124.699,414.434,12709,251165,135727 +bench,muster,release,25,84,240,80,0.880000,out,0.000,20974.846,1018.874,13.488,22007.208,416.176,13388,244304,131291 +bench,muster,release,25,85,240,80,0.866667,out,0.000,20948.095,885.883,13.352,21847.330,401.214,13845,231619,123814 +bench,muster,release,25,86,240,80,0.853333,out,0.000,19745.379,973.027,13.516,20731.922,401.570,14611,249279,133977 +bench,muster,release,25,87,240,80,0.840000,out,0.000,19769.921,1028.752,13.531,20812.204,409.373,14761,282774,152707 +bench,muster,release,25,88,240,80,0.826667,out,0.000,18469.275,1131.110,13.563,19613.948,416.139,15535,318820,173181 +bench,muster,release,25,89,240,80,0.813333,out,0.000,18446.249,1102.857,13.512,19562.618,400.021,15517,323249,176076 +bench,muster,release,25,90,240,80,0.800000,out,0.000,17304.094,1135.218,13.411,18452.723,401.048,15762,338842,186286 +bench,muster,release,25,91,240,80,0.786667,out,0.000,17321.835,1213.723,13.509,18549.067,406.742,15775,338782,186616 +bench,muster,release,25,92,240,80,0.773333,out,0.000,16041.902,1154.769,13.506,17210.177,414.573,15896,352025,194990 +bench,muster,release,25,93,240,80,0.760000,out,0.000,16206.551,1129.452,13.543,17349.546,419.997,15749,349225,193458 +bench,muster,release,25,94,240,80,0.746667,out,0.000,9603.042,1186.194,14.207,10803.443,439.260,15624,360720,200599 +bench,muster,release,25,95,240,80,0.733333,out,0.000,8684.208,1168.513,13.549,9866.270,410.187,15233,365451,203888 +bench,muster,release,25,96,240,80,0.720000,out,0.000,8702.318,1249.457,13.494,9965.269,409.627,14958,366589,204476 +bench,muster,release,25,97,240,80,0.706667,out,0.000,7832.838,1154.469,14.587,9001.894,408.417,14816,369804,206485 +bench,muster,release,25,98,240,80,0.693333,out,0.000,7903.715,1265.884,13.898,9183.497,413.927,14605,360392,201578 +bench,muster,release,25,99,240,80,0.680000,out,0.000,7140.852,1145.321,13.553,8299.726,421.078,14316,351552,197196 +bench,muster,release,25,100,240,80,0.666667,out,0.000,6328.622,1207.856,13.501,7549.979,442.476,13909,339796,191031 +bench,muster,release,25,101,240,80,0.653333,out,0.000,6255.421,1190.449,13.548,7459.418,420.141,13478,342745,192445 +bench,muster,release,25,102,240,80,0.640000,out,0.000,5387.481,1110.327,13.691,6511.499,420.101,13375,326929,184253 +bench,muster,release,25,103,240,80,0.626667,out,0.000,5401.345,1082.618,13.519,6497.482,405.622,12939,322615,181581 +bench,muster,release,25,104,240,80,0.613333,out,0.000,4534.849,1101.956,13.525,5650.330,418.276,12950,317712,179490 +bench,muster,release,25,105,240,80,0.600000,out,0.000,4518.854,1125.126,13.550,5657.530,403.829,12595,311338,175618 +bench,muster,release,25,106,240,80,0.586667,out,0.000,3659.106,1147.910,13.469,4820.485,411.336,13060,325547,183729 +bench,muster,release,25,107,240,80,0.573333,out,0.000,3677.269,1108.959,13.843,4800.071,406.935,12640,303237,171675 +bench,muster,release,25,108,240,80,0.560000,out,0.000,3681.358,1116.513,13.577,4811.448,404.293,12156,293861,166249 +bench,muster,release,25,109,240,80,0.546667,out,0.000,2863.171,988.812,13.503,3865.486,397.805,11884,273635,155421 +bench,muster,release,25,110,240,80,0.533333,out,0.000,2859.309,1055.385,13.391,3928.085,388.296,11406,275351,155918 +bench,muster,release,25,111,240,80,0.520000,out,0.000,2849.207,1021.251,14.249,3884.707,399.896,11324,268202,152045 +bench,muster,release,25,112,240,80,0.506667,out,0.000,2016.045,988.742,13.372,3018.159,373.715,11196,259199,147353 +bench,muster,release,25,113,240,80,0.493333,out,0.000,2009.656,970.873,16.322,2996.851,366.017,10874,257452,146209 +bench,muster,release,25,114,240,80,0.480000,out,0.000,2011.476,973.601,14.139,2999.216,379.191,10784,253613,143969 +bench,muster,release,25,115,240,80,0.466667,out,0.000,2076.938,919.841,13.559,3010.338,355.341,10744,249743,141800 +bench,muster,release,25,116,240,80,0.453333,out,0.000,2036.869,992.730,13.693,3043.292,356.576,11246,255656,145331 +bench,muster,release,25,117,240,80,0.440000,out,0.000,2046.765,908.469,13.522,2968.756,358.293,10742,248048,140789 +bench,muster,release,25,118,240,80,0.426667,out,0.000,1996.782,948.700,13.513,2958.995,344.695,10713,244880,138965 +bench,muster,release,25,119,240,80,0.413333,out,0.000,1998.173,895.367,13.480,2907.020,348.166,10734,243182,138004 +bench,muster,release,25,120,240,80,0.400000,out,0.000,2005.392,859.469,13.415,2878.276,348.709,10619,238948,135532 +bench,muster,release,25,121,240,80,0.386667,out,0.000,1987.435,907.312,14.188,2908.935,354.320,10574,236144,133860 +bench,muster,release,25,122,240,80,0.373333,out,0.000,1950.049,876.341,13.514,2839.904,333.431,10808,231702,131655 +bench,muster,release,25,123,240,80,0.360000,out,0.000,1976.490,856.622,13.507,2846.619,329.462,10623,230138,130654 +bench,muster,release,25,124,240,80,0.346667,out,0.000,1958.334,877.247,13.515,2849.096,332.869,10531,227815,129201 +bench,muster,release,25,125,240,80,0.333333,out,0.000,1944.315,884.367,13.534,2842.216,331.912,10364,223770,126872 +bench,muster,release,25,126,240,80,0.320000,out,0.000,1958.291,823.565,14.091,2795.947,341.823,10479,223908,127027 +bench,muster,release,25,127,240,80,0.306667,out,0.000,1946.185,830.975,13.425,2790.585,321.962,10369,218771,124064 +bench,muster,release,25,128,240,80,0.293333,out,0.000,1926.636,861.903,14.092,2802.631,336.293,10342,217260,123275 +bench,muster,release,25,129,240,80,0.280000,out,0.000,1990.140,836.970,13.552,2840.662,325.740,10264,216120,122511 +bench,muster,release,25,130,240,80,0.266667,out,0.000,1935.473,821.508,13.514,2770.495,317.161,10319,214922,121798 +bench,muster,release,25,131,240,80,0.253333,out,0.000,1869.673,776.443,13.390,2659.506,303.400,10110,200382,113543 +bench,muster,release,25,132,240,80,0.240000,out,0.000,1912.905,787.431,13.802,2714.138,303.344,10194,209889,118688 +bench,muster,release,25,133,240,80,0.226667,out,0.000,1901.655,838.714,13.614,2753.983,311.017,10324,208269,117959 +bench,muster,release,25,134,240,80,0.213333,out,0.000,1900.946,779.975,13.384,2694.305,307.308,10272,203466,115166 +bench,muster,release,25,135,240,80,0.200000,out,0.000,1914.419,802.360,13.827,2730.606,307.473,10164,199193,112834 +bench,muster,release,25,136,240,80,0.186667,out,0.000,1902.784,769.663,13.393,2685.840,300.278,10060,198931,112556 +bench,muster,release,25,137,240,80,0.173333,out,0.000,1878.103,758.693,13.503,2650.299,300.722,10125,198507,112468 +bench,muster,release,25,138,240,80,0.160000,out,0.000,1851.280,737.852,13.412,2602.544,298.523,9983,194969,110219 +bench,muster,release,25,139,240,80,0.146667,out,0.000,1828.799,725.059,13.533,2567.391,294.578,9903,187424,106059 +bench,muster,release,25,140,240,80,0.133333,out,0.000,1823.365,760.039,13.846,2597.250,293.738,9797,185466,104784 +bench,muster,release,25,141,240,80,0.120000,out,0.000,1816.111,758.272,13.420,2587.803,303.157,9593,178995,101161 +bench,muster,release,25,142,240,80,0.106667,out,0.000,1790.988,740.363,13.488,2544.839,288.743,9419,175819,99269 +bench,muster,release,25,143,240,80,0.093333,out,0.000,1785.667,670.241,13.527,2469.435,287.620,9331,173216,97779 +bench,muster,release,25,144,240,80,0.080000,out,0.000,1767.554,711.784,13.498,2492.836,285.526,9239,172930,97550 +bench,muster,release,25,145,240,80,0.066667,out,0.000,1755.080,682.629,13.428,2451.137,281.670,9120,164310,92751 +bench,muster,release,25,146,240,80,0.053333,out,0.000,1734.552,678.630,13.526,2426.708,281.321,9002,164447,92611 +bench,muster,release,25,147,240,80,0.040000,out,0.000,1710.161,669.297,13.524,2392.982,277.769,8896,155027,87394 +bench,muster,release,25,148,240,80,0.026667,out,0.000,1698.759,648.045,14.004,2360.808,271.936,8713,154631,87131 +bench,muster,release,25,149,240,80,0.013333,out,0.000,1677.195,636.124,14.942,2328.261,283.179,8557,150590,84799 diff --git a/docs/performance/motion-comparison/current-240x80-muster-1.csv b/docs/performance/motion-comparison/current-240x80-muster-1.csv new file mode 100644 index 000000000..7261af0b7 --- /dev/null +++ b/docs/performance/motion-comparison/current-240x80-muster-1.csv @@ -0,0 +1,151 @@ +mode,variant,build,fps,frame,width,height,phase,direction,interval_us,widget_us,output_us,reset_us,total_us,diff_probe_us,changed_cells,ansi_bytes,write_calls +bench,muster,release,25,0,240,80,0.000000,in,0.000,1642.451,680.257,13.511,2336.219,214.104,19200,194459,112925 +bench,muster,release,25,1,240,80,0.013333,in,0.000,1650.418,645.617,13.578,2309.613,275.937,8513,149522,84179 +bench,muster,release,25,2,240,80,0.026667,in,0.000,1680.184,641.468,13.577,2335.229,271.216,8549,151044,85160 +bench,muster,release,25,3,240,80,0.040000,in,0.000,1704.764,679.451,13.557,2397.772,274.549,8695,160176,90215 +bench,muster,release,25,4,240,80,0.053333,in,0.000,1708.314,672.157,14.529,2395.000,295.017,8809,160643,90498 +bench,muster,release,25,5,240,80,0.066667,in,0.000,1706.295,694.078,13.811,2414.184,275.893,8878,160414,90520 +bench,muster,release,25,6,240,80,0.080000,in,0.000,1763.186,666.765,13.609,2443.560,275.585,8952,165967,93654 +bench,muster,release,25,7,240,80,0.093333,in,0.000,1761.183,715.612,13.452,2490.247,283.447,9188,174356,98320 +bench,muster,release,25,8,240,80,0.106667,in,0.000,1773.994,665.079,13.582,2452.655,288.588,9195,176929,99984 +bench,muster,release,25,9,240,80,0.120000,in,0.000,1770.782,757.119,13.606,2541.507,286.227,9460,177491,100274 +bench,muster,release,25,10,240,80,0.133333,in,0.000,1808.921,749.701,14.092,2572.714,294.552,9585,183742,103805 +bench,muster,release,25,11,240,80,0.146667,in,0.000,1810.609,745.182,13.849,2569.640,295.758,9632,182595,103296 +bench,muster,release,25,12,240,80,0.160000,in,0.000,1846.027,755.884,13.607,2615.518,295.476,9746,192506,108767 +bench,muster,release,25,13,240,80,0.173333,in,0.000,1827.991,762.858,13.607,2604.456,298.807,10025,195925,111052 +bench,muster,release,25,14,240,80,0.186667,in,0.000,1849.419,795.568,13.616,2658.603,300.863,10156,200436,113363 +bench,muster,release,25,15,240,80,0.200000,in,0.000,1894.289,796.511,13.578,2704.378,310.076,10260,202411,114620 +bench,muster,release,25,16,240,80,0.213333,in,0.000,1864.992,824.049,13.532,2702.573,309.509,10441,208127,117756 +bench,muster,release,25,17,240,80,0.226667,in,0.000,1866.400,816.054,13.833,2696.287,312.482,10505,211078,119543 +bench,muster,release,25,18,240,80,0.240000,in,0.000,1874.921,828.253,13.731,2716.905,314.178,10515,217005,122810 +bench,muster,release,25,19,240,80,0.253333,in,0.000,1847.698,843.247,13.469,2704.414,323.077,10642,219078,124145 +bench,muster,release,25,20,240,80,0.266667,in,0.000,1925.691,841.825,13.872,2781.388,323.770,10610,222931,126116 +bench,muster,release,25,21,240,80,0.280000,in,0.000,1918.591,829.761,13.891,2762.243,328.433,10661,223997,126948 +bench,muster,release,25,22,240,80,0.293333,in,0.000,1914.894,839.295,13.878,2768.067,330.401,10709,224692,127423 +bench,muster,release,25,23,240,80,0.306667,in,0.000,1912.668,830.195,13.542,2756.405,328.113,10573,223042,126390 +bench,muster,release,25,24,240,80,0.320000,in,0.000,1942.811,880.884,13.546,2837.241,344.263,10647,227761,129146 +bench,muster,release,25,25,240,80,0.333333,in,0.000,1932.415,878.755,13.534,2824.704,338.316,10669,229855,130349 +bench,muster,release,25,26,240,80,0.346667,in,0.000,1937.827,892.917,13.614,2844.358,334.337,10603,232090,131541 +bench,muster,release,25,27,240,80,0.360000,in,0.000,1951.819,908.449,13.452,2873.720,338.529,10733,236114,133791 +bench,muster,release,25,28,240,80,0.373333,in,0.000,1955.513,921.540,13.527,2890.580,347.639,10987,239137,135749 +bench,muster,release,25,29,240,80,0.386667,in,0.000,1996.337,908.879,13.571,2918.787,346.382,11049,242870,137844 +bench,muster,release,25,30,240,80,0.400000,in,0.000,1979.586,915.232,13.503,2908.321,343.723,10738,240478,136389 +bench,muster,release,25,31,240,80,0.413333,in,0.000,1986.791,903.259,13.545,2903.595,345.978,10758,242490,137545 +bench,muster,release,25,32,240,80,0.426667,in,0.000,1994.029,918.446,13.495,2925.970,348.969,10767,245352,139141 +bench,muster,release,25,33,240,80,0.440000,in,0.000,1979.921,937.870,13.448,2931.239,353.101,10826,248687,141085 +bench,muster,release,25,34,240,80,0.453333,in,0.000,1981.740,943.997,13.653,2939.390,352.870,10842,249084,141412 +bench,muster,release,25,35,240,80,0.466667,in,0.000,1987.096,930.243,13.597,2930.936,351.282,11041,252418,143475 +bench,muster,release,25,36,240,80,0.480000,in,0.000,1984.646,932.972,13.504,2931.122,360.734,10698,253617,144024 +bench,muster,release,25,37,240,80,0.493333,in,0.000,1978.061,967.472,13.596,2959.129,356.738,10768,254186,144316 +bench,muster,release,25,38,240,80,0.506667,in,0.000,1983.496,939.293,14.016,2936.805,368.495,10777,253743,144066 +bench,muster,release,25,39,240,80,0.520000,in,0.000,2865.927,1001.921,16.607,3884.455,379.210,11125,262337,148552 +bench,muster,release,25,40,240,80,0.533333,in,0.000,2864.942,1023.236,13.510,3901.688,388.889,11269,275092,155701 +bench,muster,release,25,41,240,80,0.546667,in,0.000,2826.749,1000.841,13.631,3841.221,382.734,11354,268948,152567 +bench,muster,release,25,42,240,80,0.560000,in,0.000,3658.954,1065.377,13.650,4737.981,392.927,11862,290656,164144 +bench,muster,release,25,43,240,80,0.573333,in,0.000,3652.939,1076.018,14.180,4743.137,402.813,12137,295508,167113 +bench,muster,release,25,44,240,80,0.586667,in,0.000,3655.435,1134.980,13.576,4803.991,413.131,12757,326898,184140 +bench,muster,release,25,45,240,80,0.600000,in,0.000,4486.936,1343.321,13.600,5843.857,420.357,13107,319705,180427 +bench,muster,release,25,46,240,80,0.613333,in,0.000,4515.677,1152.836,14.021,5682.534,421.262,12687,313454,176880 +bench,muster,release,25,47,240,80,0.626667,in,0.000,5336.212,1113.887,13.530,6463.629,408.717,12999,320513,180240 +bench,muster,release,25,48,240,80,0.640000,in,0.000,5379.184,1153.852,13.534,6546.570,408.236,12936,322559,181547 +bench,muster,release,25,49,240,80,0.653333,in,0.000,6196.970,1185.560,13.585,7396.115,419.531,13335,342373,192156 +bench,muster,release,25,50,240,80,0.666667,in,0.000,6214.860,1218.414,13.665,7446.939,430.516,13526,338687,190243 +bench,muster,release,25,51,240,80,0.680000,in,0.000,7027.804,1183.603,14.109,8225.516,424.387,13929,345740,193656 +bench,muster,release,25,52,240,80,0.693333,in,0.000,7870.806,1192.852,13.677,9077.335,440.948,14319,357230,199625 +bench,muster,release,25,53,240,80,0.706667,in,0.000,7748.755,1210.076,13.758,8972.589,427.731,14689,365464,203917 +bench,muster,release,25,54,240,80,0.720000,in,0.000,8710.672,1189.085,13.683,9913.440,406.347,14851,366452,204275 +bench,muster,release,25,55,240,80,0.733333,in,0.000,8750.206,1187.284,13.612,9951.102,406.358,14941,359927,200701 +bench,muster,release,25,56,240,80,0.746667,in,0.000,9461.435,1193.500,13.702,10668.637,413.170,15242,356851,198193 +bench,muster,release,25,57,240,80,0.760000,in,0.000,16123.885,1208.064,16.432,17348.381,414.952,15560,345751,191376 +bench,muster,release,25,58,240,80,0.773333,in,0.000,16036.413,1223.069,13.627,17273.109,414.807,15792,345922,191206 +bench,muster,release,25,59,240,80,0.786667,in,0.000,17224.834,1200.294,13.548,18438.676,420.286,15923,335937,184436 +bench,muster,release,25,60,240,80,0.800000,in,0.000,17210.608,1152.045,14.442,18377.095,413.632,15675,338113,185457 +bench,muster,release,25,61,240,80,0.813333,in,0.000,18448.022,1114.877,13.434,19576.333,402.344,15669,324241,176172 +bench,muster,release,25,62,240,80,0.826667,in,0.000,18588.859,1049.230,14.646,19652.735,410.234,15443,305102,165122 +bench,muster,release,25,63,240,80,0.840000,in,0.000,19667.837,1011.349,13.576,20692.762,398.634,15515,266488,142619 +bench,muster,release,25,64,240,80,0.853333,in,0.000,19728.705,953.976,14.071,20696.752,406.673,14808,229533,122450 +bench,muster,release,25,65,240,80,0.866667,in,0.000,20907.455,955.312,13.596,21876.363,393.957,14416,235048,125261 +bench,muster,release,25,66,240,80,0.880000,in,0.000,20931.283,980.047,13.982,21925.312,424.598,13999,261572,140627 +bench,muster,release,25,67,240,80,0.893333,in,0.000,21126.012,994.500,13.601,22134.113,419.731,13208,250926,134992 +bench,muster,release,25,68,240,80,0.906667,in,0.000,22377.652,913.123,13.673,23304.448,414.998,12181,224799,120572 +bench,muster,release,25,69,240,80,0.920000,in,0.000,22250.816,833.399,13.570,23097.785,399.182,10260,188254,101296 +bench,muster,release,25,70,240,80,0.933333,in,0.000,22132.341,760.477,14.166,22906.984,397.066,8610,153948,82925 +bench,muster,release,25,71,240,80,0.946667,in,0.000,23144.461,674.794,13.582,23832.837,350.514,6799,138339,75160 +bench,muster,release,25,72,240,80,0.960000,in,0.000,23122.561,626.720,14.027,23763.308,341.141,6971,124200,66709 +bench,muster,release,25,73,240,80,0.973333,in,0.000,22958.406,503.638,13.577,23475.621,313.107,4871,77155,40919 +bench,muster,release,25,74,240,80,0.986667,in,0.000,22614.640,412.128,13.654,23040.422,294.084,2988,47257,25037 +bench,muster,release,25,75,240,80,1.000000,out,0.000,20907.239,430.622,13.426,21351.287,289.586,2939,54444,29290 +bench,muster,release,25,76,240,80,0.986667,out,0.000,22782.295,428.340,13.777,23224.412,296.139,3338,51843,27534 +bench,muster,release,25,77,240,80,0.973333,out,0.000,22939.211,431.599,13.618,23384.428,295.950,3040,48722,25863 +bench,muster,release,25,78,240,80,0.960000,out,0.000,22929.333,540.730,13.901,23483.964,323.063,6631,92901,48626 +bench,muster,release,25,79,240,80,0.946667,out,0.000,23339.714,621.741,13.614,23975.069,340.751,6774,120276,64310 +bench,muster,release,25,80,240,80,0.933333,out,0.000,22016.275,728.312,13.663,22758.250,354.108,7554,152039,82249 +bench,muster,release,25,81,240,80,0.920000,out,0.000,22143.153,813.462,13.463,22970.078,385.447,9174,183894,99530 +bench,muster,release,25,82,240,80,0.906667,out,0.000,22197.835,857.052,13.643,23068.530,398.030,10460,203346,109574 +bench,muster,release,25,83,240,80,0.893333,out,0.000,21026.448,978.012,13.604,22018.064,413.590,12709,251165,135727 +bench,muster,release,25,84,240,80,0.880000,out,0.000,20889.868,975.138,13.614,21878.620,420.537,13388,244304,131291 +bench,muster,release,25,85,240,80,0.866667,out,0.000,20893.723,955.837,13.602,21863.162,401.814,13845,231619,123814 +bench,muster,release,25,86,240,80,0.853333,out,0.000,19710.876,996.111,13.632,20720.619,400.964,14611,249279,133977 +bench,muster,release,25,87,240,80,0.840000,out,0.000,19655.906,1041.921,13.560,20711.387,427.252,14761,282774,152707 +bench,muster,release,25,88,240,80,0.826667,out,0.000,18640.043,1129.275,13.669,19782.987,399.657,15535,318820,173181 +bench,muster,release,25,89,240,80,0.813333,out,0.000,18492.978,1118.122,13.430,19624.530,396.580,15517,323249,176076 +bench,muster,release,25,90,240,80,0.800000,out,0.000,17179.482,1146.663,13.642,18339.787,396.805,15762,338842,186286 +bench,muster,release,25,91,240,80,0.786667,out,0.000,17134.518,1187.566,13.478,18335.562,404.812,15775,338782,186616 +bench,muster,release,25,92,240,80,0.773333,out,0.000,16014.071,1196.667,13.610,17224.348,417.180,15896,352025,194990 +bench,muster,release,25,93,240,80,0.760000,out,0.000,16008.151,1203.722,13.593,17225.466,418.193,15749,349225,193458 +bench,muster,release,25,94,240,80,0.746667,out,0.000,9677.381,1251.565,13.968,10942.914,417.720,15624,360720,200599 +bench,muster,release,25,95,240,80,0.733333,out,0.000,8672.552,1245.842,13.619,9932.013,410.022,15233,365451,203888 +bench,muster,release,25,96,240,80,0.720000,out,0.000,8677.663,1272.316,13.545,9963.524,405.424,14958,366589,204476 +bench,muster,release,25,97,240,80,0.706667,out,0.000,7806.902,1215.522,13.543,9035.967,410.292,14816,369804,206485 +bench,muster,release,25,98,240,80,0.693333,out,0.000,7868.902,1211.078,13.652,9093.632,409.415,14605,360392,201578 +bench,muster,release,25,99,240,80,0.680000,out,0.000,7082.772,1244.891,13.560,8341.223,418.292,14316,351552,197196 +bench,muster,release,25,100,240,80,0.666667,out,0.000,6318.064,1173.325,13.562,7504.951,423.875,13909,339796,191031 +bench,muster,release,25,101,240,80,0.653333,out,0.000,6240.848,1210.492,13.441,7464.781,427.304,13478,342745,192445 +bench,muster,release,25,102,240,80,0.640000,out,0.000,5371.398,1111.490,13.594,6496.482,417.292,13375,326929,184253 +bench,muster,release,25,103,240,80,0.626667,out,0.000,5356.764,1116.671,13.569,6487.004,418.958,12939,322615,181581 +bench,muster,release,25,104,240,80,0.613333,out,0.000,4542.182,1149.886,13.624,5705.692,405.985,12950,317712,179490 +bench,muster,release,25,105,240,80,0.600000,out,0.000,4525.322,1072.987,13.666,5611.975,407.713,12595,311338,175618 +bench,muster,release,25,106,240,80,0.586667,out,0.000,3654.234,1172.146,13.645,4840.025,411.441,13060,325547,183729 +bench,muster,release,25,107,240,80,0.573333,out,0.000,3675.208,1113.419,13.675,4802.302,406.017,12640,303237,171675 +bench,muster,release,25,108,240,80,0.560000,out,0.000,3696.187,1081.506,13.694,4791.387,404.415,12156,293861,166249 +bench,muster,release,25,109,240,80,0.546667,out,0.000,2843.705,1010.729,13.561,3867.995,396.150,11884,273635,155421 +bench,muster,release,25,110,240,80,0.533333,out,0.000,2858.860,983.323,14.071,3856.254,392.473,11406,275351,155918 +bench,muster,release,25,111,240,80,0.520000,out,0.000,2843.965,1018.294,13.625,3875.884,387.172,11324,268202,152045 +bench,muster,release,25,112,240,80,0.506667,out,0.000,2017.832,937.476,13.662,2968.970,376.040,11196,259199,147353 +bench,muster,release,25,113,240,80,0.493333,out,0.000,2007.645,959.294,13.786,2980.725,361.983,10874,257452,146209 +bench,muster,release,25,114,240,80,0.480000,out,0.000,2009.569,953.113,13.649,2976.331,360.400,10784,253613,143969 +bench,muster,release,25,115,240,80,0.466667,out,0.000,2004.804,936.838,13.558,2955.200,358.923,10744,249743,141800 +bench,muster,release,25,116,240,80,0.453333,out,0.000,2010.036,951.671,13.653,2975.360,352.531,11246,255656,145331 +bench,muster,release,25,117,240,80,0.440000,out,0.000,2003.861,905.429,13.567,2922.857,351.063,10742,248048,140789 +bench,muster,release,25,118,240,80,0.426667,out,0.000,1997.251,911.911,13.654,2922.816,354.287,10713,244880,138965 +bench,muster,release,25,119,240,80,0.413333,out,0.000,2007.921,922.705,13.552,2944.178,349.490,10734,243182,138004 +bench,muster,release,25,120,240,80,0.400000,out,0.000,1991.934,899.645,13.651,2905.230,343.285,10619,238948,135532 +bench,muster,release,25,121,240,80,0.386667,out,0.000,2005.394,894.323,13.537,2913.254,341.701,10574,236144,133860 +bench,muster,release,25,122,240,80,0.373333,out,0.000,1959.764,860.397,13.660,2833.821,332.827,10808,231702,131655 +bench,muster,release,25,123,240,80,0.360000,out,0.000,1964.577,812.611,13.592,2790.780,352.626,10623,230138,130654 +bench,muster,release,25,124,240,80,0.346667,out,0.000,1977.501,879.115,14.016,2870.632,338.650,10531,227815,129201 +bench,muster,release,25,125,240,80,0.333333,out,0.000,1960.250,843.804,13.564,2817.618,326.896,10364,223770,126872 +bench,muster,release,25,126,240,80,0.320000,out,0.000,1955.714,870.105,13.527,2839.346,328.684,10479,223908,127027 +bench,muster,release,25,127,240,80,0.306667,out,0.000,1936.448,844.369,13.768,2794.585,326.898,10369,218771,124064 +bench,muster,release,25,128,240,80,0.293333,out,0.000,1939.868,844.347,13.622,2797.837,319.949,10342,217260,123275 +bench,muster,release,25,129,240,80,0.280000,out,0.000,1934.203,826.619,13.573,2774.395,318.244,10264,216120,122511 +bench,muster,release,25,130,240,80,0.266667,out,0.000,1922.213,835.388,13.617,2771.218,321.758,10319,214922,121798 +bench,muster,release,25,131,240,80,0.253333,out,0.000,1872.578,780.988,13.616,2667.182,306.214,10110,200382,113543 +bench,muster,release,25,132,240,80,0.240000,out,0.000,1900.681,805.528,13.675,2719.884,308.822,10194,209889,118688 +bench,muster,release,25,133,240,80,0.226667,out,0.000,1884.791,825.477,13.566,2723.834,313.460,10324,208269,117959 +bench,muster,release,25,134,240,80,0.213333,out,0.000,1892.010,800.313,14.059,2706.382,315.585,10272,203466,115166 +bench,muster,release,25,135,240,80,0.200000,out,0.000,1881.623,787.252,13.593,2682.468,305.288,10164,199193,112834 +bench,muster,release,25,136,240,80,0.186667,out,0.000,1878.371,785.157,13.974,2677.502,307.614,10060,198931,112556 +bench,muster,release,25,137,240,80,0.173333,out,0.000,1859.867,796.911,14.022,2670.800,305.300,10125,198507,112468 +bench,muster,release,25,138,240,80,0.160000,out,0.000,1848.195,775.776,13.651,2637.622,302.585,9983,194969,110219 +bench,muster,release,25,139,240,80,0.146667,out,0.000,1829.544,746.669,13.533,2589.746,295.156,9903,187424,106059 +bench,muster,release,25,140,240,80,0.133333,out,0.000,1816.535,773.091,13.613,2603.239,293.362,9797,185466,104784 +bench,muster,release,25,141,240,80,0.120000,out,0.000,1802.638,717.517,13.530,2533.685,289.526,9593,178995,101161 +bench,muster,release,25,142,240,80,0.106667,out,0.000,1791.572,724.117,13.571,2529.260,285.806,9419,175819,99269 +bench,muster,release,25,143,240,80,0.093333,out,0.000,1796.459,696.377,13.557,2506.393,286.772,9331,173216,97779 +bench,muster,release,25,144,240,80,0.080000,out,0.000,1773.784,716.062,13.486,2503.332,287.647,9239,172930,97550 +bench,muster,release,25,145,240,80,0.066667,out,0.000,1749.117,684.852,13.608,2447.577,290.119,9120,164310,92751 +bench,muster,release,25,146,240,80,0.053333,out,0.000,1736.074,680.334,13.513,2429.921,285.463,9002,164447,92611 +bench,muster,release,25,147,240,80,0.040000,out,0.000,1711.792,668.391,13.584,2393.767,279.598,8896,155027,87394 +bench,muster,release,25,148,240,80,0.026667,out,0.000,1692.908,644.940,13.637,2351.485,271.107,8713,154631,87131 +bench,muster,release,25,149,240,80,0.013333,out,0.000,1678.360,683.249,13.533,2375.142,270.410,8557,150590,84799 diff --git a/docs/performance/motion-comparison/metadata.json b/docs/performance/motion-comparison/metadata.json new file mode 100644 index 000000000..1a5f69bbd --- /dev/null +++ b/docs/performance/motion-comparison/metadata.json @@ -0,0 +1,261 @@ +{ + "binaries": { + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook": "415b36966afa1a414256d3d6f6d24033d7bb9bc20e76d6ac0f2ba319877b6a74", + "/home/clifford/.codex/worktrees/b08b/nori/cli/.worktrees/animated-onboarding/nori-rs/target/release/examples/motion_profile": "f13fa24b5d4bf261fde4449f9bea08b7a89e2f69b4463d8f71fcc50f8cf96972" + }, + "runs": [ + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "240x80", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-comparison/current-240x80-muster-0.csv", + "--muster" + ], + "wall_seconds": 2.6627053629999864 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "120x40", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-comparison/current-120x40-muster-0.csv", + "--muster" + ], + "wall_seconds": 0.6588563519999866 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "120x40", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-comparison/current-120x40-default-0.csv" + ], + "wall_seconds": 0.6386185759999989 + }, + { + "command": [ + "/home/clifford/.codex/worktrees/b08b/nori/cli/.worktrees/animated-onboarding/nori-rs/target/release/examples/motion_profile", + "--width", + "120", + "--height", + "40", + "--frames", + "150", + "--repeats", + "1", + "--offset", + "0", + "--output", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-comparison/worktree-120x40-default-0.csv" + ], + "wall_seconds": 0.4725763619999839 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "240x80", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-comparison/current-240x80-muster-1.csv", + "--muster" + ], + "wall_seconds": 2.595202531000041 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "120x40", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-comparison/current-120x40-muster-1.csv", + "--muster" + ], + "wall_seconds": 0.6964559820000318 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "240x80", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-comparison/current-240x80-default-1.csv" + ], + "wall_seconds": 2.735688691000007 + }, + { + "command": [ + "/home/clifford/.codex/worktrees/b08b/nori/cli/.worktrees/animated-onboarding/nori-rs/target/release/examples/motion_profile", + "--width", + "240", + "--height", + "80", + "--frames", + "150", + "--repeats", + "1", + "--offset", + "94", + "--output", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-comparison/worktree-240x80-muster-1.csv" + ], + "wall_seconds": 2.218671271000005 + }, + { + "command": [ + "/home/clifford/.codex/worktrees/b08b/nori/cli/.worktrees/animated-onboarding/nori-rs/target/release/examples/motion_profile", + "--width", + "120", + "--height", + "40", + "--frames", + "150", + "--repeats", + "1", + "--offset", + "94", + "--output", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-comparison/worktree-120x40-muster-1.csv" + ], + "wall_seconds": 0.6224075740000217 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "240x80", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-comparison/current-240x80-default-0.csv" + ], + "wall_seconds": 2.936128468999982 + }, + { + "command": [ + "/home/clifford/.codex/worktrees/b08b/nori/cli/.worktrees/animated-onboarding/nori-rs/target/release/examples/motion_profile", + "--width", + "240", + "--height", + "80", + "--frames", + "150", + "--repeats", + "1", + "--offset", + "0", + "--output", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-comparison/worktree-240x80-default-1.csv" + ], + "wall_seconds": 2.220989546999988 + }, + { + "command": [ + "/home/clifford/.codex/worktrees/b08b/nori/cli/.worktrees/animated-onboarding/nori-rs/target/release/examples/motion_profile", + "--width", + "120", + "--height", + "40", + "--frames", + "150", + "--repeats", + "1", + "--offset", + "0", + "--output", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-comparison/worktree-120x40-default-1.csv" + ], + "wall_seconds": 0.5299674960000402 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "120x40", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-comparison/current-120x40-default-1.csv" + ], + "wall_seconds": 0.689532282000016 + }, + { + "command": [ + "/home/clifford/.codex/worktrees/b08b/nori/cli/.worktrees/animated-onboarding/nori-rs/target/release/examples/motion_profile", + "--width", + "120", + "--height", + "40", + "--frames", + "150", + "--repeats", + "1", + "--offset", + "94", + "--output", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-comparison/worktree-120x40-muster-0.csv" + ], + "wall_seconds": 0.5509233050000262 + }, + { + "command": [ + "/home/clifford/.codex/worktrees/b08b/nori/cli/.worktrees/animated-onboarding/nori-rs/target/release/examples/motion_profile", + "--width", + "240", + "--height", + "80", + "--frames", + "150", + "--repeats", + "1", + "--offset", + "0", + "--output", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-comparison/worktree-240x80-default-0.csv" + ], + "wall_seconds": 1.933944007999969 + }, + { + "command": [ + "/home/clifford/.codex/worktrees/b08b/nori/cli/.worktrees/animated-onboarding/nori-rs/target/release/examples/motion_profile", + "--width", + "240", + "--height", + "80", + "--frames", + "150", + "--repeats", + "1", + "--offset", + "94", + "--output", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-comparison/worktree-240x80-muster-0.csv" + ], + "wall_seconds": 2.1368187040000066 + } + ], + "notes": "Existing release builds; different visuals and benchmark harnesses; 150 frames per process at simulated 25 FPS. First frame excluded. No terminal I/O. Two repetitions; sequential shuffled order." +} diff --git a/docs/performance/motion-comparison/run.py b/docs/performance/motion-comparison/run.py new file mode 100644 index 000000000..b06e5359c --- /dev/null +++ b/docs/performance/motion-comparison/run.py @@ -0,0 +1,35 @@ +"""Compare existing release examples sequentially, without terminal I/O or rebuilds.""" +import csv, hashlib, json, math, os, pathlib, random, statistics, subprocess, time +HERE = pathlib.Path(__file__).resolve().parent +CURRENT = pathlib.Path('/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook') +OTHER = pathlib.Path('/home/clifford/.codex/worktrees/b08b/nori/cli/.worktrees/animated-onboarding/nori-rs/target/release/examples/motion_profile') +env = dict(os.environ, TERM='xterm-256color', COLORTERM='truecolor') +env.pop('NO_COLOR', None) +cases = [(impl, size, variant, rep) for impl in ['current', 'worktree'] for size in ['120x40', '240x80'] for variant in ['default', 'muster'] for rep in range(2)] +random.Random(910).shuffle(cases) +metadata = {'binaries': {str(p): hashlib.sha256(p.read_bytes()).hexdigest() for p in [CURRENT, OTHER]}, 'runs': [], 'notes': 'Existing release builds; different visuals and benchmark harnesses; 150 frames per process at simulated 25 FPS. First frame excluded. No terminal I/O. Two repetitions; sequential shuffled order.'} +groups = {} +for impl, size, variant, rep in cases: + path = HERE / f'{impl}-{size}-{variant}-{rep}.csv' + if impl == 'current': + command = [str(CURRENT), '--bench', '--size', size, '--frames', '150', '--profile', str(path)] + if variant == 'muster': command.append('--muster') + else: + width, height = size.split('x') + command = [str(OTHER), '--width', width, '--height', height, '--frames', '150', '--repeats', '1', '--offset', '94' if variant == 'muster' else '0', '--output', str(path)] + start = time.monotonic() + subprocess.run(command, env=env, check=True, capture_output=True, timeout=45) + metadata['runs'].append({'command': command, 'wall_seconds': time.monotonic()-start}) + rows = list(csv.DictReader(path.open()))[1:] + groups.setdefault((impl,size,variant), []).extend(rows) + print(f'{impl} {size} {variant} repeat {rep} done', flush=True) +(HERE/'metadata.json').write_text(json.dumps(metadata, indent=2)+'\n') +with (HERE/'summary.csv').open('w') as out: + writer = csv.writer(out) + writer.writerow(['implementation','size','variant','frames','median_total_ms','p95_total_ms','p95_widget_ms','over_40ms_pct','mean_bytes']) + for (impl,size,variant), rows in sorted(groups.items()): + total = sorted(float(r['total_us'])/1000 for r in rows) + widget = sorted(float(r['widget_us' if impl == 'current' else 'render_us'])/1000 for r in rows) + p95 = lambda seq: seq[math.ceil(len(seq)*.95)-1] + writer.writerow([impl,size,variant,len(rows),statistics.median(total),p95(total),p95(widget),100*sum(v>40 for v in total)/len(total),statistics.mean(float(r['ansi_bytes' if impl == 'current' else 'bytes']) for r in rows)]) +print((HERE/'summary.csv').read_text()) diff --git a/docs/performance/motion-comparison/summary.csv b/docs/performance/motion-comparison/summary.csv new file mode 100644 index 000000000..f83ecb185 --- /dev/null +++ b/docs/performance/motion-comparison/summary.csv @@ -0,0 +1,9 @@ +implementation,size,variant,frames,median_total_ms,p95_total_ms,p95_widget_ms,over_40ms_pct,mean_bytes +current,120x40,default,298,0.8561239999999999,5.830013,5.651569,0.0,58555.29530201342 +current,120x40,muster,298,0.9059675,6.376772,6.077572,0.0,58871.85906040268 +current,240x80,default,298,3.9170024999999997,24.670557000000002,23.979532,0.0,241693.12080536914 +current,240x80,muster,298,3.0439860000000003,23.310271,22.782294999999998,0.0,242172.6510067114 +worktree,120x40,default,298,3.417362,6.8618689999999996,6.697746,0.0,49907.281879194634 +worktree,120x40,muster,298,3.968585,8.157445,7.817797,0.0,52112.718120805366 +worktree,240x80,default,298,14.014571499999999,29.589234,28.627478,0.0,204100.9731543624 +worktree,240x80,muster,298,15.377357499999999,28.212151000000002,27.396611,0.0,212537.89932885906 diff --git a/docs/performance/motion-comparison/worktree-120x40-default-0.csv b/docs/performance/motion-comparison/worktree-120x40-default-0.csv new file mode 100644 index 000000000..2ee222658 --- /dev/null +++ b/docs/performance/motion-comparison/worktree-120x40-default-0.csv @@ -0,0 +1,151 @@ +frame,elapsed_s,zoom,render_us,diff_us,encode_us,reset_us,total_us,interval_us,bytes,changed_cells,glyph_changes,color_only_changes +0,0.000000,0.000000,539.131,54.100,0.092,3.574,596.897,0.000,19,0,0,0 +1,0.040000,0.013333,570.132,81.891,70.345,3.617,725.985,0.000,26508,1794,1490,304 +2,0.080000,0.026667,549.999,78.965,66.770,3.497,699.231,0.000,25611,1794,1472,322 +3,0.120000,0.040000,544.648,80.206,69.572,3.606,698.032,0.000,26225,1880,1548,332 +4,0.160000,0.053333,555.155,77.865,70.796,3.609,707.425,0.000,26848,1888,1625,263 +5,0.200000,0.066667,561.315,79.444,76.716,3.512,720.987,0.000,28662,1922,1614,308 +6,0.240000,0.080000,557.895,81.668,76.284,3.609,719.456,0.000,30222,1927,1615,312 +7,0.280000,0.093333,566.146,82.087,77.683,3.600,729.516,0.000,30137,1966,1664,302 +8,0.320000,0.106667,556.797,80.559,74.909,3.519,715.784,0.000,29303,1978,1685,293 +9,0.360000,0.120000,553.568,80.111,79.639,3.691,717.009,0.000,30889,1992,1671,321 +10,0.400000,0.133333,559.209,81.783,79.021,3.607,723.620,0.000,31405,2027,1719,308 +11,0.440000,0.146667,570.990,83.434,85.325,3.481,743.230,0.000,33468,2077,1786,291 +12,0.480000,0.160000,575.570,84.968,88.683,3.619,752.840,0.000,34619,2100,1801,299 +13,0.520000,0.173333,568.488,81.980,90.869,3.599,744.936,0.000,34408,2236,1935,301 +14,0.560000,0.186667,565.620,85.156,84.835,3.621,739.232,0.000,33480,2157,1859,298 +15,0.600000,0.200000,576.383,84.330,96.227,3.603,760.543,0.000,37316,2192,1903,289 +16,0.640000,0.213333,580.317,86.708,95.843,3.496,766.364,0.000,38134,2242,1975,267 +17,0.680000,0.226667,571.115,91.077,95.489,3.614,761.295,0.000,38388,2256,2005,251 +18,0.720000,0.240000,575.778,85.289,102.182,3.597,766.846,0.000,40343,2321,2051,270 +19,0.760000,0.253333,570.075,89.305,108.849,3.600,771.829,0.000,44107,2376,2086,290 +20,0.800000,0.266667,590.554,90.873,101.837,3.605,786.869,0.000,41932,2438,2143,295 +21,0.840000,0.280000,600.711,87.207,104.663,3.490,796.071,0.000,43280,2379,2135,244 +22,0.880000,0.293333,575.950,89.022,101.362,3.607,769.941,0.000,44522,2426,2171,255 +23,0.920000,0.306667,750.480,93.693,114.199,3.601,961.973,0.000,48900,2521,2270,251 +24,0.960000,0.320000,1079.323,98.117,119.340,3.589,1300.369,0.000,49498,2653,2426,227 +25,1.000000,0.333333,1372.264,98.054,124.916,3.607,1598.841,0.000,50662,2664,2440,224 +26,1.040000,0.346667,1521.903,96.011,124.344,3.517,1745.775,0.000,51170,2697,2518,179 +27,1.080000,0.360000,1788.739,96.986,134.119,3.595,2023.439,0.000,55458,2758,2605,153 +28,1.120000,0.373333,2012.852,94.174,148.972,3.605,2259.603,0.000,57366,3037,2866,171 +29,1.160000,0.386667,2384.698,96.368,138.607,3.601,2623.274,0.000,59470,3089,2894,195 +30,1.200000,0.400000,2525.027,94.762,147.146,3.600,2770.535,0.000,63216,3128,2975,153 +31,1.240000,0.413333,2694.422,101.186,151.888,3.492,2950.988,0.000,66357,3336,3185,151 +32,1.280000,0.426667,2823.811,102.409,158.265,3.599,3088.084,0.000,70141,3467,3294,173 +33,1.320000,0.440000,3037.996,107.701,161.827,3.599,3311.123,0.000,70382,3581,3462,119 +34,1.360000,0.453333,3011.468,101.925,161.213,3.611,3278.217,0.000,72615,3621,3520,101 +35,1.400000,0.466667,3036.966,98.103,164.434,3.605,3303.108,0.000,71280,3526,3383,143 +36,1.440000,0.480000,3063.787,97.847,162.922,3.487,3328.043,0.000,74795,3698,3605,93 +37,1.480000,0.493333,3058.361,100.596,168.663,3.491,3331.111,0.000,77129,3745,3643,102 +38,1.520000,0.506667,3074.241,101.689,170.985,3.486,3350.401,0.000,75114,3689,3600,89 +39,1.560000,0.520000,3168.942,102.472,181.806,3.620,3456.840,0.000,75970,3766,3678,88 +40,1.600000,0.533333,3093.110,101.601,177.311,3.668,3375.690,0.000,76080,3784,3691,93 +41,1.640000,0.546667,3081.761,100.979,176.695,3.594,3363.029,0.000,76791,3785,3682,103 +42,1.680000,0.560000,3116.905,100.679,179.358,3.607,3400.549,0.000,79022,3880,3776,104 +43,1.720000,0.573333,3097.222,99.528,174.240,3.594,3374.584,0.000,83680,3934,3810,124 +44,1.760000,0.586667,2971.644,99.047,170.770,3.564,3245.025,0.000,78645,3986,3867,119 +45,1.800000,0.600000,3116.561,101.409,197.719,3.580,3419.269,0.000,83248,4004,3876,128 +46,1.840000,0.613333,3169.402,102.804,181.809,3.497,3457.512,0.000,80264,3976,3852,124 +47,1.880000,0.626667,3184.755,103.308,180.679,3.481,3472.223,0.000,80216,4006,3882,124 +48,1.920000,0.640000,3240.099,102.748,165.048,3.505,3511.400,0.000,79827,4089,3960,129 +49,1.960000,0.653333,3225.166,110.279,170.900,3.551,3509.896,0.000,77002,4101,3973,128 +50,2.000000,0.666667,3351.741,107.281,171.714,3.609,3634.345,0.000,76961,4122,3985,137 +51,2.040000,0.680000,3253.289,102.511,168.065,3.595,3527.460,0.000,74357,4105,3929,176 +52,2.080000,0.693333,3234.717,104.421,155.990,3.589,3498.717,0.000,73155,4177,4016,161 +53,2.120000,0.706667,3239.871,100.878,165.103,3.509,3509.361,0.000,71266,4193,4045,148 +54,2.160000,0.720000,3268.854,100.249,162.739,3.486,3535.328,0.000,70649,4209,4050,159 +55,2.200000,0.733333,3271.143,100.156,163.849,3.471,3538.619,0.000,69222,4190,4010,180 +56,2.240000,0.746667,3274.723,101.385,163.192,3.593,3542.893,0.000,69993,4287,4100,187 +57,2.280000,0.760000,5760.820,100.021,171.758,3.496,6036.095,0.000,72374,4271,4094,177 +58,2.320000,0.773333,5813.308,100.526,175.586,3.489,6092.909,0.000,73051,4310,4129,181 +59,2.360000,0.786667,5715.710,99.598,162.535,3.483,5981.326,0.000,73213,4307,4094,213 +60,2.400000,0.800000,5711.248,99.301,163.798,3.609,5977.956,0.000,71056,4234,3949,285 +61,2.440000,0.813333,5810.604,97.440,146.594,3.520,6058.158,0.000,62736,4239,3921,318 +62,2.480000,0.826667,5791.487,97.567,120.966,3.664,6013.684,0.000,51774,4148,3809,339 +63,2.520000,0.840000,5800.561,98.300,95.552,3.591,5998.004,0.000,41231,3968,3655,313 +64,2.560000,0.853333,5766.460,97.341,81.193,3.613,5948.607,0.000,31384,3720,3513,207 +65,2.600000,0.866667,5784.369,95.365,68.112,3.605,5951.451,0.000,26485,3471,3317,154 +66,2.640000,0.880000,5764.647,95.667,64.900,3.603,5928.817,0.000,23711,3203,3096,107 +67,2.680000,0.893333,5763.356,98.423,59.132,3.592,5924.503,0.000,22181,2950,2869,81 +68,2.720000,0.906667,5762.165,97.517,54.525,3.588,5917.795,0.000,20730,2588,2530,58 +69,2.760000,0.920000,5736.573,95.843,50.985,3.605,5887.006,0.000,19371,2318,2247,71 +70,2.800000,0.933333,5772.312,90.824,41.260,3.612,5908.008,0.000,17092,1743,1698,45 +71,2.840000,0.946667,5831.815,88.148,33.842,3.590,5957.395,0.000,14203,1372,1333,39 +72,2.880000,0.960000,5800.206,82.584,25.663,3.612,5912.065,0.000,11076,988,962,26 +73,2.920000,0.973333,5765.738,79.281,16.315,3.489,5864.823,0.000,6997,609,582,27 +74,2.960000,0.986667,5732.504,74.791,9.787,3.499,5820.581,0.000,3415,274,236,38 +75,3.000000,1.000000,2449.832,72.436,4.674,4.151,2531.093,0.000,1477,95,84,11 +76,3.040000,0.986667,5725.374,72.155,3.361,3.494,5804.384,0.000,1293,102,90,12 +77,3.080000,0.973333,5803.546,74.494,8.399,3.486,5889.925,0.000,3327,286,250,36 +78,3.120000,0.960000,5791.353,80.643,16.648,3.499,5892.143,0.000,6962,593,566,27 +79,3.160000,0.946667,5861.801,83.155,25.742,3.598,5974.296,0.000,10908,974,948,26 +80,3.200000,0.933333,5855.396,87.846,35.765,3.628,5982.635,0.000,14937,1394,1352,42 +81,3.240000,0.920000,5837.249,91.110,41.052,3.593,5973.004,0.000,17273,1731,1682,49 +82,3.280000,0.906667,5800.178,95.841,54.993,3.609,5954.621,0.000,20439,2299,2227,72 +83,3.320000,0.893333,5771.957,99.290,149.994,3.592,6024.833,0.000,22190,2567,2503,64 +84,3.360000,0.880000,5816.815,97.218,65.487,3.588,5983.108,0.000,24827,2967,2874,93 +85,3.400000,0.866667,5881.225,95.508,71.344,3.489,6051.566,0.000,27838,3197,3090,107 +86,3.440000,0.853333,5828.531,97.126,81.106,3.632,6010.395,0.000,32888,3500,3357,143 +87,3.480000,0.840000,5807.501,96.754,105.097,3.604,6012.956,0.000,44256,3754,3534,220 +88,3.520000,0.826667,5849.766,96.527,128.544,3.493,6078.330,0.000,56292,3976,3688,288 +89,3.560000,0.813333,5848.350,111.819,141.383,3.504,6105.056,0.000,63887,4198,3870,328 +90,3.600000,0.800000,5821.768,100.061,161.439,3.599,6086.867,0.000,71703,4218,3873,345 +91,3.640000,0.786667,5791.147,100.259,161.944,3.590,6056.940,0.000,73903,4221,3929,292 +92,3.680000,0.773333,5798.126,98.408,178.821,3.605,6078.960,0.000,73174,4317,4109,208 +93,3.720000,0.760000,5839.607,102.915,170.689,3.606,6116.817,0.000,74079,4313,4120,193 +94,3.760000,0.746667,3446.249,98.235,164.343,3.608,3712.435,0.000,71757,4290,4105,185 +95,3.800000,0.733333,3398.396,100.341,156.644,3.487,3658.868,0.000,70497,4259,4094,165 +96,3.840000,0.720000,3367.000,99.517,159.939,3.583,3630.039,0.000,70182,4207,4050,157 +97,3.880000,0.706667,3331.600,100.296,153.426,3.497,3588.819,0.000,71102,4226,4073,153 +98,3.920000,0.693333,3380.260,99.081,156.530,3.600,3639.471,0.000,72007,4205,4063,142 +99,3.960000,0.680000,3331.717,102.963,169.209,3.493,3607.382,0.000,75769,4197,4059,138 +100,4.000000,0.666667,3325.448,101.518,177.820,3.592,3608.378,0.000,77017,4130,3963,167 +101,4.040000,0.653333,3338.516,102.103,170.593,3.580,3614.792,0.000,75981,4139,3996,143 +102,4.080000,0.640000,3301.348,102.582,188.647,3.596,3596.173,0.000,78470,4126,3984,142 +103,4.120000,0.626667,3286.896,102.341,176.688,3.491,3569.416,0.000,79390,4042,3893,149 +104,4.160000,0.613333,3269.797,101.444,177.589,3.501,3552.331,0.000,79594,4004,3886,118 +105,4.200000,0.600000,3235.446,102.442,166.120,3.493,3507.501,0.000,79209,3978,3856,122 +106,4.240000,0.586667,3129.764,101.328,175.843,3.586,3410.521,0.000,75782,4006,3890,116 +107,4.280000,0.573333,3227.422,100.498,186.181,3.505,3517.606,0.000,79431,3895,3808,87 +108,4.320000,0.560000,3250.666,103.538,175.982,3.491,3533.677,0.000,77968,3846,3727,119 +109,4.360000,0.546667,3230.294,102.194,178.729,3.594,3514.811,0.000,77234,3833,3749,84 +110,4.400000,0.533333,3215.103,102.228,171.980,3.494,3492.805,0.000,74878,3798,3688,110 +111,4.440000,0.520000,3214.378,102.053,161.113,3.510,3481.054,0.000,74978,3702,3621,81 +112,4.480000,0.506667,3209.561,101.043,163.678,3.502,3477.784,0.000,74038,3657,3577,80 +113,4.520000,0.493333,3190.309,99.816,166.075,3.601,3459.801,0.000,72407,3664,3601,63 +114,4.560000,0.480000,3221.807,101.121,159.392,3.490,3485.810,0.000,71497,3640,3564,76 +115,4.600000,0.466667,3170.395,99.070,174.132,3.594,3447.191,0.000,71669,3602,3527,75 +116,4.640000,0.453333,3154.025,98.495,156.286,3.626,3412.432,0.000,68961,3545,3443,102 +117,4.680000,0.440000,3168.233,100.092,161.469,3.590,3433.384,0.000,70020,3539,3443,96 +118,4.720000,0.426667,2991.127,103.632,159.081,3.608,3257.448,0.000,66997,3518,3409,109 +119,4.760000,0.413333,2824.565,97.990,149.059,3.481,3075.095,0.000,63376,3334,3207,127 +120,4.800000,0.400000,2662.451,98.208,157.159,3.672,2921.490,0.000,62362,3245,3108,137 +121,4.840000,0.386667,2515.459,94.347,133.835,3.490,2747.131,0.000,57241,3084,2916,168 +122,4.880000,0.373333,2147.383,92.766,138.127,3.575,2381.851,0.000,57908,3042,2836,206 +123,4.920000,0.360000,1881.064,89.337,130.395,3.590,2104.386,0.000,53719,2798,2631,167 +124,4.960000,0.346667,1590.932,90.481,118.838,3.488,1803.739,0.000,49719,2581,2389,192 +125,5.000000,0.333333,1415.187,91.215,118.110,3.618,1628.130,0.000,45811,2453,2280,173 +126,5.040000,0.320000,1089.924,91.428,111.176,3.588,1296.116,0.000,44895,2457,2251,206 +127,5.080000,0.306667,774.898,93.303,104.840,3.492,976.533,0.000,43456,2391,2199,192 +128,5.120000,0.293333,639.425,93.235,104.650,3.628,840.938,0.000,41816,2310,2093,217 +129,5.160000,0.280000,604.151,91.925,92.943,3.598,792.617,0.000,39051,2233,1989,244 +130,5.200000,0.266667,599.458,84.359,94.219,3.626,781.662,0.000,38329,2153,1915,238 +131,5.240000,0.253333,589.293,86.396,97.790,3.497,776.976,0.000,38619,2224,1925,299 +132,5.280000,0.240000,595.240,84.138,92.154,3.620,775.152,0.000,36237,2099,1810,289 +133,5.320000,0.226667,592.391,83.024,88.727,3.617,767.759,0.000,35139,2089,1851,238 +134,5.360000,0.213333,591.926,83.414,91.946,3.588,770.874,0.000,35977,2139,1876,263 +135,5.400000,0.200000,588.858,82.619,81.594,3.490,756.561,0.000,34275,2026,1780,246 +136,5.440000,0.186667,586.974,82.921,87.359,3.618,760.872,0.000,32645,2064,1810,254 +137,5.480000,0.173333,578.038,80.653,82.101,3.610,744.402,0.000,31278,2007,1743,264 +138,5.520000,0.160000,580.844,79.169,87.309,3.583,750.905,0.000,31887,1939,1709,230 +139,5.560000,0.146667,578.184,78.552,75.234,3.477,735.447,0.000,29702,1872,1616,256 +140,5.600000,0.133333,575.975,78.150,75.853,3.611,733.589,0.000,29489,1856,1599,257 +141,5.640000,0.120000,566.919,76.953,65.646,3.602,713.120,0.000,27516,1814,1572,242 +142,5.680000,0.106667,563.573,73.323,66.760,3.506,707.162,0.000,26003,1707,1447,260 +143,5.720000,0.093333,555.813,74.737,68.403,3.608,702.561,0.000,26834,1739,1499,240 +144,5.760000,0.080000,566.299,75.039,70.550,3.608,715.496,0.000,26903,1728,1447,281 +145,5.800000,0.066667,557.460,74.658,65.156,3.584,700.858,0.000,24981,1664,1418,246 +146,5.840000,0.053333,553.560,72.298,62.481,3.614,691.953,0.000,23668,1632,1347,285 +147,5.880000,0.040000,546.381,72.963,56.961,3.611,679.916,0.000,21875,1549,1297,252 +148,5.920000,0.026667,545.562,72.067,58.472,3.594,679.695,0.000,22709,1609,1359,250 +149,5.960000,0.013333,539.112,71.748,58.609,3.593,673.062,0.000,22489,1603,1332,271 diff --git a/docs/performance/motion-comparison/worktree-120x40-default-1.csv b/docs/performance/motion-comparison/worktree-120x40-default-1.csv new file mode 100644 index 000000000..33e788705 --- /dev/null +++ b/docs/performance/motion-comparison/worktree-120x40-default-1.csv @@ -0,0 +1,151 @@ +frame,elapsed_s,zoom,render_us,diff_us,encode_us,reset_us,total_us,interval_us,bytes,changed_cells,glyph_changes,color_only_changes +0,0.000000,0.000000,669.890,71.479,0.113,4.708,746.190,0.000,19,0,0,0 +1,0.040000,0.013333,725.897,109.226,99.385,4.234,938.742,0.000,26508,1794,1490,304 +2,0.080000,0.026667,720.928,105.147,96.056,4.998,927.129,0.000,25611,1794,1472,322 +3,0.120000,0.040000,810.119,127.852,103.626,4.936,1046.533,0.000,26225,1880,1548,332 +4,0.160000,0.053333,780.624,104.541,105.424,5.616,996.205,0.000,26848,1888,1625,263 +5,0.200000,0.066667,921.484,140.915,151.171,5.900,1219.470,0.000,28662,1922,1614,308 +6,0.240000,0.080000,793.893,112.772,130.740,5.516,1042.921,0.000,30222,1927,1615,312 +7,0.280000,0.093333,801.963,107.862,111.274,5.317,1026.416,0.000,30137,1966,1664,302 +8,0.320000,0.106667,845.330,128.167,117.187,4.961,1095.645,0.000,29303,1978,1685,293 +9,0.360000,0.120000,764.114,124.728,128.677,5.109,1022.628,0.000,30889,1992,1671,321 +10,0.400000,0.133333,733.603,109.551,114.109,4.683,961.946,0.000,31405,2027,1719,308 +11,0.440000,0.146667,737.285,110.670,122.616,4.681,975.252,0.000,33468,2077,1786,291 +12,0.480000,0.160000,737.492,111.543,126.132,5.181,980.348,0.000,34619,2100,1801,299 +13,0.520000,0.173333,749.151,113.571,129.411,5.265,997.398,0.000,34408,2236,1935,301 +14,0.560000,0.186667,751.000,111.492,125.236,6.169,993.897,0.000,33480,2157,1859,298 +15,0.600000,0.200000,748.075,113.763,137.666,5.815,1005.319,0.000,37316,2192,1903,289 +16,0.640000,0.213333,754.946,115.818,138.039,6.065,1014.868,0.000,38134,2242,1975,267 +17,0.680000,0.226667,756.111,115.376,138.790,5.591,1015.868,0.000,38388,2256,2005,251 +18,0.720000,0.240000,763.815,153.546,145.945,6.767,1070.073,0.000,40343,2321,2051,270 +19,0.760000,0.253333,758.207,127.510,163.858,4.267,1053.842,0.000,44107,2376,2086,290 +20,0.800000,0.266667,776.158,128.109,172.115,5.931,1082.313,0.000,41932,2438,2143,295 +21,0.840000,0.280000,866.687,124.535,154.290,7.014,1152.526,0.000,43280,2379,2135,244 +22,0.880000,0.293333,812.686,94.412,117.621,4.112,1028.831,0.000,44522,2426,2171,255 +23,0.920000,0.306667,792.160,94.305,120.385,3.584,1010.434,0.000,48900,2521,2270,251 +24,0.960000,0.320000,1209.348,392.471,133.252,4.706,1739.777,0.000,49498,2653,2426,227 +25,1.000000,0.333333,1627.077,125.857,126.536,3.600,1883.070,0.000,50662,2664,2440,224 +26,1.040000,0.346667,1522.689,99.424,121.556,3.547,1747.216,0.000,51170,2697,2518,179 +27,1.080000,0.360000,1803.332,95.833,141.008,3.627,2043.800,0.000,55458,2758,2605,153 +28,1.120000,0.373333,2036.656,95.737,139.548,3.565,2275.506,0.000,57366,3037,2866,171 +29,1.160000,0.386667,2383.969,95.221,141.822,4.030,2625.042,0.000,59470,3089,2894,195 +30,1.200000,0.400000,2796.177,109.872,174.062,3.961,3084.072,0.000,63216,3128,2975,153 +31,1.240000,0.413333,3295.822,135.263,198.199,5.033,3634.317,0.000,66357,3336,3185,151 +32,1.280000,0.426667,2992.308,101.746,160.286,3.466,3257.806,0.000,70141,3467,3294,173 +33,1.320000,0.440000,2981.090,107.491,156.676,3.580,3248.837,0.000,70382,3581,3462,119 +34,1.360000,0.453333,3001.794,98.219,196.681,3.486,3300.180,0.000,72615,3621,3520,101 +35,1.400000,0.466667,3085.541,98.837,158.936,3.569,3346.883,0.000,71280,3526,3383,143 +36,1.440000,0.480000,3043.691,98.950,168.085,3.559,3314.285,0.000,74795,3698,3605,93 +37,1.480000,0.493333,3130.238,107.190,174.269,3.758,3415.455,0.000,77129,3745,3643,102 +38,1.520000,0.506667,3317.389,112.354,181.840,4.086,3615.669,0.000,75114,3689,3600,89 +39,1.560000,0.520000,3426.076,101.831,169.036,3.568,3700.511,0.000,75970,3766,3678,88 +40,1.600000,0.533333,3101.880,101.322,167.430,3.465,3374.097,0.000,76080,3784,3691,93 +41,1.640000,0.546667,3370.852,111.965,169.661,3.569,3656.047,0.000,76791,3785,3682,103 +42,1.680000,0.560000,3535.866,105.010,192.185,3.751,3836.812,0.000,79022,3880,3776,104 +43,1.720000,0.573333,3424.969,138.209,259.823,4.790,3827.791,0.000,83680,3934,3810,124 +44,1.760000,0.586667,3017.363,99.184,171.455,3.580,3291.582,0.000,78645,3986,3867,119 +45,1.800000,0.600000,3114.936,102.174,160.909,3.581,3381.600,0.000,83248,4004,3876,128 +46,1.840000,0.613333,3272.644,104.638,179.317,3.664,3560.263,0.000,80264,3976,3852,124 +47,1.880000,0.626667,3591.641,140.775,192.200,3.665,3928.281,0.000,80216,4006,3882,124 +48,1.920000,0.640000,3534.674,115.926,171.485,3.666,3825.751,0.000,79827,4089,3960,129 +49,1.960000,0.653333,3377.392,128.484,173.803,3.499,3683.178,0.000,77002,4101,3973,128 +50,2.000000,0.666667,3440.714,104.724,169.766,3.562,3718.766,0.000,76961,4122,3985,137 +51,2.040000,0.680000,3251.007,103.003,168.224,3.569,3525.803,0.000,74357,4105,3929,176 +52,2.080000,0.693333,3252.219,100.117,165.483,3.569,3521.388,0.000,73155,4177,4016,161 +53,2.120000,0.706667,3331.419,101.050,160.650,9.476,3602.595,0.000,71266,4193,4045,148 +54,2.160000,0.720000,3671.799,112.035,191.446,4.377,3979.657,0.000,70649,4209,4050,159 +55,2.200000,0.733333,3430.052,102.418,159.074,3.544,3695.088,0.000,69222,4190,4010,180 +56,2.240000,0.746667,3297.716,102.719,154.526,3.563,3558.524,0.000,69993,4287,4100,187 +57,2.280000,0.760000,5767.113,101.279,173.283,3.568,6045.243,0.000,72374,4271,4094,177 +58,2.320000,0.773333,6358.299,108.130,179.140,3.655,6649.224,0.000,73051,4310,4129,181 +59,2.360000,0.786667,6740.094,120.389,203.197,4.500,7068.180,0.000,73213,4307,4094,213 +60,2.400000,0.800000,6065.294,101.828,163.232,3.553,6333.907,0.000,71056,4234,3949,285 +61,2.440000,0.813333,6223.974,108.944,156.642,3.675,6493.235,0.000,62736,4239,3921,318 +62,2.480000,0.826667,6660.103,100.230,116.610,3.561,6880.504,0.000,51774,4148,3809,339 +63,2.520000,0.840000,6290.349,121.442,116.689,4.342,6532.822,0.000,41231,3968,3655,313 +64,2.560000,0.853333,6371.612,122.851,107.431,4.982,6606.876,0.000,31384,3720,3513,207 +65,2.600000,0.866667,6049.123,96.281,68.239,3.552,6217.195,0.000,26485,3471,3317,154 +66,2.640000,0.880000,6125.006,95.139,62.745,3.574,6286.464,0.000,23711,3203,3096,107 +67,2.680000,0.893333,6292.420,120.154,75.218,4.510,6492.302,0.000,22181,2950,2869,81 +68,2.720000,0.906667,6701.851,105.160,55.523,3.563,6866.097,0.000,20730,2588,2530,58 +69,2.760000,0.920000,5862.535,113.042,63.899,4.536,6044.012,0.000,19371,2318,2247,71 +70,2.800000,0.933333,7008.074,115.190,51.110,4.065,7178.439,0.000,17092,1743,1698,45 +71,2.840000,0.946667,6700.582,113.956,42.640,4.691,6861.869,0.000,14203,1372,1333,39 +72,2.880000,0.960000,7096.849,98.013,26.101,3.667,7224.630,0.000,11076,988,962,26 +73,2.920000,0.973333,6347.179,79.305,18.111,3.583,6448.178,0.000,6997,609,582,27 +74,2.960000,0.986667,6198.280,103.518,13.604,4.977,6320.379,0.000,3415,274,236,38 +75,3.000000,1.000000,3285.718,90.725,5.943,5.237,3387.623,0.000,1477,95,84,11 +76,3.040000,0.986667,6175.799,90.157,5.293,5.116,6276.365,0.000,1293,102,90,12 +77,3.080000,0.973333,7278.203,103.514,11.697,4.940,7398.354,0.000,3327,286,250,36 +78,3.120000,0.960000,6767.803,79.380,18.368,3.510,6869.061,0.000,6962,593,566,27 +79,3.160000,0.946667,6697.746,87.276,25.714,3.508,6814.244,0.000,10908,974,948,26 +80,3.200000,0.933333,7086.766,120.511,47.380,4.694,7259.351,0.000,14937,1394,1352,42 +81,3.240000,0.920000,7079.593,97.163,42.180,3.565,7222.501,0.000,17273,1731,1682,49 +82,3.280000,0.906667,6832.645,122.556,57.707,4.523,7017.431,0.000,20439,2299,2227,72 +83,3.320000,0.893333,6514.077,121.230,71.921,4.516,6711.744,0.000,22190,2567,2503,64 +84,3.360000,0.880000,6329.597,124.843,87.808,4.517,6546.765,0.000,24827,2967,2874,93 +85,3.400000,0.866667,7149.452,119.566,94.261,4.686,7367.965,0.000,27838,3197,3090,107 +86,3.440000,0.853333,6344.166,98.301,87.444,3.555,6533.466,0.000,32888,3500,3357,143 +87,3.480000,0.840000,7283.787,126.212,151.597,4.516,7566.112,0.000,44256,3754,3534,220 +88,3.520000,0.826667,6212.857,96.827,131.706,3.567,6444.957,0.000,56292,3976,3688,288 +89,3.560000,0.813333,6723.441,150.064,178.422,4.546,7056.473,0.000,63887,4198,3870,328 +90,3.600000,0.800000,6526.732,99.433,160.859,3.551,6790.575,0.000,71703,4218,3873,345 +91,3.640000,0.786667,6050.148,98.793,167.347,3.476,6319.764,0.000,73903,4221,3929,292 +92,3.680000,0.773333,7069.188,126.497,208.442,4.527,7408.654,0.000,73174,4317,4109,208 +93,3.720000,0.760000,6498.760,112.991,186.952,3.567,6802.270,0.000,74079,4313,4120,193 +94,3.760000,0.746667,3408.202,101.199,171.255,3.770,3684.426,0.000,71757,4290,4105,185 +95,3.800000,0.733333,4199.102,132.970,204.788,4.009,4540.869,0.000,70497,4259,4094,165 +96,3.840000,0.720000,3661.089,103.105,169.073,3.691,3936.958,0.000,70182,4207,4050,157 +97,3.880000,0.706667,3690.695,111.234,156.777,3.681,3962.387,0.000,71102,4226,4073,153 +98,3.920000,0.693333,3485.958,102.090,163.874,3.543,3755.465,0.000,72007,4205,4063,142 +99,3.960000,0.680000,4077.729,127.806,198.829,5.012,4409.376,0.000,75769,4197,4059,138 +100,4.000000,0.666667,3738.650,102.663,167.287,3.535,4012.135,0.000,77017,4130,3963,167 +101,4.040000,0.653333,3311.284,103.675,165.263,3.556,3583.778,0.000,75981,4139,3996,143 +102,4.080000,0.640000,3687.594,103.503,181.033,3.955,3976.085,0.000,78470,4126,3984,142 +103,4.120000,0.626667,3978.973,103.245,159.253,3.590,4245.061,0.000,79390,4042,3893,149 +104,4.160000,0.613333,3422.695,109.149,170.082,3.460,3705.386,0.000,79594,4004,3886,118 +105,4.200000,0.600000,3410.412,128.773,208.895,4.222,3752.302,0.000,79209,3978,3856,122 +106,4.240000,0.586667,3420.018,127.441,187.185,3.841,3738.485,0.000,75782,4006,3890,116 +107,4.280000,0.573333,3836.225,136.830,232.959,4.802,4210.816,0.000,79431,3895,3808,87 +108,4.320000,0.560000,3593.249,116.381,191.659,3.565,3904.854,0.000,77968,3846,3727,119 +109,4.360000,0.546667,3334.397,101.171,169.662,3.565,3608.795,0.000,77234,3833,3749,84 +110,4.400000,0.533333,3681.045,113.670,176.303,3.561,3974.579,0.000,74878,3798,3688,110 +111,4.440000,0.520000,3773.368,142.852,234.720,4.782,4155.722,0.000,74978,3702,3621,81 +112,4.480000,0.506667,3611.169,102.595,181.867,3.769,3899.400,0.000,74038,3657,3577,80 +113,4.520000,0.493333,3234.511,102.001,165.205,3.569,3505.286,0.000,72407,3664,3601,63 +114,4.560000,0.480000,3217.517,102.934,159.013,3.566,3483.030,0.000,71497,3640,3564,76 +115,4.600000,0.466667,3169.536,100.078,158.595,3.562,3431.771,0.000,71669,3602,3527,75 +116,4.640000,0.453333,3660.563,131.173,205.086,4.339,4001.161,0.000,68961,3545,3443,102 +117,4.680000,0.440000,3657.994,109.427,169.666,3.877,3940.964,0.000,70020,3539,3443,96 +118,4.720000,0.426667,3293.606,105.711,164.145,3.756,3567.218,0.000,66997,3518,3409,109 +119,4.760000,0.413333,2990.799,111.718,153.234,3.558,3259.309,0.000,63376,3334,3207,127 +120,4.800000,0.400000,2825.055,102.438,165.450,3.952,3096.895,0.000,62362,3245,3108,137 +121,4.840000,0.386667,3048.219,98.993,142.590,3.638,3293.440,0.000,57241,3084,2916,168 +122,4.880000,0.373333,2280.278,90.487,142.945,3.968,2517.678,0.000,57908,3042,2836,206 +123,4.920000,0.360000,2117.530,92.619,134.363,3.584,2348.096,0.000,53719,2798,2631,167 +124,4.960000,0.346667,1771.198,94.590,123.400,3.649,1992.837,0.000,49719,2581,2389,192 +125,5.000000,0.333333,1473.019,94.107,118.632,3.572,1689.330,0.000,45811,2453,2280,173 +126,5.040000,0.320000,1093.471,92.151,113.475,3.577,1302.674,0.000,44895,2457,2251,206 +127,5.080000,0.306667,792.677,118.131,358.232,4.785,1273.825,0.000,43456,2391,2199,192 +128,5.120000,0.293333,839.066,115.342,132.428,4.996,1091.832,0.000,41816,2310,2093,217 +129,5.160000,0.280000,817.454,117.768,112.694,4.154,1052.070,0.000,39051,2233,1989,244 +130,5.200000,0.266667,720.197,109.142,127.248,4.608,961.195,0.000,38329,2153,1915,238 +131,5.240000,0.253333,794.574,118.273,108.656,4.149,1025.652,0.000,38619,2224,1925,299 +132,5.280000,0.240000,794.909,109.414,115.683,4.425,1024.431,0.000,36237,2099,1810,289 +133,5.320000,0.226667,703.144,106.125,106.658,4.504,920.431,0.000,35139,2089,1851,238 +134,5.360000,0.213333,647.995,109.354,117.462,4.484,879.295,0.000,35977,2139,1876,263 +135,5.400000,0.200000,736.027,114.996,109.624,5.002,965.649,0.000,34275,2026,1780,246 +136,5.440000,0.186667,674.647,103.696,108.138,4.525,891.006,0.000,32645,2064,1810,254 +137,5.480000,0.173333,622.574,88.707,88.555,4.339,804.175,0.000,31278,2007,1743,264 +138,5.520000,0.160000,666.615,92.980,90.639,3.653,853.887,0.000,31887,1939,1709,230 +139,5.560000,0.146667,691.782,80.080,84.462,4.136,860.460,0.000,29702,1872,1616,256 +140,5.600000,0.133333,628.489,81.839,75.581,3.565,789.474,0.000,29489,1856,1599,257 +141,5.640000,0.120000,631.071,94.776,79.869,3.580,809.296,0.000,27516,1814,1572,242 +142,5.680000,0.106667,574.421,94.197,85.617,4.768,759.003,0.000,26003,1707,1447,260 +143,5.720000,0.093333,710.430,80.430,84.706,4.408,879.974,0.000,26834,1739,1499,240 +144,5.760000,0.080000,635.627,75.846,69.976,3.559,785.008,0.000,26903,1728,1447,281 +145,5.800000,0.066667,585.128,85.340,72.025,4.162,746.655,0.000,24981,1664,1418,246 +146,5.840000,0.053333,735.358,91.067,73.182,3.972,903.579,0.000,23668,1632,1347,285 +147,5.880000,0.040000,619.054,81.194,63.093,3.982,767.323,0.000,21875,1549,1297,252 +148,5.920000,0.026667,613.021,88.283,67.514,4.275,773.093,0.000,22709,1609,1359,250 +149,5.960000,0.013333,627.030,90.563,80.392,4.834,802.819,0.000,22489,1603,1332,271 diff --git a/docs/performance/motion-comparison/worktree-120x40-muster-0.csv b/docs/performance/motion-comparison/worktree-120x40-muster-0.csv new file mode 100644 index 000000000..90a2ae79b --- /dev/null +++ b/docs/performance/motion-comparison/worktree-120x40-muster-0.csv @@ -0,0 +1,151 @@ +frame,elapsed_s,zoom,render_us,diff_us,encode_us,reset_us,total_us,interval_us,bytes,changed_cells,glyph_changes,color_only_changes +0,0.000000,0.000000,528.085,52.446,0.070,3.594,584.195,0.000,19,0,0,0 +1,0.040000,0.013333,572.093,77.146,64.055,3.567,716.861,0.000,25548,1668,1380,288 +2,0.080000,0.026667,567.748,78.284,65.439,3.471,714.942,0.000,26095,1743,1398,345 +3,0.120000,0.040000,591.042,93.178,72.687,4.272,761.179,0.000,25773,1814,1510,304 +4,0.160000,0.053333,675.347,79.460,70.377,3.586,828.770,0.000,26596,1790,1516,274 +5,0.200000,0.066667,632.845,84.906,75.609,3.577,796.937,0.000,28969,1919,1614,305 +6,0.240000,0.080000,631.838,80.853,77.649,3.581,793.921,0.000,30655,1988,1663,325 +7,0.280000,0.093333,635.103,81.903,89.084,3.635,809.725,0.000,31366,2043,1737,306 +8,0.320000,0.106667,690.032,92.790,85.144,3.583,871.549,0.000,32365,2048,1796,252 +9,0.360000,0.120000,660.584,100.478,102.777,4.408,868.247,0.000,33959,2147,1889,258 +10,0.400000,0.133333,650.915,87.853,96.803,3.964,839.535,0.000,34825,2138,1847,291 +11,0.440000,0.146667,656.721,88.997,91.722,3.600,841.040,0.000,35742,2212,1915,297 +12,0.480000,0.160000,617.132,85.052,108.694,3.569,814.447,0.000,38327,2249,1972,277 +13,0.520000,0.173333,620.116,90.980,93.988,3.467,808.551,0.000,38781,2395,2101,294 +14,0.560000,0.186667,618.441,89.897,99.538,3.473,811.349,0.000,39865,2252,1988,264 +15,0.600000,0.200000,615.177,89.200,99.754,3.555,807.686,0.000,39385,2346,2083,263 +16,0.640000,0.213333,623.746,89.876,104.520,3.562,821.704,0.000,41658,2384,2136,248 +17,0.680000,0.226667,627.997,92.857,106.314,3.571,830.739,0.000,42694,2456,2191,265 +18,0.720000,0.240000,633.297,91.571,103.602,3.561,832.031,0.000,42145,2419,2150,269 +19,0.760000,0.253333,636.823,98.441,115.535,3.750,854.549,0.000,41820,2431,2197,234 +20,0.800000,0.266667,640.359,90.071,96.301,3.494,830.225,0.000,43616,2414,2184,230 +21,0.840000,0.280000,631.905,88.607,115.643,3.780,839.935,0.000,45326,2435,2176,259 +22,0.880000,0.293333,744.727,94.721,115.202,3.582,958.232,0.000,45177,2484,2242,242 +23,0.920000,0.306667,847.475,106.933,137.532,3.965,1095.905,0.000,47142,2574,2339,235 +24,0.960000,0.320000,1253.407,95.644,120.170,3.572,1472.793,0.000,50372,2622,2440,182 +25,1.000000,0.333333,1655.250,111.656,138.327,3.563,1908.796,0.000,51279,2668,2497,171 +26,1.040000,0.346667,1794.155,99.058,155.818,4.675,2053.706,0.000,52453,2702,2502,200 +27,1.080000,0.360000,2053.505,96.754,141.266,3.571,2295.096,0.000,57439,2831,2644,187 +28,1.120000,0.373333,2312.578,93.798,137.739,3.578,2547.693,0.000,57533,2967,2786,181 +29,1.160000,0.386667,2642.428,97.660,146.359,3.564,2890.011,0.000,62580,3092,2926,166 +30,1.200000,0.400000,3132.095,106.925,183.010,3.975,3426.005,0.000,64768,3332,3151,181 +31,1.240000,0.413333,3633.165,107.722,169.488,4.390,3914.765,0.000,66103,3337,3184,153 +32,1.280000,0.426667,3365.919,132.974,186.110,4.342,3689.345,0.000,69389,3483,3372,111 +33,1.320000,0.440000,4018.796,143.715,227.579,3.751,4393.841,0.000,70488,3571,3478,93 +34,1.360000,0.453333,3573.860,98.445,170.829,3.562,3846.696,0.000,71541,3611,3496,115 +35,1.400000,0.466667,3401.338,96.869,164.750,3.553,3666.510,0.000,73205,3627,3538,89 +36,1.440000,0.480000,3938.856,110.566,180.699,3.882,4234.003,0.000,74076,3687,3576,111 +37,1.480000,0.493333,3920.568,122.770,204.850,4.707,4252.895,0.000,74296,3683,3589,94 +38,1.520000,0.506667,3698.288,99.199,175.798,3.580,3976.865,0.000,75463,3708,3609,99 +39,1.560000,0.520000,3460.748,100.816,172.059,3.556,3737.179,0.000,76494,3748,3641,107 +40,1.600000,0.533333,3608.814,138.221,210.198,4.363,3961.596,0.000,75882,3766,3653,113 +41,1.640000,0.546667,4141.640,143.727,213.878,4.672,4503.917,0.000,76010,3827,3723,104 +42,1.680000,0.560000,3882.130,118.454,171.683,3.590,4175.857,0.000,76686,3829,3741,88 +43,1.720000,0.573333,4010.829,135.656,212.161,4.618,4363.264,0.000,77248,3855,3764,91 +44,1.760000,0.586667,3702.687,103.208,180.304,3.581,3989.780,0.000,82269,4026,3894,132 +45,1.800000,0.600000,3546.284,99.636,172.004,3.552,3821.476,0.000,78594,4055,3951,104 +46,1.840000,0.613333,3884.565,104.619,221.696,4.497,4215.377,0.000,80220,4056,3943,113 +47,1.880000,0.626667,4299.837,114.659,197.707,4.273,4616.476,0.000,79951,4051,3919,132 +48,1.920000,0.640000,3931.071,105.678,157.964,3.573,4198.286,0.000,77357,4111,3978,133 +49,1.960000,0.653333,3693.952,99.321,158.632,3.572,3955.477,0.000,76189,4170,4026,144 +50,2.000000,0.666667,3711.838,99.782,219.623,5.014,4036.257,0.000,76633,4160,3999,161 +51,2.040000,0.680000,4044.012,102.749,193.510,3.977,4344.248,0.000,73051,4183,4052,131 +52,2.080000,0.693333,3824.588,98.555,164.879,3.575,4091.597,0.000,73277,4197,4049,148 +53,2.120000,0.706667,3637.168,99.134,164.786,3.547,3904.635,0.000,72531,4221,4062,159 +54,2.160000,0.720000,3701.115,112.351,189.923,3.586,4006.975,0.000,71802,4248,4052,196 +55,2.200000,0.733333,3818.437,99.269,169.324,3.618,4090.648,0.000,71459,4288,4114,174 +56,2.240000,0.746667,3777.009,111.857,181.966,3.567,4074.399,0.000,72716,4251,4102,149 +57,2.280000,0.760000,7124.100,101.113,168.438,3.548,7397.199,0.000,71449,4278,4110,168 +58,2.320000,0.773333,6799.067,97.881,170.384,3.602,7070.934,0.000,73734,4319,4156,163 +59,2.360000,0.786667,6853.231,115.049,191.616,4.378,7164.274,0.000,75136,4332,4123,209 +60,2.400000,0.800000,6843.912,96.752,157.074,3.574,7101.312,0.000,71698,4370,4149,221 +61,2.440000,0.813333,6506.448,97.562,151.455,3.561,6759.026,0.000,66886,4303,4007,296 +62,2.480000,0.826667,6573.062,96.977,144.712,3.559,6818.310,0.000,59990,4180,3864,316 +63,2.520000,0.840000,6649.913,117.927,144.916,3.545,6916.301,0.000,52591,4056,3709,347 +64,2.560000,0.853333,7121.926,125.375,138.431,4.650,7390.382,0.000,42804,3790,3493,297 +65,2.600000,0.866667,7375.075,132.472,120.799,3.569,7631.915,0.000,37341,3485,3237,248 +66,2.640000,0.880000,6566.407,99.921,83.869,3.572,6753.769,0.000,33641,3418,3198,220 +67,2.680000,0.893333,6843.419,97.954,79.016,3.563,7023.952,0.000,32010,3151,2958,193 +68,2.720000,0.906667,6808.800,99.583,76.382,3.580,6988.345,0.000,30544,2910,2719,191 +69,2.760000,0.920000,7069.727,113.183,74.037,3.997,7260.944,0.000,27958,2571,2357,214 +70,2.800000,0.933333,7220.412,102.993,81.550,4.304,7409.259,0.000,25820,2374,2194,180 +71,2.840000,0.946667,7427.042,93.136,63.850,3.571,7587.599,0.000,26920,1971,1732,239 +72,2.880000,0.960000,6586.917,93.310,64.009,3.575,6747.811,0.000,24771,1910,1702,208 +73,2.920000,0.973333,6851.385,99.649,44.161,4.071,6999.266,0.000,15453,1310,1164,146 +74,2.960000,0.986667,6981.992,83.646,56.847,3.576,7126.061,0.000,24425,1949,1842,107 +75,3.000000,1.000000,2540.326,76.686,22.494,3.547,2643.053,0.000,8726,1097,1034,63 +76,3.040000,0.986667,6511.403,79.179,11.863,3.934,6606.379,0.000,4090,617,590,27 +77,3.080000,0.973333,6868.167,93.050,58.767,3.561,7023.545,0.000,23663,2095,1896,199 +78,3.120000,0.960000,6826.167,92.880,56.423,3.946,6979.416,0.000,21375,1734,1538,196 +79,3.160000,0.946667,6680.162,99.321,61.287,3.856,6844.626,0.000,21055,1728,1424,304 +80,3.200000,0.933333,7197.307,96.345,71.082,3.572,7368.306,0.000,29737,2405,2149,256 +81,3.240000,0.920000,6507.781,95.286,60.521,3.571,6667.159,0.000,23907,2352,2112,240 +82,3.280000,0.906667,7604.814,121.685,65.637,3.578,7795.714,0.000,26477,2304,2155,149 +83,3.320000,0.893333,6521.967,97.002,76.098,3.478,6698.545,0.000,30557,2983,2819,164 +84,3.360000,0.880000,6532.370,98.139,83.159,3.581,6717.249,0.000,33762,3078,2918,160 +85,3.400000,0.866667,6700.295,117.284,113.786,4.452,6935.817,0.000,35772,3376,3197,179 +86,3.440000,0.853333,7251.570,98.483,111.569,3.580,7465.202,0.000,43915,3597,3371,226 +87,3.480000,0.840000,6680.764,133.564,157.546,4.616,6976.490,0.000,50693,3745,3494,251 +88,3.520000,0.826667,7341.936,97.730,135.456,3.500,7578.622,0.000,61144,4028,3660,368 +89,3.560000,0.813333,7400.969,107.382,159.976,3.563,7671.890,0.000,68634,4128,3795,333 +90,3.600000,0.800000,6967.470,105.154,169.704,4.371,7246.699,0.000,71261,4256,3964,292 +91,3.640000,0.786667,6866.191,116.504,170.187,3.673,7156.555,0.000,73162,4355,4099,256 +92,3.680000,0.773333,6948.696,100.340,166.708,3.560,7219.304,0.000,73140,4308,4091,217 +93,3.720000,0.760000,6560.648,111.839,176.400,3.835,6852.722,0.000,72485,4315,4132,183 +94,3.760000,0.746667,4040.530,108.041,198.320,3.988,4350.879,0.000,73404,4281,4095,186 +95,3.800000,0.733333,3988.680,117.266,206.635,4.626,4317.207,0.000,72620,4270,4099,171 +96,3.840000,0.720000,4158.481,109.946,163.926,3.564,4435.917,0.000,71065,4262,4082,180 +97,3.880000,0.706667,3647.411,99.878,163.628,3.571,3914.488,0.000,72937,4214,4033,181 +98,3.920000,0.693333,3680.738,98.505,164.643,3.568,3947.454,0.000,73276,4230,4039,191 +99,3.960000,0.680000,3792.018,107.682,160.641,3.665,4064.006,0.000,73443,4175,4027,148 +100,4.000000,0.666667,4389.034,102.995,166.250,3.573,4661.852,0.000,75396,4167,4021,146 +101,4.040000,0.653333,3620.856,100.498,170.434,3.487,3895.275,0.000,76340,4176,4021,155 +102,4.080000,0.640000,3787.721,127.172,228.803,4.687,4148.383,0.000,78073,4096,3944,152 +103,4.120000,0.626667,3811.297,99.940,172.046,3.574,4086.857,0.000,79272,4089,3976,113 +104,4.160000,0.613333,3565.046,101.190,176.620,3.567,3846.423,0.000,78654,4050,3920,130 +105,4.200000,0.600000,3554.944,99.688,179.710,3.555,3837.897,0.000,80847,4040,3929,111 +106,4.240000,0.586667,3532.016,103.113,181.541,3.487,3820.157,0.000,81472,4051,3929,122 +107,4.280000,0.573333,3702.973,104.435,171.908,3.661,3982.977,0.000,76286,4044,3918,126 +108,4.320000,0.560000,3886.131,126.426,191.839,3.785,4208.181,0.000,77527,3906,3801,105 +109,4.360000,0.546667,3901.135,116.187,201.447,4.402,4223.171,0.000,76410,3879,3785,94 +110,4.400000,0.533333,3929.939,102.044,175.559,4.171,4211.713,0.000,75027,3808,3715,93 +111,4.440000,0.520000,3644.673,100.574,180.825,3.566,3929.638,0.000,76292,3754,3657,97 +112,4.480000,0.506667,3438.852,101.760,166.352,3.562,3710.526,0.000,74443,3761,3662,99 +113,4.520000,0.493333,3670.331,101.506,170.647,3.558,3946.042,0.000,74633,3768,3666,102 +114,4.560000,0.480000,3744.724,121.207,213.598,4.823,4084.352,0.000,73051,3715,3648,67 +115,4.600000,0.466667,3714.309,98.872,158.932,3.461,3975.574,0.000,69521,3649,3557,92 +116,4.640000,0.453333,3358.976,98.023,159.551,3.587,3620.137,0.000,69049,3539,3437,102 +117,4.680000,0.440000,3345.595,99.060,163.868,3.575,3612.098,0.000,67920,3551,3457,94 +118,4.720000,0.426667,3166.284,99.804,155.306,3.565,3424.959,0.000,66663,3553,3462,91 +119,4.760000,0.413333,3002.625,98.330,147.395,3.573,3251.923,0.000,63974,3398,3296,102 +120,4.800000,0.400000,2822.605,98.270,143.075,5.926,3069.876,0.000,62413,3249,3099,150 +121,4.840000,0.386667,2869.835,94.673,133.347,3.744,3101.599,0.000,59429,3159,2992,167 +122,4.880000,0.373333,2588.305,109.194,152.259,4.315,2854.073,0.000,55154,3026,2827,199 +123,4.920000,0.360000,2165.657,90.850,127.512,3.474,2387.493,0.000,53279,2824,2655,169 +124,4.960000,0.346667,1666.704,90.602,122.900,3.493,1883.699,0.000,50663,2636,2463,173 +125,5.000000,0.333333,1493.009,93.612,121.113,3.565,1711.299,0.000,48693,2563,2383,180 +126,5.040000,0.320000,1180.989,122.972,135.918,4.163,1444.042,0.000,45505,2480,2288,192 +127,5.080000,0.306667,832.016,91.690,108.240,3.562,1035.508,0.000,44450,2467,2276,191 +128,5.120000,0.293333,638.377,91.110,99.404,3.585,832.476,0.000,42582,2404,2176,228 +129,5.160000,0.280000,640.853,90.596,101.786,3.571,836.806,0.000,40500,2298,2025,273 +130,5.200000,0.266667,628.082,85.382,101.794,3.978,819.236,0.000,39563,2259,2007,252 +131,5.240000,0.253333,718.668,95.836,95.138,3.778,913.420,0.000,36871,2163,1952,211 +132,5.280000,0.240000,723.003,90.546,98.330,3.663,915.542,0.000,36711,2176,1974,202 +133,5.320000,0.226667,699.974,84.529,81.586,3.567,869.656,0.000,34633,2156,1895,261 +134,5.360000,0.213333,627.302,82.358,80.012,3.590,793.262,0.000,34770,2038,1789,249 +135,5.400000,0.200000,799.359,138.822,92.817,4.298,1035.296,0.000,33734,2060,1818,242 +136,5.440000,0.186667,704.563,98.373,97.686,4.123,904.745,0.000,31979,2002,1742,260 +137,5.480000,0.173333,684.596,87.582,79.185,3.586,854.949,0.000,31923,1967,1692,275 +138,5.520000,0.160000,598.144,79.878,79.153,3.593,760.768,0.000,30351,1999,1719,280 +139,5.560000,0.146667,588.103,77.048,80.868,3.584,749.603,0.000,30054,1887,1610,277 +140,5.600000,0.133333,588.874,75.573,72.622,3.572,740.641,0.000,28694,1791,1528,263 +141,5.640000,0.120000,587.109,76.642,66.974,3.583,734.308,0.000,27019,1751,1465,286 +142,5.680000,0.106667,584.098,74.280,64.539,3.571,726.488,0.000,25075,1686,1404,282 +143,5.720000,0.093333,583.507,82.358,77.431,3.950,747.246,0.000,25822,1722,1441,281 +144,5.760000,0.080000,588.321,74.830,66.579,3.570,733.300,0.000,25813,1712,1418,294 +145,5.800000,0.066667,581.766,73.575,58.441,3.570,717.352,0.000,25006,1684,1388,296 +146,5.840000,0.053333,569.334,74.256,62.389,3.481,709.460,0.000,23881,1657,1370,287 +147,5.880000,0.040000,560.589,72.906,60.929,3.583,698.007,0.000,23050,1606,1327,279 +148,5.920000,0.026667,562.609,72.306,58.175,3.578,696.668,0.000,22625,1621,1339,282 +149,5.960000,0.013333,560.321,73.728,60.834,3.569,698.452,0.000,23049,1564,1279,285 diff --git a/docs/performance/motion-comparison/worktree-120x40-muster-1.csv b/docs/performance/motion-comparison/worktree-120x40-muster-1.csv new file mode 100644 index 000000000..da860e84a --- /dev/null +++ b/docs/performance/motion-comparison/worktree-120x40-muster-1.csv @@ -0,0 +1,151 @@ +frame,elapsed_s,zoom,render_us,diff_us,encode_us,reset_us,total_us,interval_us,bytes,changed_cells,glyph_changes,color_only_changes +0,0.000000,0.000000,542.146,52.535,0.090,3.613,598.384,0.000,19,0,0,0 +1,0.040000,0.013333,566.335,79.470,74.063,3.636,723.504,0.000,25548,1668,1380,288 +2,0.080000,0.026667,590.777,79.023,73.030,3.614,746.444,0.000,26095,1743,1398,345 +3,0.120000,0.040000,736.066,108.300,97.747,4.194,946.307,0.000,25773,1814,1510,304 +4,0.160000,0.053333,623.635,91.141,87.577,4.167,806.520,0.000,26596,1790,1516,274 +5,0.200000,0.066667,638.528,83.268,84.741,3.694,810.231,0.000,28969,1919,1614,305 +6,0.240000,0.080000,633.982,104.660,110.005,4.755,853.402,0.000,30655,1988,1663,325 +7,0.280000,0.093333,782.610,109.563,120.262,4.848,1017.283,0.000,31366,2043,1737,306 +8,0.320000,0.106667,681.328,91.244,100.826,3.881,877.279,0.000,32365,2048,1796,252 +9,0.360000,0.120000,723.072,118.333,124.611,4.997,971.013,0.000,33959,2147,1889,258 +10,0.400000,0.133333,815.163,104.061,119.366,4.474,1043.064,0.000,34825,2138,1847,291 +11,0.440000,0.146667,818.854,120.389,138.821,4.823,1082.887,0.000,35742,2212,1915,297 +12,0.480000,0.160000,915.784,114.621,146.757,4.056,1181.218,0.000,38327,2249,1972,277 +13,0.520000,0.173333,722.502,107.703,127.656,3.986,961.847,0.000,38781,2395,2101,294 +14,0.560000,0.186667,641.422,87.173,108.145,3.600,840.340,0.000,39865,2252,1988,264 +15,0.600000,0.200000,620.140,87.861,115.863,3.629,827.493,0.000,39385,2346,2083,263 +16,0.640000,0.213333,623.301,89.235,116.822,3.483,832.841,0.000,41658,2384,2136,248 +17,0.680000,0.226667,626.301,89.477,127.836,3.585,847.199,0.000,42694,2456,2191,265 +18,0.720000,0.240000,625.890,90.602,120.712,3.491,840.695,0.000,42145,2419,2150,269 +19,0.760000,0.253333,625.387,89.993,117.822,3.579,836.781,0.000,41820,2431,2197,234 +20,0.800000,0.266667,633.841,92.286,129.443,3.511,859.081,0.000,43616,2414,2184,230 +21,0.840000,0.280000,680.121,100.911,144.264,3.878,929.174,0.000,45326,2435,2176,259 +22,0.880000,0.293333,712.521,94.334,129.701,3.596,940.152,0.000,45177,2484,2242,242 +23,0.920000,0.306667,832.771,98.070,141.079,3.609,1075.529,0.000,47142,2574,2339,235 +24,0.960000,0.320000,1170.889,99.430,171.986,4.408,1446.713,0.000,50372,2622,2440,182 +25,1.000000,0.333333,1926.686,488.256,185.771,4.353,2605.066,0.000,51279,2668,2497,171 +26,1.040000,0.346667,1905.800,111.366,197.357,4.553,2219.076,0.000,52453,2702,2502,200 +27,1.080000,0.360000,2726.812,121.873,215.406,5.004,3069.095,0.000,57439,2831,2644,187 +28,1.120000,0.373333,3152.496,130.407,217.147,5.047,3505.097,0.000,57533,2967,2786,181 +29,1.160000,0.386667,3030.670,96.209,182.388,3.607,3312.874,0.000,62580,3092,2926,166 +30,1.200000,0.400000,3053.377,98.349,197.302,4.584,3353.612,0.000,64768,3332,3151,181 +31,1.240000,0.413333,3737.323,129.844,250.661,4.738,4122.566,0.000,66103,3337,3184,153 +32,1.280000,0.426667,3800.160,124.585,231.692,3.977,4160.414,0.000,69389,3483,3372,111 +33,1.320000,0.440000,4294.255,104.864,208.130,3.601,4610.850,0.000,70488,3571,3478,93 +34,1.360000,0.453333,3567.829,98.205,196.374,3.596,3866.004,0.000,71541,3611,3496,115 +35,1.400000,0.466667,3674.917,138.383,288.184,4.150,4105.634,0.000,73205,3627,3538,89 +36,1.440000,0.480000,4296.175,135.661,229.012,4.580,4665.428,0.000,74076,3687,3576,111 +37,1.480000,0.493333,4344.852,112.205,208.142,3.625,4668.824,0.000,74296,3683,3589,94 +38,1.520000,0.506667,3437.091,98.553,205.169,3.613,3744.426,0.000,75463,3708,3609,99 +39,1.560000,0.520000,3458.663,99.869,216.746,3.629,3778.907,0.000,76494,3748,3641,107 +40,1.600000,0.533333,3478.415,102.711,204.541,3.500,3789.167,0.000,75882,3766,3653,113 +41,1.640000,0.546667,4329.029,135.151,269.977,3.620,4737.777,0.000,76010,3827,3723,104 +42,1.680000,0.560000,4412.488,106.096,257.172,4.842,4780.598,0.000,76686,3829,3741,88 +43,1.720000,0.573333,4143.603,101.486,215.280,3.584,4463.953,0.000,77248,3855,3764,91 +44,1.760000,0.586667,4632.660,121.850,253.853,3.990,5012.353,0.000,82269,4026,3894,132 +45,1.800000,0.600000,4547.004,134.814,308.740,4.802,4995.360,0.000,78594,4055,3951,104 +46,1.840000,0.613333,4370.694,143.791,289.083,4.164,4807.732,0.000,80220,4056,3943,113 +47,1.880000,0.626667,3742.323,101.505,228.196,3.490,4075.514,0.000,79951,4051,3919,132 +48,1.920000,0.640000,4311.187,109.382,213.448,4.711,4638.728,0.000,77357,4111,3978,133 +49,1.960000,0.653333,4775.750,138.741,289.860,4.955,5209.306,0.000,76189,4170,4026,144 +50,2.000000,0.666667,4297.217,101.214,207.989,3.603,4610.023,0.000,76633,4160,3999,161 +51,2.040000,0.680000,3636.295,99.346,196.572,3.504,3935.717,0.000,73051,4183,4052,131 +52,2.080000,0.693333,3656.837,98.943,195.072,3.585,3954.437,0.000,73277,4197,4049,148 +53,2.120000,0.706667,3635.535,98.762,202.142,3.630,3940.069,0.000,72531,4221,4062,159 +54,2.160000,0.720000,4181.262,137.371,253.439,4.005,4576.077,0.000,71802,4248,4052,196 +55,2.200000,0.733333,4021.879,99.326,205.008,4.827,4331.040,0.000,71459,4288,4114,174 +56,2.240000,0.746667,3993.490,98.742,203.348,3.590,4299.170,0.000,72716,4251,4102,149 +57,2.280000,0.760000,7098.108,121.448,220.460,3.685,7443.701,0.000,71449,4278,4110,168 +58,2.320000,0.773333,7433.912,99.069,196.695,3.591,7733.267,0.000,73734,4319,4156,163 +59,2.360000,0.786667,6599.914,135.766,241.035,3.629,6980.344,0.000,75136,4332,4123,209 +60,2.400000,0.800000,7781.824,97.529,196.263,3.495,8079.111,0.000,71698,4370,4149,221 +61,2.440000,0.813333,6528.798,99.489,187.320,3.596,6819.203,0.000,66886,4303,4007,296 +62,2.480000,0.826667,6572.828,97.445,157.179,3.476,6830.928,0.000,59990,4180,3864,316 +63,2.520000,0.840000,7157.003,104.778,152.257,3.604,7417.642,0.000,52591,4056,3709,347 +64,2.560000,0.853333,6541.376,97.884,119.595,3.504,6762.359,0.000,42804,3790,3493,297 +65,2.600000,0.866667,7148.484,134.472,137.751,5.004,7425.711,0.000,37341,3485,3237,248 +66,2.640000,0.880000,7064.940,100.414,95.257,3.616,7264.227,0.000,33641,3418,3198,220 +67,2.680000,0.893333,7163.378,100.941,92.045,3.601,7359.965,0.000,32010,3151,2958,193 +68,2.720000,0.906667,8150.285,117.343,109.996,4.736,8382.360,0.000,30544,2910,2719,191 +69,2.760000,0.920000,7686.495,106.404,88.545,3.995,7885.439,0.000,27958,2571,2357,214 +70,2.800000,0.933333,6639.967,97.636,74.935,3.855,6816.393,0.000,25820,2374,2194,180 +71,2.840000,0.946667,7737.162,209.974,82.464,4.461,8034.061,0.000,26920,1971,1732,239 +72,2.880000,0.960000,7373.447,90.998,70.638,3.579,7538.662,0.000,24771,1910,1702,208 +73,2.920000,0.973333,8168.256,117.048,56.217,5.339,8346.860,0.000,15453,1310,1164,146 +74,2.960000,0.986667,7449.991,84.236,65.628,3.607,7603.462,0.000,24425,1949,1842,107 +75,3.000000,1.000000,2545.601,76.833,24.797,3.523,2650.754,0.000,8726,1097,1034,63 +76,3.040000,0.986667,6481.023,74.808,12.429,4.013,6572.273,0.000,4090,617,590,27 +77,3.080000,0.973333,7946.786,115.240,90.311,5.108,8157.445,0.000,23663,2095,1896,199 +78,3.120000,0.960000,8819.836,291.509,93.862,6.192,9211.399,0.000,21375,1734,1538,196 +79,3.160000,0.946667,8570.503,124.783,80.010,4.814,8780.110,0.000,21055,1728,1424,304 +80,3.200000,0.933333,6893.782,94.807,83.548,3.761,7075.898,0.000,29737,2405,2149,256 +81,3.240000,0.920000,8261.504,121.005,89.082,4.551,8476.142,0.000,23907,2352,2112,240 +82,3.280000,0.906667,8062.808,134.004,104.319,5.076,8306.207,0.000,26477,2304,2155,149 +83,3.320000,0.893333,8292.656,99.704,93.232,3.624,8489.216,0.000,30557,2983,2819,164 +84,3.360000,0.880000,7757.603,136.256,130.735,5.046,8029.640,0.000,33762,3078,2918,160 +85,3.400000,0.866667,8438.720,98.793,109.722,3.609,8650.844,0.000,35772,3376,3197,179 +86,3.440000,0.853333,8152.760,134.594,179.282,5.012,8471.648,0.000,43915,3597,3371,226 +87,3.480000,0.840000,8721.268,137.391,198.371,4.992,9062.022,0.000,50693,3745,3494,251 +88,3.520000,0.826667,7381.626,132.698,238.777,5.049,7758.150,0.000,61144,4028,3660,368 +89,3.560000,0.813333,8630.936,148.141,250.215,4.570,9033.862,0.000,68634,4128,3795,333 +90,3.600000,0.800000,6993.885,110.700,265.734,5.472,7375.791,0.000,71261,4256,3964,292 +91,3.640000,0.786667,8610.057,133.828,282.340,4.816,9031.041,0.000,73162,4355,4099,256 +92,3.680000,0.773333,8275.294,134.804,284.572,4.998,8699.668,0.000,73140,4308,4091,217 +93,3.720000,0.760000,7817.797,125.941,268.244,4.852,8216.834,0.000,72485,4315,4132,183 +94,3.760000,0.746667,4578.555,125.424,244.665,4.070,4952.714,0.000,73404,4281,4095,186 +95,3.800000,0.733333,4843.015,140.296,260.244,4.424,5247.979,0.000,72620,4270,4099,171 +96,3.840000,0.720000,4182.076,117.112,188.670,3.617,4491.475,0.000,71065,4262,4082,180 +97,3.880000,0.706667,4234.730,113.323,230.717,3.990,4582.760,0.000,72937,4214,4033,181 +98,3.920000,0.693333,4617.627,124.142,253.676,4.500,4999.945,0.000,73276,4230,4039,191 +99,3.960000,0.680000,4536.081,101.298,327.170,3.708,4968.257,0.000,73443,4175,4027,148 +100,4.000000,0.666667,4397.619,104.050,240.614,4.381,4746.664,0.000,75396,4167,4021,146 +101,4.040000,0.653333,3870.794,101.784,205.104,3.488,4181.170,0.000,76340,4176,4021,155 +102,4.080000,0.640000,4154.709,140.956,288.371,4.809,4588.845,0.000,78073,4096,3944,152 +103,4.120000,0.626667,4466.938,131.335,289.571,4.848,4892.692,0.000,79272,4089,3976,113 +104,4.160000,0.613333,4914.642,142.103,290.087,4.813,5351.645,0.000,78654,4050,3920,130 +105,4.200000,0.600000,4675.790,139.726,304.083,5.195,5124.794,0.000,80847,4040,3929,111 +106,4.240000,0.586667,4797.091,108.710,247.012,4.215,5157.028,0.000,81472,4051,3929,122 +107,4.280000,0.573333,4384.359,139.161,285.400,5.240,4814.160,0.000,76286,4044,3918,126 +108,4.320000,0.560000,4257.881,101.499,212.792,3.729,4575.901,0.000,77527,3906,3801,105 +109,4.360000,0.546667,4534.314,103.792,237.526,4.008,4879.640,0.000,76410,3879,3785,94 +110,4.400000,0.533333,3815.048,113.339,223.875,4.565,4156.827,0.000,75027,3808,3715,93 +111,4.440000,0.520000,4562.078,133.066,275.650,4.522,4975.316,0.000,76292,3754,3657,97 +112,4.480000,0.506667,4726.317,140.260,281.755,4.521,5152.853,0.000,74443,3761,3662,99 +113,4.520000,0.493333,4150.340,129.718,270.835,5.016,4555.909,0.000,74633,3768,3666,102 +114,4.560000,0.480000,4256.767,135.807,283.494,4.804,4680.872,0.000,73051,3715,3648,67 +115,4.600000,0.466667,3932.043,128.752,267.323,4.493,4332.611,0.000,69521,3649,3557,92 +116,4.640000,0.453333,4363.518,118.850,260.977,4.569,4747.914,0.000,69049,3539,3437,102 +117,4.680000,0.440000,4540.580,103.664,228.643,4.957,4877.844,0.000,67920,3551,3457,94 +118,4.720000,0.426667,4004.789,132.608,248.937,4.854,4391.188,0.000,66663,3553,3462,91 +119,4.760000,0.413333,3851.656,143.911,258.912,5.066,4259.545,0.000,63974,3398,3296,102 +120,4.800000,0.400000,3811.771,126.199,228.554,4.567,4171.091,0.000,62413,3249,3099,150 +121,4.840000,0.386667,3680.642,132.737,238.536,3.697,4055.612,0.000,59429,3159,2992,167 +122,4.880000,0.373333,3065.629,133.924,215.102,4.664,3419.319,0.000,55154,3026,2827,199 +123,4.920000,0.360000,2509.609,121.753,210.296,5.021,2846.679,0.000,53279,2824,2655,169 +124,4.960000,0.346667,2298.883,124.901,202.352,4.745,2630.881,0.000,50663,2636,2463,173 +125,5.000000,0.333333,2065.937,129.388,194.310,4.864,2394.499,0.000,48693,2563,2383,180 +126,5.040000,0.320000,1423.082,126.302,188.994,5.344,1743.722,0.000,45505,2480,2288,192 +127,5.080000,0.306667,1016.251,124.020,176.948,4.955,1322.174,0.000,44450,2467,2276,191 +128,5.120000,0.293333,828.005,91.371,129.317,3.593,1052.286,0.000,42582,2404,2176,228 +129,5.160000,0.280000,640.356,92.252,121.334,3.749,857.691,0.000,40500,2298,2025,273 +130,5.200000,0.266667,820.414,123.333,168.447,5.044,1117.238,0.000,39563,2259,2007,252 +131,5.240000,0.253333,849.203,118.558,161.172,5.023,1133.956,0.000,36871,2163,1952,211 +132,5.280000,0.240000,855.526,116.488,153.351,4.289,1129.654,0.000,36711,2176,1974,202 +133,5.320000,0.226667,789.860,111.718,127.309,4.965,1033.852,0.000,34633,2156,1895,261 +134,5.360000,0.213333,835.875,121.610,132.436,4.799,1094.720,0.000,34770,2038,1789,249 +135,5.400000,0.200000,797.390,107.729,116.891,5.033,1027.043,0.000,33734,2060,1818,242 +136,5.440000,0.186667,957.351,114.774,116.378,5.118,1193.621,0.000,31979,2002,1742,260 +137,5.480000,0.173333,858.319,106.841,104.977,4.370,1074.507,0.000,31923,1967,1692,275 +138,5.520000,0.160000,707.109,108.701,104.453,4.411,924.674,0.000,30351,1999,1719,280 +139,5.560000,0.146667,696.450,104.384,115.394,5.254,921.482,0.000,30054,1887,1610,277 +140,5.600000,0.133333,811.614,105.767,105.107,3.999,1026.487,0.000,28694,1791,1528,263 +141,5.640000,0.120000,733.199,108.831,108.694,5.245,955.969,0.000,27019,1751,1465,286 +142,5.680000,0.106667,691.934,75.692,71.703,3.490,842.819,0.000,25075,1686,1404,282 +143,5.720000,0.093333,575.403,73.556,73.420,3.603,725.982,0.000,25822,1722,1441,281 +144,5.760000,0.080000,579.507,97.789,91.476,4.684,773.456,0.000,25813,1712,1418,294 +145,5.800000,0.066667,781.884,99.717,89.860,4.380,975.841,0.000,25006,1684,1388,296 +146,5.840000,0.053333,785.223,102.547,94.840,5.034,987.644,0.000,23881,1657,1370,287 +147,5.880000,0.040000,804.057,103.236,72.607,4.010,983.910,0.000,23050,1606,1327,279 +148,5.920000,0.026667,695.183,98.775,81.951,4.557,880.466,0.000,22625,1621,1339,282 +149,5.960000,0.013333,747.965,80.020,73.767,3.897,905.649,0.000,23049,1564,1279,285 diff --git a/docs/performance/motion-comparison/worktree-240x80-default-0.csv b/docs/performance/motion-comparison/worktree-240x80-default-0.csv new file mode 100644 index 000000000..bb2d83cc5 --- /dev/null +++ b/docs/performance/motion-comparison/worktree-240x80-default-0.csv @@ -0,0 +1,151 @@ +frame,elapsed_s,zoom,render_us,diff_us,encode_us,reset_us,total_us,interval_us,bytes,changed_cells,glyph_changes,color_only_changes +0,0.000000,0.000000,2201.337,278.944,0.221,18.620,2499.122,0.000,19,0,0,0 +1,0.040000,0.013333,2130.685,334.241,392.860,16.423,2874.209,0.000,104138,8976,7927,1049 +2,0.080000,0.026667,2392.244,312.442,272.056,14.232,2990.974,0.000,105745,9090,8068,1022 +3,0.120000,0.040000,2122.394,312.084,281.688,13.949,2730.115,0.000,109970,9323,8265,1058 +4,0.160000,0.053333,2131.340,314.937,290.027,13.903,2750.207,0.000,114899,9514,8550,964 +5,0.200000,0.066667,2216.875,333.189,297.401,13.873,2861.338,0.000,114695,9500,8558,942 +6,0.240000,0.080000,2297.145,349.712,329.722,21.599,2998.178,0.000,120427,9671,8685,986 +7,0.280000,0.093333,2645.158,326.202,326.318,18.252,3315.930,0.000,125831,9924,8944,980 +8,0.320000,0.106667,2399.332,333.203,391.101,14.254,3137.890,0.000,127107,10068,9141,927 +9,0.360000,0.120000,2304.323,328.795,320.935,13.918,2967.971,0.000,131432,10139,9125,1014 +10,0.400000,0.133333,2577.713,333.335,331.817,13.886,3256.751,0.000,138282,10306,9327,979 +11,0.440000,0.146667,2192.219,328.786,324.220,13.900,2859.125,0.000,137619,10390,9412,978 +12,0.480000,0.160000,2229.015,413.437,336.881,13.883,2993.216,0.000,141130,10418,9459,959 +13,0.520000,0.173333,2239.645,344.060,410.343,17.496,3011.544,0.000,141872,10609,9672,937 +14,0.560000,0.186667,2440.248,609.146,463.380,14.343,3527.117,0.000,143879,10423,9511,912 +15,0.600000,0.200000,2368.565,338.794,361.058,13.903,3082.320,0.000,148950,10604,9666,938 +16,0.640000,0.213333,2256.880,353.166,341.901,13.879,2965.826,0.000,155774,10645,9730,915 +17,0.680000,0.226667,2220.501,348.953,384.040,14.234,2967.728,0.000,159520,10685,9802,883 +18,0.720000,0.240000,2233.112,341.760,391.052,13.891,2979.815,0.000,159716,10726,9820,906 +19,0.760000,0.253333,2174.978,354.660,386.322,13.924,2929.884,0.000,174696,10851,9843,1008 +20,0.800000,0.266667,2261.491,360.918,410.862,14.034,3047.305,0.000,170863,11101,10048,1053 +21,0.840000,0.280000,2250.179,351.746,417.742,14.203,3033.870,0.000,175372,10949,9986,963 +22,0.880000,0.293333,2508.542,361.502,430.168,14.641,3314.853,0.000,174085,10904,9919,985 +23,0.920000,0.306667,3111.928,443.749,437.005,13.955,4006.637,0.000,184413,11172,10315,857 +24,0.960000,0.320000,4137.403,372.452,513.159,17.575,5040.589,0.000,190848,11341,10555,786 +25,1.000000,0.333333,5827.699,412.977,482.416,13.946,6737.038,0.000,198893,11421,10673,748 +26,1.040000,0.346667,6315.165,374.980,477.399,14.222,7181.766,0.000,201680,11386,10696,690 +27,1.080000,0.360000,7081.991,369.696,475.798,13.908,7941.393,0.000,220677,11721,11050,671 +28,1.120000,0.373333,8316.919,398.817,584.582,13.877,9314.195,0.000,228982,12402,11737,665 +29,1.160000,0.386667,10100.093,374.295,662.840,18.558,11155.786,0.000,245578,12820,12119,701 +30,1.200000,0.400000,10884.750,389.066,581.377,13.892,11869.085,0.000,254420,13534,12880,654 +31,1.240000,0.413333,11667.737,420.973,580.335,14.262,12683.307,0.000,259178,13917,13330,587 +32,1.280000,0.426667,11517.413,403.218,588.872,14.225,12523.728,0.000,270251,14333,13793,540 +33,1.320000,0.440000,12879.719,442.667,715.731,14.740,14052.857,0.000,275520,14739,14270,469 +34,1.360000,0.453333,12451.821,462.694,607.154,13.897,13535.566,0.000,282613,15009,14548,461 +35,1.400000,0.466667,12803.588,390.605,626.424,13.935,13834.552,0.000,277498,14510,13890,620 +36,1.440000,0.480000,12495.621,399.707,629.865,13.915,13539.108,0.000,289438,15160,14745,415 +37,1.480000,0.493333,11992.386,401.256,663.780,13.976,13071.398,0.000,299090,15231,14791,440 +38,1.520000,0.506667,12778.941,403.601,647.441,13.872,13843.855,0.000,297622,15372,14943,429 +39,1.560000,0.520000,12762.842,407.568,663.345,13.890,13847.645,0.000,300215,15515,15088,427 +40,1.600000,0.533333,12630.548,482.877,752.037,19.103,13884.565,0.000,307339,15666,15243,423 +41,1.640000,0.546667,12206.919,403.153,677.519,13.950,13301.541,0.000,308212,15767,15342,425 +42,1.680000,0.560000,12867.010,406.104,620.407,13.900,13907.421,0.000,315126,15873,15458,415 +43,1.720000,0.573333,12183.354,465.571,741.254,16.897,13407.076,0.000,323653,16146,15772,374 +44,1.760000,0.586667,12172.151,398.933,729.980,14.637,13315.701,0.000,322278,16192,15830,362 +45,1.800000,0.600000,13336.076,410.728,672.673,14.672,14434.149,0.000,327482,16445,16063,382 +46,1.840000,0.613333,12738.045,503.345,770.091,15.878,14027.359,0.000,326067,16436,15908,528 +47,1.880000,0.626667,12977.048,457.796,723.020,14.113,14171.977,0.000,325560,16467,15948,519 +48,1.920000,0.640000,12959.516,425.855,666.243,13.923,14065.537,0.000,315640,16551,15983,568 +49,1.960000,0.653333,13327.111,404.482,606.169,14.008,14351.770,0.000,310977,16628,16044,584 +50,2.000000,0.666667,13200.993,446.259,691.667,15.046,14353.965,0.000,303405,16816,16227,589 +51,2.040000,0.680000,13028.441,416.462,725.964,15.985,14186.852,0.000,298443,16868,16260,608 +52,2.080000,0.693333,13204.636,404.815,629.946,13.882,14253.279,0.000,289844,17069,16432,637 +53,2.120000,0.706667,13052.001,469.981,634.476,14.022,14170.480,0.000,283265,17118,16511,607 +54,2.160000,0.720000,13115.385,440.514,690.507,15.466,14261.872,0.000,283609,17226,16557,669 +55,2.200000,0.733333,13193.903,414.202,643.096,14.724,14265.925,0.000,283133,17210,16474,736 +56,2.240000,0.746667,14112.063,401.816,580.616,13.876,15108.371,0.000,283798,17349,16648,701 +57,2.280000,0.760000,24125.672,398.952,740.329,14.385,25279.338,0.000,288455,17309,16542,767 +58,2.320000,0.773333,24449.012,440.057,713.046,16.303,25618.418,0.000,292043,17422,16597,825 +59,2.360000,0.786667,23911.117,443.978,759.481,17.518,25132.094,0.000,291504,17339,16425,914 +60,2.400000,0.800000,24894.789,391.913,615.733,13.886,25916.321,0.000,284576,17386,16403,983 +61,2.440000,0.813333,23967.185,393.937,574.374,14.007,24949.503,0.000,267397,17126,15856,1270 +62,2.480000,0.826667,24839.089,411.571,618.016,13.917,25882.593,0.000,237918,16703,15279,1424 +63,2.520000,0.840000,24853.604,418.397,469.732,16.525,25758.258,0.000,201971,16190,14731,1459 +64,2.560000,0.853333,23978.743,430.911,449.006,14.132,24872.792,0.000,170835,15398,14192,1206 +65,2.600000,0.866667,23821.574,386.813,329.020,13.955,24551.362,0.000,148042,14509,13422,1087 +66,2.640000,0.880000,24005.257,422.710,341.289,15.809,24785.065,0.000,127408,13411,12438,973 +67,2.680000,0.893333,24186.870,397.883,273.453,14.508,24872.714,0.000,111478,12248,11503,745 +68,2.720000,0.906667,23874.525,390.559,238.794,14.184,24518.062,0.000,94975,10744,10186,558 +69,2.760000,0.920000,23428.420,381.690,189.188,13.888,24013.186,0.000,80990,9088,8767,321 +70,2.800000,0.933333,23644.288,360.671,164.766,14.108,24183.833,0.000,71842,6998,6764,234 +71,2.840000,0.946667,24445.774,347.368,125.609,14.271,24933.022,0.000,59867,5392,5192,200 +72,2.880000,0.960000,23568.646,331.037,101.807,14.389,24015.879,0.000,45730,3913,3756,157 +73,2.920000,0.973333,24193.071,378.331,61.183,15.729,24648.314,0.000,28737,2400,2311,89 +74,2.960000,0.986667,23912.736,319.845,32.165,14.336,24279.082,0.000,14768,1229,1168,61 +75,3.000000,1.000000,10745.106,290.558,15.390,14.322,11065.376,0.000,4923,376,349,27 +76,3.040000,0.986667,24619.844,291.003,13.346,16.991,24941.184,0.000,4254,349,322,27 +77,3.080000,0.973333,25273.043,323.339,41.398,15.300,25653.080,0.000,14481,1175,1108,67 +78,3.120000,0.960000,24679.390,315.857,68.391,17.706,25081.344,0.000,29365,2344,2243,101 +79,3.160000,0.946667,25216.688,350.112,93.600,14.257,25674.657,0.000,46885,3895,3750,145 +80,3.200000,0.933333,23739.612,360.928,128.484,14.995,24244.019,0.000,62459,5476,5288,188 +81,3.240000,0.920000,23705.993,360.744,161.808,15.063,24243.608,0.000,73662,6972,6756,216 +82,3.280000,0.906667,23464.966,377.706,210.440,14.682,24067.794,0.000,87959,9083,8804,279 +83,3.320000,0.893333,23636.382,401.241,258.175,13.965,24309.763,0.000,109528,10715,10226,489 +84,3.360000,0.880000,23683.551,395.829,309.501,14.124,24403.005,0.000,129211,12392,11650,742 +85,3.400000,0.866667,23965.892,387.383,352.716,13.936,24719.927,0.000,152134,13503,12515,988 +86,3.440000,0.853333,23982.326,405.473,392.157,13.905,24793.861,0.000,173787,14571,13503,1068 +87,3.480000,0.840000,23565.281,388.350,470.404,13.939,24437.974,0.000,205303,15475,14296,1179 +88,3.520000,0.826667,23692.547,436.990,599.412,15.874,24744.823,0.000,242964,16173,14802,1371 +89,3.560000,0.813333,23897.093,436.003,596.504,13.990,24943.590,0.000,268708,16775,15343,1432 +90,3.600000,0.800000,23838.843,395.637,636.161,14.009,24884.650,0.000,286286,17064,15838,1226 +91,3.640000,0.786667,23596.318,408.605,626.273,14.291,24645.487,0.000,295168,17351,16376,975 +92,3.680000,0.773333,23504.359,399.760,614.334,13.863,24532.316,0.000,292738,17379,16532,847 +93,3.720000,0.760000,24162.144,413.909,637.586,14.016,25227.655,0.000,293236,17415,16588,827 +94,3.760000,0.746667,13508.283,398.397,624.961,14.553,14546.194,0.000,284436,17357,16614,743 +95,3.800000,0.733333,13574.861,394.178,621.816,14.390,14605.245,0.000,286006,17311,16601,710 +96,3.840000,0.720000,13482.231,435.538,636.168,15.143,14569.080,0.000,285003,17194,16532,662 +97,3.880000,0.706667,13566.393,402.423,623.622,15.638,14608.076,0.000,285397,17192,16532,660 +98,3.920000,0.693333,13495.789,406.635,595.375,14.057,14511.856,0.000,291460,17170,16584,586 +99,3.960000,0.680000,13580.323,403.519,634.440,14.424,14632.706,0.000,295431,17060,16468,592 +100,4.000000,0.666667,13481.918,444.474,687.278,16.473,14630.143,0.000,300410,16881,16300,581 +101,4.040000,0.653333,13446.181,415.552,678.666,14.384,14554.783,0.000,301366,16743,16131,612 +102,4.080000,0.640000,13571.533,409.909,706.157,15.712,14703.311,0.000,309711,16639,16045,594 +103,4.120000,0.626667,13664.967,443.285,671.039,16.104,14795.395,0.000,315256,16569,15947,622 +104,4.160000,0.613333,13185.049,421.541,704.060,15.704,14326.354,0.000,314068,16447,15912,535 +105,4.200000,0.600000,13051.511,409.772,661.394,14.109,14136.786,0.000,314180,16428,15935,493 +106,4.240000,0.586667,12389.815,433.187,634.825,14.221,13472.048,0.000,299327,16359,16016,343 +107,4.280000,0.573333,12809.656,414.369,705.019,14.082,13943.126,0.000,311125,16153,15822,331 +108,4.320000,0.560000,12825.960,432.081,647.991,14.918,13920.950,0.000,307101,15988,15616,372 +109,4.360000,0.546667,12941.781,405.038,638.283,14.231,13999.333,0.000,305225,15869,15483,386 +110,4.400000,0.533333,12855.695,410.496,696.572,14.247,13977.010,0.000,302508,15800,15369,431 +111,4.440000,0.520000,12991.181,405.309,598.719,14.000,14009.209,0.000,300671,15550,15167,383 +112,4.480000,0.506667,12984.891,405.130,609.207,13.973,14013.201,0.000,297027,15431,15042,389 +113,4.520000,0.493333,12950.969,407.791,643.232,13.950,14015.942,0.000,293653,15373,15011,362 +114,4.560000,0.480000,12629.210,406.503,689.578,13.872,13739.163,0.000,291527,15326,14928,398 +115,4.600000,0.466667,12697.570,396.500,619.422,14.295,13727.787,0.000,288857,15185,14821,364 +116,4.640000,0.453333,12906.090,397.905,640.857,13.882,13958.734,0.000,279334,14956,14412,544 +117,4.680000,0.440000,12426.642,402.059,608.031,14.390,13451.122,0.000,275332,14898,14522,376 +118,4.720000,0.426667,11867.390,403.734,602.866,16.530,12890.520,0.000,267417,14629,14230,399 +119,4.760000,0.413333,11571.788,402.909,577.770,17.042,12569.509,0.000,256594,14188,13697,491 +120,4.800000,0.400000,10542.987,398.138,535.697,13.854,11490.676,0.000,251493,13810,13237,573 +121,4.840000,0.386667,9803.515,385.668,529.868,13.919,10732.970,0.000,242608,13414,12782,632 +122,4.880000,0.373333,8508.788,370.219,501.184,13.883,9394.074,0.000,231645,12805,12152,653 +123,4.920000,0.360000,7576.054,368.381,481.610,13.943,8439.988,0.000,222241,12129,11467,662 +124,4.960000,0.346667,6283.638,371.328,488.368,13.856,7157.190,0.000,205902,11540,10874,666 +125,5.000000,0.333333,5638.905,369.180,455.874,14.318,6478.277,0.000,195276,11086,10446,640 +126,5.040000,0.320000,4359.494,374.247,448.798,13.863,5196.402,0.000,188455,11143,10401,742 +127,5.080000,0.306667,3063.211,366.885,418.258,13.888,3862.242,0.000,179356,11005,10307,698 +128,5.120000,0.293333,2394.279,364.660,407.493,14.175,3180.607,0.000,169328,10751,9897,854 +129,5.160000,0.280000,2348.290,358.144,404.139,14.106,3124.679,0.000,166048,10606,9624,982 +130,5.200000,0.266667,2363.518,347.766,362.157,15.325,3088.766,0.000,163846,10608,9724,884 +131,5.240000,0.253333,2305.947,351.799,378.027,15.797,3051.570,0.000,161286,10727,9680,1047 +132,5.280000,0.240000,2377.653,351.067,394.192,16.850,3139.762,0.000,157901,10582,9524,1058 +133,5.320000,0.226667,2451.840,346.914,367.670,15.437,3181.861,0.000,151976,10457,9537,920 +134,5.360000,0.213333,2370.719,344.184,377.581,14.404,3106.888,0.000,151647,10363,9393,970 +135,5.400000,0.200000,2361.683,348.261,363.953,14.194,3088.091,0.000,145006,10270,9298,972 +136,5.440000,0.186667,2397.902,367.293,357.664,17.111,3139.970,0.000,140994,10292,9394,898 +137,5.480000,0.173333,2531.816,327.627,342.913,15.993,3218.349,0.000,134180,10158,9250,908 +138,5.520000,0.160000,2310.709,327.918,338.548,14.417,2991.592,0.000,134787,10009,9116,893 +139,5.560000,0.146667,2295.087,326.307,326.921,14.228,2962.543,0.000,125205,9877,8911,966 +140,5.600000,0.133333,2288.369,325.764,294.889,14.106,2923.128,0.000,126414,9607,8654,953 +141,5.640000,0.120000,2297.306,326.338,315.524,15.972,2955.140,0.000,119311,9428,8460,968 +142,5.680000,0.106667,2341.663,473.361,324.369,14.578,3153.971,0.000,112341,9174,8240,934 +143,5.720000,0.093333,2299.870,317.777,298.158,14.760,2930.565,0.000,113920,9115,8161,954 +144,5.760000,0.080000,2246.047,309.156,278.251,14.367,2847.821,0.000,108535,8987,8007,980 +145,5.800000,0.066667,2232.095,305.878,271.014,14.265,2823.252,0.000,103129,8785,7885,900 +146,5.840000,0.053333,2219.140,298.064,264.748,14.298,2796.250,0.000,102253,8700,7701,999 +147,5.880000,0.040000,2218.137,304.677,237.624,14.445,2774.883,0.000,99134,8553,7564,989 +148,5.920000,0.026667,2219.607,296.565,249.359,14.243,2779.774,0.000,98116,8623,7647,976 +149,5.960000,0.013333,2247.298,322.206,260.974,13.902,2844.380,0.000,97954,8676,7628,1048 diff --git a/docs/performance/motion-comparison/worktree-240x80-default-1.csv b/docs/performance/motion-comparison/worktree-240x80-default-1.csv new file mode 100644 index 000000000..55838635c --- /dev/null +++ b/docs/performance/motion-comparison/worktree-240x80-default-1.csv @@ -0,0 +1,151 @@ +frame,elapsed_s,zoom,render_us,diff_us,encode_us,reset_us,total_us,interval_us,bytes,changed_cells,glyph_changes,color_only_changes +0,0.000000,0.000000,2692.896,285.949,0.227,19.433,2998.505,0.000,19,0,0,0 +1,0.040000,0.013333,2908.132,441.821,287.193,14.714,3651.860,0.000,104138,8976,7927,1049 +2,0.080000,0.026667,2387.033,350.916,383.609,18.587,3140.145,0.000,105745,9090,8068,1022 +3,0.120000,0.040000,2333.014,319.241,277.449,13.958,2943.662,0.000,109970,9323,8265,1058 +4,0.160000,0.053333,2337.323,376.248,346.598,15.965,3076.134,0.000,114899,9514,8550,964 +5,0.200000,0.066667,2664.406,521.859,365.347,18.959,3570.571,0.000,114695,9500,8558,942 +6,0.240000,0.080000,2699.404,429.547,367.058,15.746,3511.755,0.000,120427,9671,8685,986 +7,0.280000,0.093333,2494.828,327.882,320.446,14.700,3157.856,0.000,125831,9924,8944,980 +8,0.320000,0.106667,2304.590,343.706,344.293,15.994,3008.583,0.000,127107,10068,9141,927 +9,0.360000,0.120000,2569.864,426.583,373.336,14.382,3384.165,0.000,131432,10139,9125,1014 +10,0.400000,0.133333,2597.098,402.434,382.788,17.917,3400.237,0.000,138282,10306,9327,979 +11,0.440000,0.146667,2706.148,368.545,379.485,14.147,3468.325,0.000,137619,10390,9412,978 +12,0.480000,0.160000,2450.004,369.726,355.789,15.502,3191.021,0.000,141130,10418,9459,959 +13,0.520000,0.173333,2405.927,333.964,358.181,14.721,3112.793,0.000,141872,10609,9672,937 +14,0.560000,0.186667,2424.466,358.448,377.603,13.984,3174.501,0.000,143879,10423,9511,912 +15,0.600000,0.200000,2256.712,410.750,405.722,17.077,3090.261,0.000,148950,10604,9666,938 +16,0.640000,0.213333,2883.403,441.972,458.616,15.480,3799.471,0.000,155774,10645,9730,915 +17,0.680000,0.226667,2620.062,392.651,423.761,15.468,3451.942,0.000,159520,10685,9802,883 +18,0.720000,0.240000,2441.294,372.428,398.271,14.691,3226.684,0.000,159716,10726,9820,906 +19,0.760000,0.253333,2291.593,356.258,408.730,13.989,3070.570,0.000,174696,10851,9843,1008 +20,0.800000,0.266667,2269.138,364.564,509.379,17.462,3160.543,0.000,170863,11101,10048,1053 +21,0.840000,0.280000,3030.019,409.293,447.536,16.133,3902.981,0.000,175372,10949,9986,963 +22,0.880000,0.293333,2661.574,431.071,453.557,17.440,3563.642,0.000,174085,10904,9919,985 +23,0.920000,0.306667,3448.140,445.583,526.405,18.724,4438.852,0.000,184413,11172,10315,857 +24,0.960000,0.320000,5203.586,520.262,651.755,21.169,6396.772,0.000,190848,11341,10555,786 +25,1.000000,0.333333,6531.923,549.428,615.843,18.377,7715.571,0.000,198893,11421,10673,748 +26,1.040000,0.346667,8030.507,549.249,676.591,21.222,9277.569,0.000,201680,11386,10696,690 +27,1.080000,0.360000,9497.052,519.560,704.450,23.577,10744.639,0.000,220677,11721,11050,671 +28,1.120000,0.373333,10823.365,530.513,723.541,22.623,12100.042,0.000,228982,12402,11737,665 +29,1.160000,0.386667,12648.502,520.940,672.984,19.567,13861.993,0.000,245578,12820,12119,701 +30,1.200000,0.400000,12812.161,496.300,754.914,20.935,14084.310,0.000,254420,13534,12880,654 +31,1.240000,0.413333,13046.200,565.455,837.791,21.311,14470.757,0.000,259178,13917,13330,587 +32,1.280000,0.426667,14027.517,533.221,841.111,20.229,15422.078,0.000,270251,14333,13793,540 +33,1.320000,0.440000,14977.979,426.602,691.228,19.925,16115.734,0.000,275520,14739,14270,469 +34,1.360000,0.453333,14458.175,446.202,661.550,14.329,15580.256,0.000,282613,15009,14548,461 +35,1.400000,0.466667,14895.781,507.729,770.788,19.308,16193.606,0.000,277498,14510,13890,620 +36,1.440000,0.480000,14661.424,512.364,793.212,18.607,15985.607,0.000,289438,15160,14745,415 +37,1.480000,0.493333,14517.986,542.428,921.362,20.327,16002.103,0.000,299090,15231,14791,440 +38,1.520000,0.506667,15820.405,515.414,763.598,14.334,17113.751,0.000,297622,15372,14943,429 +39,1.560000,0.520000,15178.241,499.453,797.806,18.373,16493.873,0.000,300215,15515,15088,427 +40,1.600000,0.533333,14601.214,508.649,680.432,17.472,15807.767,0.000,307339,15666,15243,423 +41,1.640000,0.546667,15600.187,551.447,879.566,18.931,17050.131,0.000,308212,15767,15342,425 +42,1.680000,0.560000,14937.415,494.008,892.626,18.602,16342.651,0.000,315126,15873,15458,415 +43,1.720000,0.573333,14443.017,439.391,852.365,19.390,15754.163,0.000,323653,16146,15772,374 +44,1.760000,0.586667,14860.093,418.823,703.870,18.510,16001.296,0.000,322278,16192,15830,362 +45,1.800000,0.600000,15255.764,512.331,926.772,16.546,16711.413,0.000,327482,16445,16063,382 +46,1.840000,0.613333,15360.872,512.015,812.235,14.003,16699.125,0.000,326067,16436,15908,528 +47,1.880000,0.626667,15392.460,502.623,833.425,13.929,16742.437,0.000,325560,16467,15948,519 +48,1.920000,0.640000,15315.268,488.375,726.060,16.459,16546.162,0.000,315640,16551,15983,568 +49,1.960000,0.653333,15071.219,511.745,725.194,19.278,16327.436,0.000,310977,16628,16044,584 +50,2.000000,0.666667,14538.804,415.492,654.867,15.252,15624.415,0.000,303405,16816,16227,589 +51,2.040000,0.680000,14800.245,411.766,669.859,13.938,15895.808,0.000,298443,16868,16260,608 +52,2.080000,0.693333,14187.451,474.533,621.911,13.967,15297.862,0.000,289844,17069,16432,637 +53,2.120000,0.706667,14210.614,440.757,630.427,13.908,15295.706,0.000,283265,17118,16511,607 +54,2.160000,0.720000,14493.408,406.851,724.604,13.985,15638.848,0.000,283609,17226,16557,669 +55,2.200000,0.733333,14849.822,409.018,628.520,14.545,15901.905,0.000,283133,17210,16474,736 +56,2.240000,0.746667,13924.080,407.366,633.501,15.101,14980.048,0.000,283798,17349,16648,701 +57,2.280000,0.760000,27497.951,418.496,667.004,23.465,28606.916,0.000,288455,17309,16542,767 +58,2.320000,0.773333,29019.984,411.118,637.850,14.222,30083.174,0.000,292043,17422,16597,825 +59,2.360000,0.786667,28648.132,416.376,650.513,15.585,29730.606,0.000,291504,17339,16425,914 +60,2.400000,0.800000,28280.486,559.213,734.477,15.058,29589.234,0.000,284576,17386,16403,983 +61,2.440000,0.813333,31374.066,531.774,697.819,19.125,32622.784,0.000,267397,17126,15856,1270 +62,2.480000,0.826667,32395.591,554.606,750.545,20.231,33720.973,0.000,237918,16703,15279,1424 +63,2.520000,0.840000,31059.708,545.093,621.189,20.748,32246.738,0.000,201971,16190,14731,1459 +64,2.560000,0.853333,30052.836,397.181,443.239,14.003,30907.259,0.000,170835,15398,14192,1206 +65,2.600000,0.866667,28738.272,510.092,450.300,19.792,29718.456,0.000,148042,14509,13422,1087 +66,2.640000,0.880000,27925.176,420.435,443.828,20.105,28809.544,0.000,127408,13411,12438,973 +67,2.680000,0.893333,27733.765,489.096,318.415,17.716,28558.992,0.000,111478,12248,11503,745 +68,2.720000,0.906667,26011.852,398.229,229.592,13.964,26653.637,0.000,94975,10744,10186,558 +69,2.760000,0.920000,24802.256,377.577,195.230,14.355,25389.418,0.000,80990,9088,8767,321 +70,2.800000,0.933333,26014.684,361.426,163.789,14.309,26554.208,0.000,71842,6998,6764,234 +71,2.840000,0.946667,26310.819,360.540,123.592,15.006,26809.957,0.000,59867,5392,5192,200 +72,2.880000,0.960000,27244.338,398.572,136.625,20.122,27799.657,0.000,45730,3913,3756,157 +73,2.920000,0.973333,26493.369,386.697,78.443,19.440,26977.949,0.000,28737,2400,2311,89 +74,2.960000,0.986667,27407.715,341.580,33.531,14.681,27797.507,0.000,14768,1229,1168,61 +75,3.000000,1.000000,11718.915,308.308,16.357,17.721,12061.301,0.000,4923,376,349,27 +76,3.040000,0.986667,29643.344,402.682,15.124,20.347,30081.497,0.000,4254,349,322,27 +77,3.080000,0.973333,31623.455,408.631,43.749,20.293,32096.128,0.000,14481,1175,1108,67 +78,3.120000,0.960000,31626.625,361.170,66.073,18.164,32072.032,0.000,29365,2344,2243,101 +79,3.160000,0.946667,27226.733,396.948,135.391,19.974,27779.046,0.000,46885,3895,3750,145 +80,3.200000,0.933333,27570.929,377.621,131.735,14.379,28094.664,0.000,62459,5476,5288,188 +81,3.240000,0.920000,25950.754,376.747,157.975,18.067,26503.543,0.000,73662,6972,6756,216 +82,3.280000,0.906667,26276.028,669.263,263.041,18.145,27226.477,0.000,87959,9083,8804,279 +83,3.320000,0.893333,28914.606,547.022,312.803,19.385,29793.816,0.000,109528,10715,10226,489 +84,3.360000,0.880000,28627.478,475.874,409.293,16.424,29529.069,0.000,129211,12392,11650,742 +85,3.400000,0.866667,28867.863,453.125,502.891,20.139,29844.018,0.000,152134,13503,12515,988 +86,3.440000,0.853333,28436.314,454.530,432.172,19.473,29342.489,0.000,173787,14571,13503,1068 +87,3.480000,0.840000,29095.264,456.598,511.624,19.934,30083.420,0.000,205303,15475,14296,1179 +88,3.520000,0.826667,29081.764,417.106,673.798,14.660,30187.328,0.000,242964,16173,14802,1371 +89,3.560000,0.813333,28279.684,507.320,775.378,16.411,29578.793,0.000,268708,16775,15343,1432 +90,3.600000,0.800000,28103.778,532.324,776.270,17.896,29430.268,0.000,286286,17064,15838,1226 +91,3.640000,0.786667,27505.913,402.729,592.157,13.927,28514.726,0.000,295168,17351,16376,975 +92,3.680000,0.773333,27169.629,402.183,655.295,13.980,28241.087,0.000,292738,17379,16532,847 +93,3.720000,0.760000,26835.036,480.168,729.782,13.961,28058.947,0.000,293236,17415,16588,827 +94,3.760000,0.746667,15024.841,546.201,741.771,15.501,16328.314,0.000,284436,17357,16614,743 +95,3.800000,0.733333,15628.995,427.742,712.737,15.503,16784.977,0.000,286006,17311,16601,710 +96,3.840000,0.720000,15578.134,427.513,668.917,15.986,16690.550,0.000,285003,17194,16532,662 +97,3.880000,0.706667,15317.815,418.604,641.041,16.468,16393.928,0.000,285397,17192,16532,660 +98,3.920000,0.693333,15083.531,445.315,686.465,16.925,16232.236,0.000,291460,17170,16584,586 +99,3.960000,0.680000,15847.039,549.399,882.103,14.377,17292.918,0.000,295431,17060,16468,592 +100,4.000000,0.666667,16033.033,531.381,826.075,13.990,17404.479,0.000,300410,16881,16300,581 +101,4.040000,0.653333,15759.552,516.377,794.894,13.936,17084.759,0.000,301366,16743,16131,612 +102,4.080000,0.640000,15218.748,551.754,770.264,15.325,16556.091,0.000,309711,16639,16045,594 +103,4.120000,0.626667,15254.656,449.873,726.885,18.031,16449.445,0.000,315256,16569,15947,622 +104,4.160000,0.613333,14478.426,427.163,727.815,15.515,15648.919,0.000,314068,16447,15912,535 +105,4.200000,0.600000,14359.100,417.502,723.701,14.037,15514.340,0.000,314180,16428,15935,493 +106,4.240000,0.586667,13729.462,421.463,623.158,16.037,14790.120,0.000,299327,16359,16016,343 +107,4.280000,0.573333,13181.836,410.045,829.395,19.902,14441.178,0.000,311125,16153,15822,331 +108,4.320000,0.560000,14465.852,409.339,807.605,16.081,15698.877,0.000,307101,15988,15616,372 +109,4.360000,0.546667,13631.951,453.157,761.407,13.935,14860.450,0.000,305225,15869,15483,386 +110,4.400000,0.533333,13635.023,524.931,888.337,20.623,15068.914,0.000,302508,15800,15369,431 +111,4.440000,0.520000,14318.513,446.271,666.636,13.990,15445.410,0.000,300671,15550,15167,383 +112,4.480000,0.506667,13085.500,447.912,668.463,14.731,14216.606,0.000,297027,15431,15042,389 +113,4.520000,0.493333,14129.719,451.447,637.624,13.924,15232.714,0.000,293653,15373,15011,362 +114,4.560000,0.480000,13219.907,442.165,688.672,16.453,14367.197,0.000,291527,15326,14928,398 +115,4.600000,0.466667,13686.532,548.256,788.289,19.432,15042.509,0.000,288857,15185,14821,364 +116,4.640000,0.453333,15014.412,408.351,629.201,13.920,16065.884,0.000,279334,14956,14412,544 +117,4.680000,0.440000,14079.832,404.194,673.252,13.930,15171.208,0.000,275332,14898,14522,376 +118,4.720000,0.426667,12215.106,471.927,692.328,19.458,13398.819,0.000,267417,14629,14230,399 +119,4.760000,0.413333,11646.450,405.032,596.536,14.159,12662.177,0.000,256594,14188,13697,491 +120,4.800000,0.400000,10617.820,417.193,656.543,13.943,11705.499,0.000,251493,13810,13237,573 +121,4.840000,0.386667,11040.301,390.854,573.098,13.955,12018.208,0.000,242608,13414,12782,632 +122,4.880000,0.373333,9295.621,452.165,642.394,14.735,10404.915,0.000,231645,12805,12152,653 +123,4.920000,0.360000,7728.920,403.201,631.975,17.390,8781.486,0.000,222241,12129,11467,662 +124,4.960000,0.346667,6757.484,419.530,612.530,17.418,7806.962,0.000,205902,11540,10874,666 +125,5.000000,0.333333,6517.739,379.587,541.037,14.278,7452.641,0.000,195276,11086,10446,640 +126,5.040000,0.320000,4584.517,373.647,461.988,13.951,5434.103,0.000,188455,11143,10401,742 +127,5.080000,0.306667,3061.463,368.433,395.838,17.476,3843.210,0.000,179356,11005,10307,698 +128,5.120000,0.293333,2516.270,364.584,415.896,13.938,3310.688,0.000,169328,10751,9897,854 +129,5.160000,0.280000,2586.390,370.742,460.879,15.490,3433.501,0.000,166048,10606,9624,982 +130,5.200000,0.266667,2716.016,477.169,482.921,14.236,3690.342,0.000,163846,10608,9724,884 +131,5.240000,0.253333,2522.992,350.719,426.043,13.918,3313.672,0.000,161286,10727,9680,1047 +132,5.280000,0.240000,2351.683,352.059,401.814,13.934,3119.490,0.000,157901,10582,9524,1058 +133,5.320000,0.226667,2345.517,347.535,383.247,15.282,3091.581,0.000,151976,10457,9537,920 +134,5.360000,0.213333,2724.086,394.202,400.956,18.648,3537.892,0.000,151647,10363,9393,970 +135,5.400000,0.200000,2773.619,433.425,484.287,13.963,3705.294,0.000,145006,10270,9298,972 +136,5.440000,0.186667,2603.825,406.516,412.150,16.949,3439.440,0.000,140994,10292,9394,898 +137,5.480000,0.173333,2437.291,335.306,361.980,13.887,3148.464,0.000,134180,10158,9250,908 +138,5.520000,0.160000,2594.611,345.409,360.370,13.958,3314.348,0.000,134787,10009,9116,893 +139,5.560000,0.146667,2301.947,327.132,327.451,13.960,2970.490,0.000,125205,9877,8911,966 +140,5.600000,0.133333,2293.323,324.423,331.539,14.010,2963.295,0.000,126414,9607,8654,953 +141,5.640000,0.120000,2364.499,319.709,327.874,17.410,3029.492,0.000,119311,9428,8460,968 +142,5.680000,0.106667,2501.233,395.069,362.273,17.978,3276.553,0.000,112341,9174,8240,934 +143,5.720000,0.093333,2590.907,347.865,308.075,13.902,3260.749,0.000,113920,9115,8161,954 +144,5.760000,0.080000,2251.282,307.789,293.657,13.955,2866.683,0.000,108535,8987,8007,980 +145,5.800000,0.066667,2243.918,310.168,277.045,13.911,2845.042,0.000,103129,8785,7885,900 +146,5.840000,0.053333,2232.075,313.479,279.494,15.561,2840.609,0.000,102253,8700,7701,999 +147,5.880000,0.040000,2444.490,314.962,283.146,13.883,3056.481,0.000,99134,8553,7564,989 +148,5.920000,0.026667,2750.960,397.254,291.645,15.904,3455.763,0.000,98116,8623,7647,976 +149,5.960000,0.013333,2326.029,309.175,260.691,13.946,2909.841,0.000,97954,8676,7628,1048 diff --git a/docs/performance/motion-comparison/worktree-240x80-muster-0.csv b/docs/performance/motion-comparison/worktree-240x80-muster-0.csv new file mode 100644 index 000000000..76f28b5eb --- /dev/null +++ b/docs/performance/motion-comparison/worktree-240x80-muster-0.csv @@ -0,0 +1,151 @@ +frame,elapsed_s,zoom,render_us,diff_us,encode_us,reset_us,total_us,interval_us,bytes,changed_cells,glyph_changes,color_only_changes +0,0.000000,0.000000,2318.662,211.584,0.162,13.976,2544.384,0.000,19,0,0,0 +1,0.040000,0.013333,2442.652,369.504,281.562,14.149,3107.867,0.000,110123,9446,8438,1008 +2,0.080000,0.026667,2315.286,320.666,289.514,14.046,2939.512,0.000,113264,9564,8465,1099 +3,0.120000,0.040000,2422.639,334.663,296.214,14.167,3067.683,0.000,112514,9576,8559,1017 +4,0.160000,0.053333,2386.098,322.630,291.451,14.043,3014.222,0.000,115063,9569,8538,1031 +5,0.200000,0.066667,2366.374,325.818,273.819,14.590,2980.601,0.000,119140,9733,8723,1010 +6,0.240000,0.080000,2361.057,322.956,312.424,14.035,3010.472,0.000,121507,9794,8783,1011 +7,0.280000,0.093333,2434.490,332.229,314.784,14.103,3095.606,0.000,125985,9899,8891,1008 +8,0.320000,0.106667,2387.833,326.418,323.714,14.136,3052.101,0.000,128325,9971,8989,982 +9,0.360000,0.120000,2459.589,327.157,307.251,14.105,3108.102,0.000,131381,10107,9177,930 +10,0.400000,0.133333,2396.957,334.718,342.426,14.110,3088.211,0.000,135207,10204,9248,956 +11,0.440000,0.146667,2412.168,334.557,342.380,14.109,3103.214,0.000,136401,10255,9312,943 +12,0.480000,0.160000,2453.092,335.877,371.168,14.598,3174.735,0.000,142692,10478,9513,965 +13,0.520000,0.173333,2514.152,348.913,352.363,15.212,3230.640,0.000,145797,10762,9828,934 +14,0.560000,0.186667,2459.221,336.036,398.645,14.431,3208.333,0.000,153127,10665,9737,928 +15,0.600000,0.200000,2462.958,346.414,364.935,14.040,3188.347,0.000,150494,10716,9768,948 +16,0.640000,0.213333,2478.660,344.994,386.952,14.059,3224.665,0.000,155794,10741,9826,915 +17,0.680000,0.226667,2495.238,345.865,390.549,14.182,3245.834,0.000,159316,10792,9859,933 +18,0.720000,0.240000,2560.355,381.944,401.820,15.079,3359.198,0.000,160894,10755,9780,975 +19,0.760000,0.253333,2498.442,350.869,402.225,14.128,3265.664,0.000,162726,10760,9877,883 +20,0.800000,0.266667,2532.006,352.220,413.949,14.448,3312.623,0.000,166913,10813,9962,851 +21,0.840000,0.280000,2560.776,360.925,424.286,14.059,3360.046,0.000,173024,10872,9952,920 +22,0.880000,0.293333,2541.696,360.796,414.260,14.218,3330.970,0.000,176290,10980,10017,963 +23,0.920000,0.306667,3263.525,368.938,439.657,14.166,4086.286,0.000,180814,11102,10234,868 +24,0.960000,0.320000,4595.562,378.796,448.898,14.068,5437.324,0.000,193612,11212,10493,719 +25,1.000000,0.333333,6008.483,383.279,442.031,14.147,6847.940,0.000,195824,11341,10634,707 +26,1.040000,0.346667,6687.417,374.409,478.489,14.098,7554.413,0.000,205111,11405,10653,752 +27,1.080000,0.360000,7937.172,372.551,515.133,14.075,8838.931,0.000,219043,11760,11107,653 +28,1.120000,0.373333,9322.742,382.304,527.980,14.091,10247.117,0.000,226031,12387,11713,674 +29,1.160000,0.386667,10620.147,384.398,527.256,14.176,11545.977,0.000,236699,12922,12271,651 +30,1.200000,0.400000,11256.781,378.809,594.977,14.019,12244.586,0.000,245609,13298,12640,658 +31,1.240000,0.413333,12023.837,399.637,536.724,14.272,12974.470,0.000,255500,13764,13181,583 +32,1.280000,0.426667,12840.491,405.715,553.395,14.137,13813.738,0.000,267974,14317,13804,513 +33,1.320000,0.440000,13427.781,407.634,580.047,14.069,14429.531,0.000,275673,14767,14354,413 +34,1.360000,0.453333,13485.955,398.605,619.764,14.059,14518.383,0.000,279575,14990,14579,411 +35,1.400000,0.466667,13537.284,395.218,580.946,14.129,14527.577,0.000,285145,15094,14737,357 +36,1.440000,0.480000,13609.723,402.211,639.654,14.082,14665.670,0.000,290962,15237,14795,442 +37,1.480000,0.493333,13669.720,404.708,651.682,14.145,14740.255,0.000,293448,15268,14858,410 +38,1.520000,0.506667,13776.185,409.378,648.344,14.091,14847.998,0.000,294089,15353,14930,423 +39,1.560000,0.520000,13874.181,423.134,659.881,14.056,14971.252,0.000,300379,15504,15065,439 +40,1.600000,0.533333,13983.990,420.715,655.022,14.769,15074.496,0.000,302330,15663,15240,423 +41,1.640000,0.546667,13978.150,491.790,650.929,14.131,15135.000,0.000,303449,15752,15322,430 +42,1.680000,0.560000,13971.098,404.486,650.322,14.098,15040.004,0.000,309234,15846,15423,423 +43,1.720000,0.573333,14043.956,411.670,612.434,17.969,15086.029,0.000,313362,16131,15694,437 +44,1.760000,0.586667,14007.657,406.801,695.191,14.014,15123.663,0.000,327485,16309,15817,492 +45,1.800000,0.600000,14134.240,421.401,669.404,14.155,15239.200,0.000,318096,16488,16013,475 +46,1.840000,0.613333,14294.990,412.535,665.710,14.030,15387.265,0.000,321786,16575,16108,467 +47,1.880000,0.626667,14311.043,423.071,621.218,14.201,15369.533,0.000,316061,16586,16068,518 +48,1.920000,0.640000,14389.055,408.479,663.171,14.037,15474.742,0.000,311322,16582,16006,576 +49,1.960000,0.653333,14427.396,411.615,658.799,14.190,15512.000,0.000,308123,16777,16163,614 +50,2.000000,0.666667,14491.765,407.863,644.079,14.056,15557.763,0.000,304171,16826,16220,606 +51,2.040000,0.680000,14565.046,405.607,607.948,14.147,15592.748,0.000,296878,16914,16327,587 +52,2.080000,0.693333,14792.276,402.210,626.374,14.113,15834.973,0.000,293687,17082,16528,554 +53,2.120000,0.706667,14633.092,402.953,592.043,14.193,15642.281,0.000,292644,17202,16579,623 +54,2.160000,0.720000,14782.372,414.108,606.292,14.839,15817.611,0.000,292775,17248,16534,714 +55,2.200000,0.733333,14892.083,413.374,625.119,14.416,15944.992,0.000,286995,17326,16633,693 +56,2.240000,0.746667,14794.275,399.608,632.649,14.132,15840.664,0.000,292575,17294,16643,651 +57,2.280000,0.760000,25653.464,400.331,646.439,14.895,26715.129,0.000,289936,17324,16605,719 +58,2.320000,0.773333,25675.698,400.113,685.715,14.078,26775.604,0.000,298012,17427,16675,752 +59,2.360000,0.786667,25794.074,399.114,604.638,14.125,26811.951,0.000,297820,17405,16562,843 +60,2.400000,0.800000,25804.919,401.245,588.476,14.012,26808.652,0.000,282901,17223,16093,1130 +61,2.440000,0.813333,25734.617,394.588,610.221,14.116,26753.542,0.000,271134,17241,16141,1100 +62,2.480000,0.826667,25711.215,393.231,498.266,14.043,26616.755,0.000,239757,16629,15309,1320 +63,2.520000,0.840000,25724.529,394.116,476.695,14.116,26609.456,0.000,211835,16053,14660,1393 +64,2.560000,0.853333,25669.412,394.246,416.201,14.074,26493.933,0.000,178886,15454,14221,1233 +65,2.600000,0.866667,25794.438,400.379,389.540,14.080,26598.437,0.000,168305,14564,13458,1106 +66,2.640000,0.880000,25728.914,397.830,359.000,14.396,26500.140,0.000,156346,14012,13005,1007 +67,2.680000,0.893333,26060.348,402.147,334.442,14.123,26811.060,0.000,154702,12996,12019,977 +68,2.720000,0.906667,25868.280,403.990,344.166,14.048,26630.484,0.000,146075,12209,11055,1154 +69,2.760000,0.920000,25963.229,406.390,302.925,14.105,26686.649,0.000,135801,10145,8810,1335 +70,2.800000,0.933333,26110.991,391.836,368.928,15.183,26886.938,0.000,150933,10504,9063,1441 +71,2.840000,0.946667,26133.235,388.117,341.269,14.380,26877.001,0.000,156980,9224,7103,2121 +72,2.880000,0.960000,25980.988,373.670,289.221,14.130,26658.009,0.000,124096,8645,6904,1741 +73,2.920000,0.973333,26326.248,347.178,218.630,14.568,26906.624,0.000,99166,6531,5303,1228 +74,2.960000,0.986667,26102.416,361.751,249.888,14.390,26728.445,0.000,115673,8672,7536,1136 +75,3.000000,1.000000,10195.125,339.537,87.275,14.500,10636.437,0.000,36375,4392,4138,254 +76,3.040000,0.986667,25535.334,318.870,67.754,15.020,25936.978,0.000,29047,3785,3552,233 +77,3.080000,0.973333,26051.034,339.071,248.625,14.064,26652.794,0.000,110000,8172,7040,1132 +78,3.120000,0.960000,28267.570,465.466,292.619,19.639,29045.294,0.000,102003,7293,6075,1218 +79,3.160000,0.946667,28787.826,402.147,252.534,14.485,29456.992,0.000,118061,8337,6475,1862 +80,3.200000,0.933333,27272.247,386.888,323.113,14.179,27996.427,0.000,143022,10142,7944,2198 +81,3.240000,0.920000,27261.437,391.377,303.253,14.009,27970.076,0.000,135138,10169,8527,1642 +82,3.280000,0.906667,26889.426,398.010,312.991,14.395,27614.822,0.000,140860,9906,8614,1292 +83,3.320000,0.893333,27330.748,405.435,352.451,15.641,28104.275,0.000,148150,12528,11341,1187 +84,3.360000,0.880000,28321.183,416.685,382.651,14.055,29134.574,0.000,167635,12942,11987,955 +85,3.400000,0.866667,27463.565,397.099,371.279,14.139,28246.082,0.000,170508,13907,12942,965 +86,3.440000,0.853333,27888.072,400.376,414.912,14.283,28717.643,0.000,180752,14574,13594,980 +87,3.480000,0.840000,26961.636,421.776,502.053,15.286,27900.751,0.000,208888,15304,14191,1113 +88,3.520000,0.826667,28013.340,512.232,587.023,15.625,29128.220,0.000,238963,16031,14712,1319 +89,3.560000,0.813333,27146.676,407.268,552.734,14.863,28121.541,0.000,271025,16642,15325,1317 +90,3.600000,0.800000,27202.533,394.821,600.791,14.006,28212.151,0.000,284630,17168,16020,1148 +91,3.640000,0.786667,26453.609,418.069,622.109,14.147,27507.934,0.000,295590,17102,15963,1139 +92,3.680000,0.773333,28101.029,466.867,693.143,14.742,29275.781,0.000,291945,17429,16522,907 +93,3.720000,0.760000,27366.341,488.731,817.245,14.113,28686.430,0.000,291656,17406,16628,778 +94,3.760000,0.746667,16895.757,403.073,655.700,17.420,17971.950,0.000,293683,17373,16650,723 +95,3.800000,0.733333,15834.901,412.197,619.445,14.244,16880.787,0.000,290598,17290,16581,709 +96,3.840000,0.720000,15695.304,401.673,637.944,15.585,16750.506,0.000,287747,17325,16656,669 +97,3.880000,0.706667,15550.148,396.590,599.637,14.194,16560.569,0.000,292164,17176,16496,680 +98,3.920000,0.693333,15319.058,404.970,575.729,14.075,16313.832,0.000,289832,17157,16470,687 +99,3.960000,0.680000,14665.816,425.479,710.163,17.762,15819.220,0.000,296907,17065,16502,563 +100,4.000000,0.666667,15686.105,409.594,663.040,14.181,16772.920,0.000,301876,16915,16287,628 +101,4.040000,0.653333,15875.978,419.216,708.878,14.206,17018.278,0.000,304337,16787,16196,591 +102,4.080000,0.640000,14982.691,434.347,722.978,15.031,16155.047,0.000,310285,16670,16062,608 +103,4.120000,0.626667,15020.258,409.081,632.384,14.138,16075.861,0.000,313448,16610,16064,546 +104,4.160000,0.613333,14904.173,418.444,702.124,14.068,16038.809,0.000,316474,16477,15915,562 +105,4.200000,0.600000,15197.942,409.097,669.180,14.208,16290.427,0.000,317931,16521,16058,463 +106,4.240000,0.586667,15356.962,414.386,641.689,14.133,16427.170,0.000,323460,16374,15866,508 +107,4.280000,0.573333,14824.762,435.579,798.187,17.406,16075.934,0.000,311383,16228,15754,474 +108,4.320000,0.560000,14550.990,436.261,683.854,14.090,15685.195,0.000,308575,16063,15599,464 +109,4.360000,0.546667,14695.443,412.053,619.536,14.125,15741.157,0.000,304094,15805,15382,423 +110,4.400000,0.533333,14499.582,419.925,614.620,14.080,15548.207,0.000,298121,15672,15234,438 +111,4.440000,0.520000,14057.109,431.872,798.427,17.649,15305.057,0.000,300316,15618,15186,432 +112,4.480000,0.506667,14167.564,534.211,726.107,14.024,15441.906,0.000,293025,15453,15000,453 +113,4.520000,0.493333,14523.819,511.520,697.234,14.085,15746.658,0.000,291544,15310,14882,428 +114,4.560000,0.480000,14081.294,411.043,655.536,14.044,15161.917,0.000,289502,15310,14947,363 +115,4.600000,0.466667,14240.705,399.907,619.217,14.142,15273.971,0.000,283528,15203,14775,428 +116,4.640000,0.453333,14491.294,401.884,616.368,14.079,15523.625,0.000,276076,14833,14439,394 +117,4.680000,0.440000,13889.976,446.234,613.470,14.141,14963.821,0.000,272179,14925,14556,369 +118,4.720000,0.426667,12664.340,406.384,566.214,14.023,13650.961,0.000,266337,14748,14377,371 +119,4.760000,0.413333,12735.930,397.888,582.084,14.059,13729.961,0.000,259390,14350,13826,524 +120,4.800000,0.400000,11671.399,423.927,597.914,19.461,12712.701,0.000,250464,13856,13243,613 +121,4.840000,0.386667,10669.855,377.990,628.450,16.591,11692.886,0.000,240663,13294,12648,646 +122,4.880000,0.373333,10137.710,380.320,500.259,14.063,11032.352,0.000,220366,12876,12137,739 +123,4.920000,0.360000,7929.748,375.856,523.598,14.107,8843.309,0.000,222351,12179,11476,703 +124,4.960000,0.346667,6825.949,419.294,526.029,16.115,7787.387,0.000,210620,11657,10981,676 +125,5.000000,0.333333,6441.191,377.174,450.478,14.017,7282.860,0.000,193419,11411,10679,732 +126,5.040000,0.320000,4715.186,380.917,443.049,14.199,5553.351,0.000,190298,11334,10611,723 +127,5.080000,0.306667,3519.654,384.005,514.238,14.652,4432.549,0.000,184301,11358,10536,822 +128,5.120000,0.293333,2860.085,401.651,424.508,14.015,3700.259,0.000,176400,11097,10220,877 +129,5.160000,0.280000,2533.211,363.111,421.450,14.092,3331.864,0.000,171026,10858,9833,1025 +130,5.200000,0.266667,2516.915,358.751,417.300,14.064,3307.030,0.000,167323,10845,9798,1047 +131,5.240000,0.253333,2467.109,379.707,456.040,17.611,3320.467,0.000,156003,10564,9702,862 +132,5.280000,0.240000,2862.649,360.078,449.080,14.451,3686.258,0.000,154478,10543,9692,851 +133,5.320000,0.226667,3132.551,346.134,377.176,14.165,3870.026,0.000,149896,10517,9519,998 +134,5.360000,0.213333,2895.117,394.633,372.518,14.438,3676.706,0.000,147497,10311,9384,927 +135,5.400000,0.200000,3236.569,447.077,476.950,18.893,4179.489,0.000,144145,10287,9353,934 +136,5.440000,0.186667,2546.262,337.392,355.644,14.025,3253.323,0.000,139792,10239,9293,946 +137,5.480000,0.173333,2418.717,333.747,346.912,14.103,3113.479,0.000,135549,10107,9180,927 +138,5.520000,0.160000,2482.162,427.176,360.401,14.399,3284.138,0.000,133107,10102,9157,945 +139,5.560000,0.146667,2739.892,403.198,630.618,18.829,3792.537,0.000,129247,9905,8899,1006 +140,5.600000,0.133333,2555.273,323.837,318.664,14.071,3211.845,0.000,125773,9687,8721,966 +141,5.640000,0.120000,2379.646,316.884,298.803,14.058,3009.391,0.000,120118,9601,8643,958 +142,5.680000,0.106667,2360.999,319.844,296.161,14.089,2991.093,0.000,115985,9346,8368,978 +143,5.720000,0.093333,2355.203,318.685,286.392,14.114,2974.394,0.000,112890,9322,8383,939 +144,5.760000,0.080000,2691.388,338.401,289.229,14.037,3333.055,0.000,109557,9143,8131,1012 +145,5.800000,0.066667,2700.720,377.244,275.720,14.095,3367.779,0.000,107094,9107,8085,1022 +146,5.840000,0.053333,2316.870,308.311,253.893,14.037,2893.111,0.000,102679,8880,7834,1046 +147,5.880000,0.040000,2297.990,305.413,254.673,14.343,2872.419,0.000,100196,8716,7679,1037 +148,5.920000,0.026667,2278.342,300.345,245.516,14.030,2838.233,0.000,96193,8472,7416,1056 +149,5.960000,0.013333,2254.268,299.482,227.431,14.141,2795.322,0.000,92861,8330,7216,1114 diff --git a/docs/performance/motion-comparison/worktree-240x80-muster-1.csv b/docs/performance/motion-comparison/worktree-240x80-muster-1.csv new file mode 100644 index 000000000..9c1fdd477 --- /dev/null +++ b/docs/performance/motion-comparison/worktree-240x80-muster-1.csv @@ -0,0 +1,151 @@ +frame,elapsed_s,zoom,render_us,diff_us,encode_us,reset_us,total_us,interval_us,bytes,changed_cells,glyph_changes,color_only_changes +0,0.000000,0.000000,2315.956,221.501,0.230,15.371,2553.058,0.000,19,0,0,0 +1,0.040000,0.013333,2307.091,387.431,290.449,14.080,2999.051,0.000,110123,9446,8438,1008 +2,0.080000,0.026667,2326.681,323.034,286.051,14.154,2949.920,0.000,113264,9564,8465,1099 +3,0.120000,0.040000,2493.423,325.686,345.852,18.680,3183.641,0.000,112514,9576,8559,1017 +4,0.160000,0.053333,2825.063,624.920,408.470,19.412,3877.865,0.000,115063,9569,8538,1031 +5,0.200000,0.066667,2792.089,439.926,348.569,14.373,3594.957,0.000,119140,9733,8723,1010 +6,0.240000,0.080000,2455.689,324.238,306.770,13.959,3100.656,0.000,121507,9794,8783,1011 +7,0.280000,0.093333,2376.795,326.381,319.790,13.912,3036.878,0.000,125985,9899,8891,1008 +8,0.320000,0.106667,2386.229,326.639,305.081,14.003,3031.952,0.000,128325,9971,8989,982 +9,0.360000,0.120000,2401.454,333.453,328.917,13.956,3077.780,0.000,131381,10107,9177,930 +10,0.400000,0.133333,2489.727,414.044,422.898,19.245,3345.914,0.000,135207,10204,9248,956 +11,0.440000,0.146667,2722.728,409.838,635.429,14.795,3782.790,0.000,136401,10255,9312,943 +12,0.480000,0.160000,2612.509,333.661,361.905,14.042,3322.117,0.000,142692,10478,9513,965 +13,0.520000,0.173333,2453.132,335.953,350.973,13.991,3154.049,0.000,145797,10762,9828,934 +14,0.560000,0.186667,2462.111,343.563,369.212,14.155,3189.041,0.000,153127,10665,9737,928 +15,0.600000,0.200000,2749.370,425.214,411.865,14.685,3601.134,0.000,150494,10716,9768,948 +16,0.640000,0.213333,2743.900,606.140,446.851,17.600,3814.491,0.000,155794,10741,9826,915 +17,0.680000,0.226667,2705.379,346.571,384.796,13.972,3450.718,0.000,159316,10792,9859,933 +18,0.720000,0.240000,2487.161,342.011,389.575,13.985,3232.732,0.000,160894,10755,9780,975 +19,0.760000,0.253333,2477.778,346.702,403.144,14.071,3241.695,0.000,162726,10760,9877,883 +20,0.800000,0.266667,2778.081,371.395,419.114,14.010,3582.600,0.000,166913,10813,9962,851 +21,0.840000,0.280000,2679.268,753.870,533.822,14.681,3981.641,0.000,173024,10872,9952,920 +22,0.880000,0.293333,2626.178,356.332,423.106,14.000,3419.616,0.000,176290,10980,10017,963 +23,0.920000,0.306667,3223.176,361.117,411.699,14.017,4010.009,0.000,180814,11102,10234,868 +24,0.960000,0.320000,4588.532,387.816,466.713,14.027,5457.088,0.000,193612,11212,10493,719 +25,1.000000,0.333333,5984.004,394.308,533.469,14.008,6925.789,0.000,195824,11341,10634,707 +26,1.040000,0.346667,7217.570,372.421,482.189,14.001,8086.181,0.000,205111,11405,10653,752 +27,1.080000,0.360000,8099.617,422.665,526.837,16.481,9065.600,0.000,219043,11760,11107,653 +28,1.120000,0.373333,9798.455,390.003,527.708,14.051,10730.217,0.000,226031,12387,11713,674 +29,1.160000,0.386667,11110.901,377.704,550.442,13.972,12053.019,0.000,236699,12922,12271,651 +30,1.200000,0.400000,11194.474,374.672,569.939,14.017,12153.102,0.000,245609,13298,12640,658 +31,1.240000,0.413333,12577.184,402.419,597.185,14.019,13590.807,0.000,255500,13764,13181,583 +32,1.280000,0.426667,13219.601,399.360,597.096,14.024,14230.081,0.000,267974,14317,13804,513 +33,1.320000,0.440000,13631.496,531.101,735.667,17.794,14916.058,0.000,275673,14767,14354,413 +34,1.360000,0.453333,13537.734,399.889,613.037,14.042,14564.702,0.000,279575,14990,14579,411 +35,1.400000,0.466667,14404.050,395.129,572.035,13.968,15385.182,0.000,285145,15094,14737,357 +36,1.440000,0.480000,14352.956,396.655,624.685,14.032,15388.328,0.000,290962,15237,14795,442 +37,1.480000,0.493333,14951.255,485.607,695.645,17.447,16149.954,0.000,293448,15268,14858,410 +38,1.520000,0.506667,14066.247,407.560,628.995,14.003,15116.805,0.000,294089,15353,14930,423 +39,1.560000,0.520000,14810.225,404.809,662.755,14.069,15891.858,0.000,300379,15504,15065,439 +40,1.600000,0.533333,14948.134,412.266,659.381,14.026,16033.807,0.000,302330,15663,15240,423 +41,1.640000,0.546667,16350.609,465.667,723.093,17.461,17556.830,0.000,303449,15752,15322,430 +42,1.680000,0.560000,14878.989,424.343,773.011,15.268,16091.611,0.000,309234,15846,15423,423 +43,1.720000,0.573333,14644.265,479.407,807.106,17.428,15948.206,0.000,313362,16131,15694,437 +44,1.760000,0.586667,14782.564,407.701,692.219,14.110,15896.594,0.000,327485,16309,15817,492 +45,1.800000,0.600000,15310.425,421.633,757.122,15.996,16505.176,0.000,318096,16488,16013,475 +46,1.840000,0.613333,15337.979,543.025,704.212,18.132,16603.348,0.000,321786,16575,16108,467 +47,1.880000,0.626667,15830.938,543.540,824.038,19.242,17217.758,0.000,316061,16586,16068,518 +48,1.920000,0.640000,15821.037,409.664,844.719,17.506,17092.926,0.000,311322,16582,16006,576 +49,1.960000,0.653333,15632.939,423.137,786.028,15.958,16858.062,0.000,308123,16777,16163,614 +50,2.000000,0.666667,15399.750,524.267,762.032,13.991,16700.040,0.000,304171,16826,16220,606 +51,2.040000,0.680000,15646.692,740.629,780.257,16.592,17184.170,0.000,296878,16914,16327,587 +52,2.080000,0.693333,15844.896,465.337,730.160,17.033,17057.426,0.000,293687,17082,16528,554 +53,2.120000,0.706667,16238.909,418.116,763.865,14.029,17434.919,0.000,292644,17202,16579,623 +54,2.160000,0.720000,15818.299,396.355,636.925,14.024,16865.603,0.000,292775,17248,16534,714 +55,2.200000,0.733333,16249.752,407.501,619.300,14.073,17290.626,0.000,286995,17326,16633,693 +56,2.240000,0.746667,15564.333,399.823,641.907,14.004,16620.067,0.000,292575,17294,16643,651 +57,2.280000,0.760000,27527.533,400.304,643.888,13.994,28585.719,0.000,289936,17324,16605,719 +58,2.320000,0.773333,27396.611,409.066,609.430,14.023,28429.130,0.000,298012,17427,16675,752 +59,2.360000,0.786667,27493.422,484.329,644.033,14.674,28636.458,0.000,297820,17405,16562,843 +60,2.400000,0.800000,28655.141,453.257,575.751,14.090,29698.239,0.000,282901,17223,16093,1130 +61,2.440000,0.813333,27793.682,385.547,561.683,14.013,28754.925,0.000,271134,17241,16141,1100 +62,2.480000,0.826667,27704.241,396.125,527.647,14.101,28642.114,0.000,239757,16629,15309,1320 +63,2.520000,0.840000,26473.973,449.832,519.326,14.692,27457.823,0.000,211835,16053,14660,1393 +64,2.560000,0.853333,27069.630,396.167,407.459,14.067,27887.323,0.000,178886,15454,14221,1233 +65,2.600000,0.866667,26550.523,396.653,395.646,17.414,27360.236,0.000,168305,14564,13458,1106 +66,2.640000,0.880000,27147.350,396.456,361.645,14.038,27919.489,0.000,156346,14012,13005,1007 +67,2.680000,0.893333,26945.630,404.547,354.145,13.977,27718.299,0.000,154702,12996,12019,977 +68,2.720000,0.906667,27083.340,403.016,338.165,14.067,27838.588,0.000,146075,12209,11055,1154 +69,2.760000,0.920000,26532.264,582.159,358.447,16.009,27488.879,0.000,135801,10145,8810,1335 +70,2.800000,0.933333,26668.049,432.106,346.701,14.105,27460.961,0.000,150933,10504,9063,1441 +71,2.840000,0.946667,26268.748,442.582,374.508,16.017,27101.855,0.000,156980,9224,7103,2121 +72,2.880000,0.960000,26716.911,408.578,282.607,14.298,27422.394,0.000,124096,8645,6904,1741 +73,2.920000,0.973333,26328.388,349.984,218.533,14.119,26911.024,0.000,99166,6531,5303,1228 +74,2.960000,0.986667,27466.987,345.343,251.894,13.988,28078.212,0.000,115673,8672,7536,1136 +75,3.000000,1.000000,10026.783,305.277,86.445,14.378,10432.883,0.000,36375,4392,4138,254 +76,3.040000,0.986667,27719.293,345.309,75.407,17.195,28157.204,0.000,29047,3785,3552,233 +77,3.080000,0.973333,26438.489,342.268,224.651,14.307,27019.715,0.000,110000,8172,7040,1132 +78,3.120000,0.960000,26210.558,351.303,235.542,14.065,26811.468,0.000,102003,7293,6075,1218 +79,3.160000,0.946667,26117.224,389.230,265.213,17.072,26788.739,0.000,118061,8337,6475,1862 +80,3.200000,0.933333,26522.243,389.751,325.689,14.770,27252.453,0.000,143022,10142,7944,2198 +81,3.240000,0.920000,26856.385,430.663,306.634,14.031,27607.713,0.000,135138,10169,8527,1642 +82,3.280000,0.906667,26033.160,393.342,314.501,14.356,26755.359,0.000,140860,9906,8614,1292 +83,3.320000,0.893333,26029.339,420.104,364.892,14.314,26828.649,0.000,148150,12528,11341,1187 +84,3.360000,0.880000,26172.831,402.204,386.476,14.022,26975.533,0.000,167635,12942,11987,955 +85,3.400000,0.866667,26493.359,419.383,402.024,14.806,27329.572,0.000,170508,13907,12942,965 +86,3.440000,0.853333,26221.224,394.531,435.731,14.152,27065.638,0.000,180752,14574,13594,980 +87,3.480000,0.840000,25679.159,387.937,470.217,14.043,26551.356,0.000,208888,15304,14191,1113 +88,3.520000,0.826667,25924.225,404.720,518.537,14.067,26861.549,0.000,238963,16031,14712,1319 +89,3.560000,0.813333,26380.123,398.198,547.136,13.996,27339.453,0.000,271025,16642,15325,1317 +90,3.600000,0.800000,26463.926,399.192,608.468,14.082,27485.668,0.000,284630,17168,16020,1148 +91,3.640000,0.786667,25922.109,393.193,657.904,14.201,26987.407,0.000,295590,17102,15963,1139 +92,3.680000,0.773333,26316.638,397.388,641.374,14.183,27369.583,0.000,291945,17429,16522,907 +93,3.720000,0.760000,25645.211,396.970,651.312,14.062,26707.555,0.000,291656,17406,16628,778 +94,3.760000,0.746667,15014.099,394.876,645.651,14.040,16068.666,0.000,293683,17373,16650,723 +95,3.800000,0.733333,15116.204,397.610,645.676,14.035,16173.525,0.000,290598,17290,16581,709 +96,3.840000,0.720000,14955.667,419.976,686.439,14.045,16076.127,0.000,287747,17325,16656,669 +97,3.880000,0.706667,14697.499,401.583,636.724,13.979,15749.785,0.000,292164,17176,16496,680 +98,3.920000,0.693333,14736.320,440.625,652.328,14.033,15843.306,0.000,289832,17157,16470,687 +99,3.960000,0.680000,14913.377,397.816,631.765,13.943,15956.901,0.000,296907,17065,16502,563 +100,4.000000,0.666667,15069.049,637.640,726.917,14.838,16448.444,0.000,301876,16915,16287,628 +101,4.040000,0.653333,15023.069,413.640,642.303,14.716,16093.728,0.000,304337,16787,16196,591 +102,4.080000,0.640000,14582.593,427.775,685.162,14.076,15709.606,0.000,310285,16670,16062,608 +103,4.120000,0.626667,14729.850,412.175,686.031,17.001,15845.057,0.000,313448,16610,16064,546 +104,4.160000,0.613333,14891.631,415.391,665.212,14.677,15986.911,0.000,316474,16477,15915,562 +105,4.200000,0.600000,14626.199,462.669,791.389,15.603,15895.860,0.000,317931,16521,16058,463 +106,4.240000,0.586667,14654.230,451.989,755.136,15.870,15877.225,0.000,323460,16374,15866,508 +107,4.280000,0.573333,15050.413,451.226,708.677,15.706,16226.022,0.000,311383,16228,15754,474 +108,4.320000,0.560000,15522.925,454.378,718.891,14.559,16710.753,0.000,308575,16063,15599,464 +109,4.360000,0.546667,16741.627,561.521,827.896,19.255,18150.299,0.000,304094,15805,15382,423 +110,4.400000,0.533333,18135.764,524.617,725.283,19.338,19405.002,0.000,298121,15672,15234,438 +111,4.440000,0.520000,16161.525,589.186,811.951,20.009,17582.671,0.000,300316,15618,15186,432 +112,4.480000,0.506667,15815.713,530.066,852.602,18.754,17217.135,0.000,293025,15453,15000,453 +113,4.520000,0.493333,15720.415,569.111,791.755,19.329,17100.610,0.000,291544,15310,14882,428 +114,4.560000,0.480000,16206.483,551.047,742.916,19.334,17519.780,0.000,289502,15310,14947,363 +115,4.600000,0.466667,15076.709,554.166,887.237,20.520,16538.632,0.000,283528,15203,14775,428 +116,4.640000,0.453333,14404.632,526.463,793.923,18.414,15743.432,0.000,276076,14833,14439,394 +117,4.680000,0.440000,16239.731,567.702,878.367,24.872,17710.672,0.000,272179,14925,14556,369 +118,4.720000,0.426667,15909.369,525.985,706.664,18.761,17160.779,0.000,266337,14748,14377,371 +119,4.760000,0.413333,15925.901,532.330,772.516,19.743,17250.490,0.000,259390,14350,13826,524 +120,4.800000,0.400000,13950.327,527.757,758.061,18.453,15254.598,0.000,250464,13856,13243,613 +121,4.840000,0.386667,13564.769,523.891,743.249,20.058,14851.967,0.000,240663,13294,12648,646 +122,4.880000,0.373333,10593.436,383.735,515.167,15.327,11507.665,0.000,220366,12876,12137,739 +123,4.920000,0.360000,10399.518,524.594,744.640,21.224,11689.976,0.000,222351,12179,11476,703 +124,4.960000,0.346667,8039.933,534.139,683.064,20.728,9277.864,0.000,210620,11657,10981,676 +125,5.000000,0.333333,8249.287,511.261,619.982,19.576,9400.106,0.000,193419,11411,10679,732 +126,5.040000,0.320000,5238.189,440.647,610.197,20.905,6309.938,0.000,190298,11334,10611,723 +127,5.080000,0.306667,4327.532,520.563,577.590,18.650,5444.335,0.000,184301,11358,10536,822 +128,5.120000,0.293333,3464.993,507.387,591.983,19.055,4583.418,0.000,176400,11097,10220,877 +129,5.160000,0.280000,3275.927,480.392,699.294,19.610,4475.223,0.000,171026,10858,9833,1025 +130,5.200000,0.266667,3373.784,447.523,496.477,17.998,4335.782,0.000,167323,10845,9798,1047 +131,5.240000,0.253333,2713.624,344.400,369.818,13.933,3441.775,0.000,156003,10564,9702,862 +132,5.280000,0.240000,2675.603,408.701,424.489,14.776,3523.569,0.000,154478,10543,9692,851 +133,5.320000,0.226667,2707.666,389.352,472.314,18.528,3587.860,0.000,149896,10517,9519,998 +134,5.360000,0.213333,3186.808,470.573,484.103,19.255,4160.739,0.000,147497,10311,9384,927 +135,5.400000,0.200000,2825.800,351.082,354.516,13.944,3545.342,0.000,144145,10287,9353,934 +136,5.440000,0.186667,2447.569,335.241,319.393,14.317,3116.520,0.000,139792,10239,9293,946 +137,5.480000,0.173333,2725.659,373.781,425.368,18.879,3543.687,0.000,135549,10107,9180,927 +138,5.520000,0.160000,3321.462,462.718,422.445,17.650,4224.275,0.000,133107,10102,9157,945 +139,5.560000,0.146667,3189.422,393.131,384.093,14.990,3981.636,0.000,129247,9905,8899,1006 +140,5.600000,0.133333,2938.402,323.734,308.209,14.446,3584.791,0.000,125773,9687,8721,966 +141,5.640000,0.120000,2383.846,327.774,303.547,14.347,3029.514,0.000,120118,9601,8643,958 +142,5.680000,0.106667,2369.652,416.928,353.148,19.086,3158.814,0.000,115985,9346,8368,978 +143,5.720000,0.093333,2856.888,552.338,385.245,20.615,3815.086,0.000,112890,9322,8383,939 +144,5.760000,0.080000,3061.071,403.376,379.776,16.382,3860.605,0.000,109557,9143,8131,1012 +145,5.800000,0.066667,3224.188,369.496,348.779,14.795,3957.258,0.000,107094,9107,8085,1022 +146,5.840000,0.053333,2662.134,403.127,309.712,14.657,3389.630,0.000,102679,8880,7834,1046 +147,5.880000,0.040000,2437.878,310.351,257.395,14.299,3019.923,0.000,100196,8716,7679,1037 +148,5.920000,0.026667,2781.021,400.786,311.230,17.455,3510.492,0.000,96193,8472,7416,1056 +149,5.960000,0.013333,2782.795,400.830,321.268,16.935,3521.828,0.000,92861,8330,7216,1114 diff --git a/docs/reference/motion-background.md b/docs/reference/motion-background.md new file mode 100644 index 000000000..4fd7406d2 --- /dev/null +++ b/docs/reference/motion-background.md @@ -0,0 +1,106 @@ +# Full-screen motion background + +`nori-tui-components::MotionBackground` is a presentation-only Ratatui layer +inspired by `norimotionsuite.html`, the supplied Nori Motion Suite reference. +It is intended for caller-owned alternate-screen onboarding and login flows. +The component does not initialize a terminal, collect credentials, launch a +browser, contact a provider, or store tokens. Those remain application concerns. +This change supplies the component and specimens; production onboarding is a +separate consumer integration. + +## Compose it + +```rust +use std::time::Duration; +use nori_tui_components::{MotionBackground, MotionPalette, MotionScene, MotionState}; +use ratatui::layout::Rect; + +let mut motion = MotionState::new(MotionScene::Dots); +motion.advance(Duration::from_millis(40)); // elapsed time supplied by your loop +motion.set_scene(MotionScene::Creatures); + +// In your application's terminal draw call: +terminal.draw(|frame| { + let form = Rect::new(25, 8, 50, 16); + frame.render_widget( + MotionBackground::new(&motion) + .palette(MotionPalette::nori()) + .quiet_area(form), + frame.area(), + ); + // Render your foreground widgets into `form` now. +}); +``` + +`quiet_area` uses absolute terminal coordinates. It blanks the content rectangle +and fades the surrounding scenery over six horizontal or three vertical cells. +It clears old content, so render the background first on every frame. The widget +clips to the intersection of its rectangle and the buffer, including non-zero +origins, empty areas, and tiny viewports. Foreground layout is entirely caller-owned. + +## Motion and rendering policies + +- `MotionScene::ALL` orders Dots, Formations, Sandboxes, Creatures, Blueprint. + Dots zoom into ordered-dither braille. Formations cycle through moving lanes, + argyle, orbiting paired tiles, and a perspective muster. A fade separates the + formation field from sandboxes; those grow into blinking creatures and then + braille wireframes. Canvas strokes are approximated with terminal cells. +- `set_scene` starts or reverses a transition at the current position. Each + adjacent phase takes three seconds. Skipping phases traverses intermediate + phases; reaching any destination takes at most twelve seconds. +- The caller supplies elapsed `Duration` through `advance`. Render is pure: + repeated state/geometry/palette produces the same frame. There is no RNG or + hidden wall clock. The scenery clock wraps after 24 hours to keep numerical + inputs bounded; a continuously displayed background can change at that boundary. +- Pause by stopping `advance`; discard elapsed paused time when resuming. + `set_reduced_motion(true)` freezes all scenery, including blinking and formation + changes, and makes scene changes immediate. Consumers own preference detection. +- Choose a measured frame budget for the intended terminal size, and redraw only + for input or resize when paused/reduced. The example uses a 40 ms frame budget + and blocking input polling when idle. Rendering costs O(visible cells), with + at most eight procedural field samples per cell and no retained frame history. +- Unicode uses single-column geometric glyphs and 2×4 braille sampling. Use + `.ascii(true)` for fonts or terminals without those glyphs. This policy belongs + to the consumer and is independent of the palette. +- The default palette uses `Theme::default().surface` and muted foreground. + `MotionPalette::from_theme(theme)` accepts caller-provided terminal styles; + it does not invent a background. `MotionPalette::nori()` explicitly opts into + the reference's RGB ink `#0a0f0c`, green `#7dd6a0`, and pale highlights. Only + use that art palette when true color is suitable; compose foreground copy with + explicit contrasting colors, as the example does. Custom palettes expose + `surface`, `ink`, and `highlight` styles. RGB colors are blended and quantized + into sixteen intensity steps; other palettes use their supplied ink and dimming. + +## Bare zoom storybook and profiling + +The focused example now contains only a continuous Dots ↔ Formations zoom, three +seconds in each direction, with no text or UI. `--muster` selects perspective +muster; otherwise it uses platoon. `MotionBackground::formation` accepts +`MotionFormation::{Cycle, Platoon, Muster}`. The default remains `Cycle`, so +existing consumers keep the ambient sequence. Pinning a formation replaces only +the formation selector/fade; the field formulas remain the same. + +From `nori-rs/`: + +```console +cargo run --release -p nori-tui-components --example motion_storybook +cargo run --release -p nori-tui-components --example motion_storybook -- --muster +``` + +Space pauses, `s` freezes at a repeatable 80%-zoom frame, and `q`, Escape, or +Ctrl-C restores the terminal and quits. `--still` starts at the dot endpoint. +`--fps` configures cadence (25 by default). `--frames N --profile PATH` records +live timing without on-screen counters, writing CSV after terminal restoration. +`--bench --size WIDTHxHEIGHT --profile PATH` measures widget, diff/encoding, and +buffer reset without terminal I/O. See the +[profiling guide](../../nori-rs/tui-components/examples/motion_storybook/README.md) +and [measurement report](../performance/motion-background/report.md). + +## Verification + +`cargo test -p nori-tui-components` covers all five reusable scenes, transitions, +determinism, reduced motion, clipping, quiet regions, styles, glyph widths, and +ASCII fallback. The example snapshots dots, 80% zoom, and braille endpoints for +both fixed variants at 100×34 and 36×20, and tests reversal/overshoot behavior. +Its opt-in tmux case checks the actual full-screen frame through the shared +[storybook capture workflow](../../nori-rs/tui-components/examples/README.md). diff --git a/nori-rs/tui-components/Cargo.toml b/nori-rs/tui-components/Cargo.toml index 96045d072..86d3028c5 100644 --- a/nori-rs/tui-components/Cargo.toml +++ b/nori-rs/tui-components/Cargo.toml @@ -46,3 +46,7 @@ path = "examples/picker_storybook/e2e.rs" [[test]] name = "storybook_nori" path = "examples/nori_storybook/e2e.rs" + +[[test]] +name = "storybook_motion" +path = "examples/motion_storybook/e2e.rs" diff --git a/nori-rs/tui-components/DESIGN.md b/nori-rs/tui-components/DESIGN.md index 27e854187..01cecfb3e 100644 --- a/nori-rs/tui-components/DESIGN.md +++ b/nori-rs/tui-components/DESIGN.md @@ -229,6 +229,23 @@ callers can reserve an exact-height region before placing the pane. ## Verification +### Full-screen motion art + +`MotionBackground` is an explicitly requested decorative layer for a caller-owned +alternate screen. Its default palette follows terminal surface and muted-text +tokens. The opt-in `MotionPalette::nori()` is a bounded exception to the neutral +surface and functional-accent rules: it reproduces the Motion Suite reference's +dark RGB background and green procedural scenery. It must not change semantic +styles in unrelated widgets. Foreground text on that explicit dark surface must +use contrasting colors; the motion storybook supplies them. Keep forms unboxed, +titles left-aligned, key hints left-aligned, and focus accents compact. + +Reserve a quiet rectangle and soft surrounding falloff for foreground content. +Reduced motion must stop every animation, including idle movement and blinking, +and switch scenes instantly. Provide ASCII and terminal-theme fallback policies. +Terminal ownership, credentials, login actions, and redraw scheduling remain in +the consumer; this component only paints scenery. + 25. Snapshot every component at representative wide and narrow widths. 26. Snapshot both densities and loading, empty, error, disabled, and selected states where they apply. diff --git a/nori-rs/tui-components/README.md b/nori-rs/tui-components/README.md index 692495474..df9feb498 100644 --- a/nori-rs/tui-components/README.md +++ b/nori-rs/tui-components/README.md @@ -19,6 +19,8 @@ The v0 surface contains: in caller-positioned side or bottom regions; - width-aware Markdown rendering with adaptive table layouts; - semantic themes, messages, empty states, and key hints; +- deterministic animated scenery for alternate-screen onboarding and login, + with five motion scenes, a quiet content region, and reduced-motion support; - one canonical fullscreen design storybook plus focused component examples. The enforceable visual contract lives in [`DESIGN.md`](DESIGN.md). @@ -60,6 +62,7 @@ cargo run -p nori-tui --features storybook --example status_card_storybook cargo run -p nori-tui-components --example picker_storybook cargo run -p nori-tui-components --example markdown_storybook cargo run -p nori-tui-components --example component_storybook +cargo run -p nori-tui-components --example motion_storybook ``` `status_card_storybook` lives in `nori-tui` because it renders the CLI's own @@ -70,6 +73,14 @@ status view: `v` switches between the compact welcome block and the full Press `q` or `Esc` to leave an example. In picker examples, active search owns printable keys and the first Escape, so deactivate search before quitting. +The motion storybook is now a bare scene 1 ↔ 2 zoom loop with no text or UI +layers. `-- --muster` selects the muster destination, Space pauses, and `q` +quits. Use `--release` for an optimized build. Its +[profiling guide](examples/motion_storybook/README.md) documents repeatable CPU +and live-terminal measurements; the +[motion integration guide](../../docs/reference/motion-background.md) describes +the reusable API. + ## Storybook E2E snapshots Each storybook has neighboring E2E tests that drive the real example through diff --git a/nori-rs/tui-components/docs.md b/nori-rs/tui-components/docs.md index c42da34c9..6dc142549 100644 --- a/nori-rs/tui-components/docs.md +++ b/nori-rs/tui-components/docs.md @@ -74,6 +74,18 @@ consumer application ### Core Implementation +- [`MotionBackground`](src/motion/) renders caller-controlled procedural scenery + inside a clipped rectangle. `MotionState` owns deterministic elapsed time and + interruptible scene transitions; reduced motion freezes the field and switches + scenes immediately. `MotionPalette` defaults to terminal-compatible muted + styles, with an explicit Nori RGB art palette. A quiet area clears space for + foreground forms, which callers draw afterward. The focused + [`motion_storybook`](examples/motion_storybook.rs) now runs only the bare Dots ↔ Formations transition, with a pinned platoon + or muster destination and example-only profiling instrumentation. + `MotionFormation` selects Cycle (the compatible default), Platoon, or Muster. See the + [integration guide](../../docs/reference/motion-background.md) for API contracts, + timing, accessibility, and capture controls. + - `MenuItem` pairs a stable caller key with label and optional description, explicit character or number shortcuts, availability/current metadata, and semantic consequence tone. `MenuState::try_new` validates the aggregate diff --git a/nori-rs/tui-components/examples/README.md b/nori-rs/tui-components/examples/README.md index f4064a227..d407529ec 100644 --- a/nori-rs/tui-components/examples/README.md +++ b/nori-rs/tui-components/examples/README.md @@ -11,6 +11,12 @@ test-only; it is not exported by `nori-tui-components`. ## Prerequisites +The focused `motion_storybook` is a bare scene 1 ↔ 2 zoom loop, with no text +or UI. The E2E case presses `s` to freeze an 80%-zoom frame before capture; +`--still` instead starts at the dot endpoint. Buffer snapshots cover both fixed +formation variants at wide and narrow sizes. Its +[profiling guide](motion_storybook/README.md) describes headless and live timing. + Install tmux and jq, and use a compatible checkout of [`CSRessel/skills`](https://github.com/CSRessel/skills/tree/414aa5123b81c682f9e5372b377d262853fdfb53). The referenced commit is the shared baseline for the tmux and Ghostty Web diff --git a/nori-rs/tui-components/examples/motion_storybook.rs b/nori-rs/tui-components/examples/motion_storybook.rs new file mode 100644 index 000000000..992359ebf --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook.rs @@ -0,0 +1,106 @@ +//! Bare full-screen scene 1 <-> 2 zoom. No text or UI overlays. +#[path = "motion_storybook/profile.rs"] +mod profile; +#[path = "motion_storybook/story.rs"] +mod story; +#[allow(dead_code)] +mod support; + +use std::time::Duration; +use std::time::Instant; + +use anyhow::Result; +use crossterm::event; +use crossterm::event::Event; +use crossterm::event::KeyCode; +use crossterm::event::KeyEventKind; +use crossterm::event::KeyModifiers; +use profile::Options; +use profile::Sample; +use story::Story; +use support::StorybookTerminal; + +fn main() -> Result<()> { + let options = Options::parse()?; + if options.bench { + return profile::bench(&options); + } + let mut terminal = StorybookTerminal::enter()?; + let mut story = Story::new(options.muster); + let mut paused = options.still; + let mut previous = Instant::now(); + let period = Duration::from_secs_f64(1.0 / options.fps); + let mut dirty = true; + let mut frame_number = 0; + let mut samples = Vec::new(); + loop { + let now = Instant::now(); + let delta = now.duration_since(previous); + if dirty || (!paused && delta >= period) { + if !paused { + story.advance(delta); + } + previous = now; + let mut sample = Sample { + frame: frame_number, + phase: story.phase(), + zooming_in: story.zooming_in, + interval: delta, + ..Sample::default() + }; + let start = Instant::now(); + terminal.terminal.draw(|frame| { + let area = frame.area(); + sample.width = area.width; + sample.height = area.height; + let start = Instant::now(); + frame.render_widget(story.widget(), area); + sample.widget = start.elapsed(); + })?; + sample.total = start.elapsed(); + sample.output = sample.total.saturating_sub(sample.widget); + if options.output.is_some() { + samples.push(sample); + } + frame_number += 1; + dirty = false; + if options.frames.is_some_and(|limit| frame_number >= limit) { + break; + } + } + // Preserve the previous example's start-to-start cadence for measurement. + let wait = if paused { + Duration::from_millis(250) + } else { + period.saturating_sub(previous.elapsed()) + }; + if !event::poll(wait)? { + continue; + } + match event::read()? { + Event::Key(key) if key.kind == KeyEventKind::Press => { + if matches!(key.code, KeyCode::Esc | KeyCode::Char('q')) + || (key.code == KeyCode::Char('c') + && key.modifiers.contains(KeyModifiers::CONTROL)) + { + break; + } + match key.code { + KeyCode::Char(' ') => paused = !paused, + KeyCode::Char('s') => { + story = Story::new(options.muster); + story.advance(Duration::from_millis(2400)); + paused = true; + } + _ => continue, + } + previous = Instant::now(); + dirty = true; + } + Event::Resize(_, _) => dirty = true, + _ => {} + } + } + drop(terminal); // Restore the alternate screen before writing profiling data. + profile::save(&options, &samples) +} diff --git a/nori-rs/tui-components/examples/motion_storybook/README.md b/nori-rs/tui-components/examples/motion_storybook/README.md new file mode 100644 index 000000000..8fbb31bd8 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/README.md @@ -0,0 +1,61 @@ +# Bare zoom storybook + +The example paints only the background: scene 1 (dots) zooms into scene 2 +(braille formations) for three seconds, then reverses for three seconds, +continuously. There are no text overlays, cards, menus, headers, or footers. + +From `nori-rs/`: + +```console +cargo run --release -p nori-tui-components --example motion_storybook +cargo run --release -p nori-tui-components --example motion_storybook -- --muster +``` + +The default destination is the moving platoon formation. `--muster` pins the +perspective muster instead of waiting for the ambient formation cycle. The +animation clock continues through each reversal. Geometry and sampling formulas +are unchanged by this profiling pass. + +Hidden development keys: Space pauses, `s` freezes a repeatable 80%-zoom frame, +and `q`, Escape, or Ctrl-C quits. `--still` starts paused at the dot endpoint. +The default cadence remains 25 FPS; `--fps 60` changes the requested cadence. + +## Profile + +Live timing uses the actual terminal size and writes CSV only after leaving the +alternate screen. `--frames` makes the run finite. The example does not display +timing counters over the animation. + +```console +cargo run --release -p nori-tui-components --example motion_storybook -- --muster --frames 750 --profile /tmp/motion-live.csv +``` + +For a repeatable CPU/encoder baseline without terminal I/O: + +```console +cargo run --release -p nori-tui-components --example motion_storybook -- --bench --size 200x60 --frames 300 --profile /tmp/motion-bench.csv +python3 tui-components/scripts/summarize-motion-profile.py /tmp/motion-live.csv /tmp/motion-bench.csv --output /tmp/motion-summary +``` + +Unset `NO_COLOR` and use `TERM=xterm-256color COLORTERM=truecolor` when comparing +colored terminal output. Build before collecting measurements and run cases +serially. Repeat with a debug build, both variants, and representative sizes. + +The benchmark warms one six-second loop, then measures a deterministic sequence +at the requested FPS without sleeping. It times widget rendering, the real lazy +Ratatui diff plus Crossterm ANSI encoding, and the inactive-buffer reset. It +counts changed cells, ANSI bytes, and calls to the sink's `Write` implementation +(these are **not** system calls). A separate warm-cache diff scan is recorded as +`diff_probe_us` and excluded from `total_us`; do not subtract it and label the +remainder an exact serialization measurement. + +Live `output_us` is everything in `Terminal::draw` outside the widget: resize +checks, diff, ANSI formatting, output writes/flush, cursor handling, and buffer +reset. `interval_us` is the actual start-to-start interval. These measure frame +production and PTY backpressure, not the graphical terminal's displayed FPS. +The summary excludes the first full repaint of each run, reports percentiles +and work over the requested frame budget, and separates three zoom-phase bands. + +[Measurements and recommendations](../../../../docs/performance/motion-background/report.md) +include the collected data and CPU profile. The component's broader API remains +in the [integration guide](../../../../docs/reference/motion-background.md). diff --git a/nori-rs/tui-components/examples/motion_storybook/e2e.rs b/nori-rs/tui-components/examples/motion_storybook/e2e.rs new file mode 100644 index 000000000..300a488a2 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/e2e.rs @@ -0,0 +1,56 @@ +#[path = "../support/e2e.rs"] +mod e2e; +#[allow(dead_code)] +mod story; + +use std::time::Duration; + +use anyhow::Result; +use e2e::TuiSession; +use e2e::assert_screen; +use pretty_assertions::assert_eq; +use ratatui::Terminal; +use ratatui::backend::TestBackend; + +#[test] +fn bare_zoom_snapshots() { + for (width, height) in [(100, 34), (36, 20)] { + for muster in [false, true] { + for (name, time) in [("dots", 0), ("zoom", 2400), ("braille", 3000)] { + let mut story = story::Story::new(muster); + story.advance(Duration::from_millis(time)); + let mut terminal = Terminal::new(TestBackend::new(width, height)).unwrap(); + terminal + .draw(|frame| frame.render_widget(story.widget(), frame.area())) + .unwrap(); + let variant = if muster { "muster" } else { "platoon" }; + insta::assert_snapshot!( + format!("{variant}_{name}_{width}x{height}"), + terminal.backend().to_string() + ); + } + } + } +} + +#[test] +fn loop_preserves_overshoot_and_reverses_at_both_endpoints() { + let mut story = story::Story::new(false); + story.advance(Duration::from_secs(3)); + assert_eq!((story.phase(), story.zooming_in), (1.0, false)); + story.advance(Duration::from_secs(3)); + assert_eq!((story.phase(), story.zooming_in), (0.0, true)); + story.advance(Duration::from_secs(7)); + assert_eq!((story.phase(), story.zooming_in), (1.0 / 3.0, true)); +} + +#[test] +#[ignore = "requires built storybooks and TUI_PUPPETEERING_DIR; run scripts/storybook-e2e.sh"] +fn bare_zoom_terminal() -> Result<()> { + let tui = TuiSession::start("motion_storybook", 100, 34)?; + tui.expect("·")?; + tui.key("s")?; + tui.expect("⠂")?; + assert_screen!(tui, "platoon_zoom_100x34"); + Ok(()) +} diff --git a/nori-rs/tui-components/examples/motion_storybook/profile.rs b/nori-rs/tui-components/examples/motion_storybook/profile.rs new file mode 100644 index 000000000..ea1d8205f --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/profile.rs @@ -0,0 +1,243 @@ +//! Example-only instrumentation. No per-cell timers or logging in the renderer. +use std::fs::File; +use std::hint::black_box; +use std::io; +use std::io::BufWriter; +use std::io::Write; +use std::path::PathBuf; +use std::time::Duration; +use std::time::Instant; + +use anyhow::Context; +use anyhow::Result; +use anyhow::ensure; +use ratatui::backend::Backend; +use ratatui::backend::CrosstermBackend; +use ratatui::buffer::Buffer; +use ratatui::layout::Rect; +use ratatui::widgets::Widget; + +use super::story::Story; + +pub struct Options { + pub muster: bool, + pub still: bool, + pub bench: bool, + pub output: Option, + pub frames: Option, + pub width: u16, + pub height: u16, + pub fps: f64, +} + +impl Options { + pub fn parse() -> Result { + let mut options = Self { + muster: false, + still: false, + bench: false, + output: None, + frames: None, + width: 120, + height: 40, + fps: 25.0, + }; + let mut args = std::env::args().skip(1); + while let Some(arg) = args.next() { + match arg.as_str() { + "--muster" => options.muster = true, + "--still" => options.still = true, + "--bench" => options.bench = true, + "--profile" => { + options.output = Some(args.next().context("--profile needs a CSV path")?.into()) + } + "--frames" => { + options.frames = Some(args.next().context("--frames needs a count")?.parse()?) + } + "--fps" => options.fps = args.next().context("--fps needs a rate")?.parse()?, + "--size" => { + let size = args.next().context("--size needs WIDTHxHEIGHT")?; + let (width, height) = + size.split_once('x').context("--size needs WIDTHxHEIGHT")?; + options.width = width.parse()?; + options.height = height.parse()?; + } + _ => anyhow::bail!( + "Unknown option {arg}. Options: --muster --still --fps N --frames N --profile FILE --bench --size WIDTHxHEIGHT" + ), + } + } + ensure!( + options.fps.is_finite() && (1.0..=240.0).contains(&options.fps), + "FPS must be between 1 and 240" + ); + ensure!( + options.width > 0 && options.height > 0, + "Viewport must be nonempty" + ); + ensure!( + options.frames.is_none_or(|count| count > 0), + "Frame count must be positive" + ); + ensure!( + options.output.is_none() || options.frames.is_some() || options.bench, + "Live profiling requires --frames to bound recording memory" + ); + ensure!( + !options.bench || options.output.is_some(), + "--bench requires --profile FILE" + ); + ensure!( + !options.still || options.frames.is_none(), + "--still cannot be combined with --frames" + ); + Ok(options) + } +} + +#[derive(Default)] +pub struct Sample { + pub frame: i32, + pub width: u16, + pub height: u16, + pub phase: f64, + pub zooming_in: bool, + pub interval: Duration, + pub widget: Duration, + /// Live: draw minus widget; bench: actual lazy diff + Crossterm encoding. + pub output: Duration, + pub reset: Duration, + pub total: Duration, + /// Extra scan for attribution only; excluded from total. + pub diff_probe: Option, + pub changed: Option, + pub bytes: Option, + pub writes: Option, +} + +pub fn save(options: &Options, samples: &[Sample]) -> Result<()> { + let Some(path) = &options.output else { + return Ok(()); + }; + let mut file = + BufWriter::new(File::create(path).with_context(|| format!("create {}", path.display()))?); + writeln!( + file, + "mode,variant,build,fps,frame,width,height,phase,direction,interval_us,widget_us,output_us,reset_us,total_us,diff_probe_us,changed_cells,ansi_bytes,write_calls" + )?; + let mode = if options.bench { "bench" } else { "live" }; + let variant = if options.muster { "muster" } else { "platoon" }; + let build = if cfg!(debug_assertions) { + "debug" + } else { + "release" + }; + for sample in samples { + let direction = if sample.zooming_in { "in" } else { "out" }; + let us = |duration: Duration| duration.as_secs_f64() * 1e6; + writeln!( + file, + "{mode},{variant},{build},{},{},{},{},{:.6},{direction},{:.3},{:.3},{:.3},{:.3},{:.3},{},{},{},{}", + options.fps, + sample.frame, + sample.width, + sample.height, + sample.phase, + us(sample.interval), + us(sample.widget), + us(sample.output), + us(sample.reset), + us(sample.total), + sample + .diff_probe + .map(|d| format!("{:.3}", us(d))) + .unwrap_or_default(), + sample.changed.map(|n| n.to_string()).unwrap_or_default(), + sample.bytes.map(|n| n.to_string()).unwrap_or_default(), + sample.writes.map(|n| n.to_string()).unwrap_or_default() + )?; + } + file.flush()?; + Ok(()) +} + +#[derive(Default)] +struct CountingSink { + bytes: i64, + writes: i64, +} + +impl Write for CountingSink { + fn write(&mut self, bytes: &[u8]) -> io::Result { + self.bytes += bytes.len() as i64; + self.writes += 1; + black_box(bytes); + Ok(bytes.len()) + } + + fn flush(&mut self) -> io::Result<()> { + Ok(()) + } +} + +/// Uses the real widget, lazy Ratatui diff iterator, and Crossterm encoder. +/// The sink counts bytes and Write calls; it deliberately does no OS I/O. +pub fn bench(options: &Options) -> Result<()> { + let area = Rect::new(0, 0, options.width, options.height); + let mut previous = Buffer::empty(area); + let mut current = Buffer::empty(area); + let mut sink = CountingSink::default(); + let step = Duration::from_secs_f64(1.0 / options.fps); + let frames = options.frames.unwrap_or(750); + let mut samples = Vec::with_capacity(frames as usize); + let mut story = Story::new(options.muster); + // One full loop warms code, allocator and buffers. Reset the simulated clock + // afterward so measured traces have identical phases across runs/builds. + let warmup = (options.fps * 6.0).ceil() as i32; + for frame in -warmup..frames { + if frame == 0 { + story = Story::new(options.muster); + previous.reset(); + current.reset(); + } + let mut sample = Sample { + frame, + width: area.width, + height: area.height, + phase: story.phase(), + zooming_in: story.zooming_in, + ..Sample::default() + }; + let start = Instant::now(); + story.widget().render(area, &mut current); + sample.widget = start.elapsed(); + let start = Instant::now(); + let mut changed = 0; + let bytes = sink.bytes; + let writes = sink.writes; + { + let mut backend = CrosstermBackend::new(&mut sink); + backend.draw(previous.diff_iter(¤t).inspect(|_| changed += 1))?; + Backend::flush(&mut backend)?; + } + sample.output = start.elapsed(); + sample.changed = Some(changed); + sample.bytes = Some(sink.bytes - bytes); + sample.writes = Some(sink.writes - writes); + // A separate, warm-cache diff-only scan estimates its share of output. + // Do not subtract it and present the remainder as an exact encoder cost. + let start = Instant::now(); + black_box(previous.diff_iter(¤t).count()); + sample.diff_probe = Some(start.elapsed()); + let start = Instant::now(); + previous.reset(); + std::mem::swap(&mut previous, &mut current); + sample.reset = start.elapsed(); + sample.total = sample.widget + sample.output + sample.reset; + if frame >= 0 { + samples.push(sample); + } + story.advance(step); + } + save(options, &samples) +} diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_braille_100x34.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_braille_100x34.snap new file mode 100644 index 000000000..b6b1def69 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_braille_100x34.snap @@ -0,0 +1,38 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +expression: terminal.backend().to_string() +--- +"⠝⠁⠕⠔⠝⠕⠝⠕⠝⠁⠅⠔⠕⠕⠝⠕⠝⠑⠁⠔⠕⠕⠝⠅⠍⠕⠁⠔⠕⠕⠝⠅⠝⠕⠁⠔⠕⠕⠝⠕⠝⠕⠁⠔⠕⠅⠝⠕⠝⠕⠁⠐⠕⠅⠝⠕⠝⠕⠅⠐⠕⠕⠕⠕⠝⠕⠅ ⠝⠕⠕⠕⠝⠕⠅⠁⠝⠕⠕⠕⠝⠕⠅⠅⠙⠕⠕⠕⠝⠅⠕⠅⠙⠕⠕⠕⠝⠕⠕⠅" +"⠝⢕⠍⠕⠝⠕⠉⠅⠕⢕⠝⠕⠍⢕⠕⢁⠕⢅⠝⢕⠝⠕⠍⠕⠁⠔⠝⢅⠝⠕⠕⢕⠍ ⠝⢕⠕⢅⠝⢕⠝⠅⠁⢕⠝⢕⠕⠅⠝⢕⠁⠐⠅⢕⠝⠕⠝⢅⠝ ⠙⢕⠅⢕⠝⢕⠝⢅⠁⠑⠝⢕⠍⠕⠝⢕⠅⠁⠕⢕⠝⢕⠍⢕⠕⢄⠙⠅⠝⢕⠕⠕⠍⢔⠍⠑⠝⢅⠝⠕" +"⠝⠕⠝⠁⠕⠔⠕⠕⠝⠕⠕⠕⠉⠁⠕⠕⠝⠕⠕⠕⠍⠕⠁⠔⠝⠕⠕⠕⠝⠕⠕⠁⠁⠕⠕⠕⠝⠕⠝⠕⠝ ⠝⠕⠝⠕⠝⠅⠝⠕⠁ ⠝⠕⠝⠅⠝⠕⠝⠅⠁⠕⠝⠅⠕⠕⠝⠅⠕⠄⠙⠅⠕⠕⠝⠅⠕⠕⠅⠁⠕⠕⠝⠕⠕⠕⠝⠔⠅⠑⠝⠕⠕⠕⠝⠕⠕⠄⠙⠑" +"⢉⢄⢝⢕⢝⢕⢕⢕⢝⠕⢉⢄⢝⢕⢝⢕⢕⠕⢍⠕⠁⢄⢝⠕⢝⢕⠝⢕⢝⠕⠁⢀⠝⢕⢕⢕⢝⢕⢝⢕⠁⢀⢝⢕⢕⢕⢝⢕⢝⢕⠁ ⢝⢕⠕⢕⢝⠕⢕⢕⠅ ⢝⢕⢝⢕⠝⢕⢕⢕⢅ ⢝⢕⢝⢕⢝⢕⢕⢕⢅⠁⠕⢕⢝⠕⢝⢕⠝⢕⢅⠁⠑⢕⠝⢕⢕⢕⢝⢕" +"⢕⠕⢕⢕⢕⢕⠕⠁⢁⢔⢕⢕⠕⢅⢕⠕⢅⠕⠁⢀⠕⢕⢕⢕⢕⢕⠕⢕⠕ ⢕⢕⢕⢕⠕⢕⢕⠕⢕⠅⠁⢕⢕⢕⢕⢅⢕⢕⠕⢕⠁ ⢕⢕⢕⢕⠕⢕⢕⠕⢕ ⠑⢕⢕⢕⢕⢕⢕⢕⠕⢄⠁⠑⢕⢕⢕⢅⠕⢕⢕⠕⢅⠁⠕⢕⢕⢕⢕⢕⢕⢕⠕⢄⠑⠕⢕⢕⢕⢕" +"⠝⢕⢕⢅⠝⢁⢕⢔⢝⢕⠕⢅⢝⠕⢍⠕⠉⢀⠕⢅⢝⢕⢝⠕⢝⢕⢕⠅⠁⢔⢝⢕⢕⠕⢝⢅⢝⢕⠝ ⢑⢕⢝⠕⢝⢅⢝⢕⠕⢕⠁ ⢝⢅⢝⢕⢕⢕⠝⢕⢝⢅⠁⢑⢕⢕⢝⢕⠝⢅⢝⢕⢕ ⠙⢕⢝⢅⠝⢕⢕⢕⢝⢕⢅⠁⠝⢕⢕⢕⢝⠕⢝⢕⢝⢄⠁⠑⢝⢕" +"⢝⠕⠉⢀⠕⢕⠕⢅⢝⢕⢝⠕⢍⠕⠉⢀⢕⢕⠝⢅⠝⢕⢝⢕⢝⠕⠁⢀⢕⢕⢝⢅⠝⢕⠝⢕⢝⢕⠁ ⢝⢅⢝⢕⢝⢕⠝⢕⠕⢕⠁ ⢝⠅⢝⢕⢝⢕⢕⢕⠕⢕⠅ ⢝⢅⢝⠕⢕⢕⢕⢕⢝⢕⠅ ⠝⢅⢝⢕⢕⠕⢝⢕⢝⢕⢅⠁⠝⢕⠕⢕⢝⢕⢝⠕⢝⢕⢅⠁" +"⠁⠄⠕⠅⠝⠕⠝⠕⠝⠕⠍⠕⠉ ⠕⠕⠕⠕⠕⠅⠝⠅⠝⠕⠝⠁⠁⠕⠝⠕⠕⠕⠕⠕⠝⠕⠝⠅⠁⠐⠝⠕⠝⠕⠝⠕⠕⠕⠕⠕⠁ ⠝⠕⠝⠅⠝⠕⠝⠕⠝⠕⠕ ⠑⠕⠝⠕⠝⠕⠝⠕⠝⠅⠝⠄⠁⠑⠕⠕⠕⠕⠝⠕⠝⠕⠝⠕⠅⠁⠝⠅⠝⠕⠕⠕⠕⠕⠝⠕" +"⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ " +"⢕⠄⢕⠄⢕⠄⢅⢄⠁ ⢅⢄⢅⢄⢅⢄⢅⢄⢅⢄⢅⢄⠁ ⢅⢄⢅⢄⢕⢄⢕⢄⢕⢄⢕⢄⠁ ⢕⢄⢕⢄⢕⢄⢕⢄⢕⢄⢕⢄⠁ ⢕⢄⢕⢄⢕⢄⢕⢄⠕⢄⠕⢄⠁ ⠕⢄⠕⢄⠕⢄⠕⢄⠕⢄⠕⢄⠁ ⠕⢄⠕⢄⠕⢄⠕⢄⠕⢄⠕⢄⠁ ⠕⢄⢕⢄⢕⢄" +"⢝⠕⢝⠕⢍⢕⠝⠁⢁⢔⢝⢕⢝⢕⢝⢕⠝⢕⠝⢕⠝⠁⠁⢔⢝⢕⢝⢅⢝⢅⢝⢅⢝⢅⢝⠕⠁ ⢝⠕⢝⢕⢝⢕⢝⢕⢝⢕⢝⢕⠁ ⠑⢕⠕⢕⠕⢕⠕⢕⢕⢕⢕⢕⢅ ⠁⢕⢕⢕⢕⢕⢕⢕⢝⠕⢝⠕⢝⢄⠁⠑⢝⢕⢝⢕⢝⢅⢝⢅⠝⢅⠝⢄⠁⠁⠝⢕⢝⢕" +"⢕⠕⢅⢕⠕⠁⢁⢔⠕⢕⠕⢕⢕⢅⢕⢅⢕⢕⢕⠕⠁ ⢕⢕⢕⢕⢕⢕⢕⢕⠕⢕⠕⢕⢕⠁⠁⢔⢕⢅⢕⢅⢕⠕⢕⢕⢕⢕⢕⢕⠁ ⠑⢕⠕⢕⢅⢕⢕⢕⢕⢕⢕⢕⢕⠄⠁ ⢕⢅⢕⢕⢕⢕⠕⢕⠕⢕⢕⢕⢅ ⠑⢕⢕⢕⢕⠕⢕⢕⢕⢕⢕⢅⠕⢄⠁⠁⠕⢕" +"⠍⢕⠝⠁⠁⢔⠝⢅⠝⢅⠝⠕⠕⠕⠕⢕⠝⢕⠍ ⠁⢔⠝⢕⠝⢅⠝⠅⠝⠕⠕⢕⠕⢕⠅ ⠁⢕⠝⢕⠝⢕⠝⠅⠝⠅⠝⢕⠝⢕⠁ ⠑⢕⠅⢕⠝⢕⠝⠕⠝⠅⠝⢅⠝⢕⠁ ⠙⢕⠕⢕⠅⠕⠕⠕⠝⢕⠝⢅⠝⢅⠁ ⠙⢕⠝⢕⠝⠕⠅⠕⠕⢕⠝⢕⠝⢄⠁⠁" +"⠝⠁⠁⢄⢝⢕⢕⢕⢕⠕⢝⢕⢝⢕⠝⢕⢝⠁⠁⢀⢕⠕⢕⢕⢕⢕⠝⢕⢝⢕⢝⢅⢝⠕⠁ ⢕⢕⠕⢕⠝⢕⢝⢕⢝⢅⢝⢕⢝⢕⠁ ⠑⢕⢝⢕⢝⢕⢝⢅⢝⢕⢝⢕⠕⢕⢅ ⠁⢕⢝⠕⢝⢅⢝⢕⠝⢕⢕⢕⢕⢕⢕⠄⠁⠑⢝⢅⠝⢕⢝⢕⢝⢕⢅⠕⢕⢕⢝⢄" +"⠁⢄⠝⢕⠕⠕⠝⢕⠝⢕⠝⢕⠝⢕⠝⠕⠁ ⠑⢕⠝⢕⠝⢅⠝⠕⠕⢕⠕⢕⠝⢕⠝⠁⠁⢀⠝⢕⠕⢕⠕⢕⠝⢕⠝⢕⠝⢕⠝⢕⠁ ⠑⢕⠝⢕⠝⠅⠝⢕⠝⢕⠕⢕⠕⢕⠝⠄⠁ ⠝⢕⠝⢕⠕⢕⠕⠕⠝⢅⠝⢕⠝⢕⠅ ⠁⠕⠝⢕⠝⢅⠝⢕⠝⢕⠝⢕⠕⢕" +"⢕⢕⢕⢕⢝⢕⠝⢕⢝⢕⢕⠕⢕⢕⠝ ⠁⢄⢝⢕⢕⢕⢕⢕⠝⢕⢝⢅⢝⠕⢕⢕⠅ ⠁⢕⢝⢅⢝⢕⢕⢕⠕⢕⢝⢕⢝⠅⢝⢕⠁ ⠁⢕⢝⢕⢝⢕⢝⢕⠕⢕⢕⢕⢝⠅⢝⢕⠁ ⠑⢕⢕⢕⢝⢅⢝⢕⠝⢕⢕⢕⢕⠕⢝⢄⠁ ⠙⢕⢕⢕⢕⢕⢝⢅⠝⢕⢝⢕" +"⠝⢕⠝⢕⠝⢕⠕⠕⠝⢕⠝⢕⠝⠅⠁ ⠕⢕⠝⢕⠝⢅⠝⠕⠕⢕⠍⢕⠝⢕⠝⠕⠁ ⠑⢕⠝⢕⠝⠕⠝⢕⠕⢕⠝⢕⠝⠅⠝⢕⠁ ⠁⢕⠝⠅⠝⢕⠝⢕⠕⢕⠝⠕⠝⢕⠝⢕⠅ ⠁⠑⠝⢕⠝⢕⠕⢕⠕⠕⠝⢅⠝⢕⠝⢕⠕ ⠁⠁⠝⢕⠝⢕⠕⠕⠝⢕⠝⢕" +"⠝⢅⢝⠕⢕⢕⠝⢕⢝⢅⢝⠕⠁ ⠁⢔⢝⢕⢕⢕⢕⢕⠝⢕⢝⠕⢕⢕⠝⢕⢝⠁⠁ ⢕⢕⠍⢕⢝⢅⢝⢕⢕⢕⠝⢕⢝⠅⢝⢕⠁ ⠁⢕⢝⠅⢝⢕⠕⢕⢝⢕⢝⢕⢝⢕⠕⢕⢝⠄⠁ ⠝⢕⢕⢕⢝⠕⢝⢕⠝⢕⢕⢕⢝⢅⢝⢕⠅ ⠁⠕⢝⢅⠝⢕⢝⢕⢕⠕" +"⠕⠕⠍⠕⠝⠅⠝⠕⠕⠕⠝⠁⠁ ⠕⠕⠝⠕⠝⠅⠝⠕⠕⠕⠝⠕⠝⠕⠕⠕⠍ ⠁ ⠝⠕⠕⠕⠝⠕⠝⠕⠝⠕⠕⠕⠝⠅⠝⠕⠁ ⠁⠕⠝⠕⠝⠕⠕⠕⠝⠅⠝⠕⠕⠕⠝⠕⠝⠕⠁ ⠑⠕⠝⠅⠝⠕⠝⠕⠕⠕⠝⠕⠝⠕⠕⠕⠝⠄⠁ ⠙⠕⠕⠕⠝⠕⠝⠕" +"⠕⢕⢕⢕⢕⢕⠕⢕⢕⠕⠁ ⢁⢕⢕⢅⢕⢕⢕⢕⢕⢅⢕⢕⢕⢕⢕⢕⢕⠕⠁ ⠁⢕⢕⠕⢕⢕⠕⢕⢕⢅⢕⢕⠕⢕⢕⢅⢕⢕⠁ ⠁⢕⢕⢕⢕⢕⢕⢕⢕⢕⢕⢕⢕⢕⢕⢅⢕⢕⢅ ⠁⠁⢕⢕⠕⢕⢕⠕⢕⢕⠕⢕⢕⢕⢕⢕⠕⢕⢅ ⠁⠁⠕⢕⢕⢕⢕⢕" +"⢕⢕⢝⢕⢝⢅⢝⢕⠉ ⠁⢄⢝⢕⢝⢕⢝⢅⢝⢕⢕⢕⢝⢅⢝⢕⢕⢕⢝⠁⠁ ⢕⢕⢝⢅⢝⢕⠕⢕⢝⢅⢝⢕⠕⢕⢝⢕⢝⢕⠁ ⠁⢕⢝⢕⠕⢕⢝⢕⢝⢕⠕⢕⢝⢕⢝⢕⠝⢕⢝ ⠁ ⠝⢕⢝⠕⢝⢕⠝⢕⢕⠕⢝⢕⠝⢕⢕⠕⢝⢕⠁ ⠁⠕⢝⢕⠝⢕" +"⠕⢅⢕⠕⢕⢕⠕⠁⠁ ⢕⢕⢕⢅⢕⢕⢕⢕⢕⢅⢕⢕⠕⢕⢕⢅⢕⢕⠕ ⠁ ⢕⢕⠕⢕⢕⢕⢕⢕⢕⢅⢕⢕⢕⢕⢕⢅⢕⢕⠁ ⠁⢀⢕⢕⠕⢕⢕⠅⢕⢕⠕⢕⢕⢅⢕⢕⢕⢕⢕⢅⠁ ⠁⢕⢕⢕⠕⢕⢕⢕⢕⢕⠕⢕⢕⠅⢕⢕⠕⢕⢕⢄⠁ ⠑⢕⢕⢅" +"⢕⢕⠝⢕⢝⠕⠁ ⠁⢔⢝⢕⢕⢕⢝⢅⢝⢕⠝⢕⢝⢕⢕⢕⠝⢕⢝⢕⠁ ⠁⢄⢝⢕⠕⢕⢝⢅⢝⢕⠝⢕⢝⢕⢕⢕⢝⢕⢝⢕⠁ ⠁ ⢝⢕⠕⢕⢝⢅⢝⢕⢝⢕⢝⢕⠝⢕⢝⠕⢝⢕⠅ ⠁ ⢝⢕⢕⢕⢝⢕⠝⢕⢕⠕⢝⢕⠝⢕⢝⢅⢝⢕⢅ ⠁ ⠝⢕" +"⠙⠁⠙⠑⠉ ⠁ ⠑⠑⠙⠑⠙⠑⠑⠑⠙⠁⠑⠑⠙⠑⠙⠑⠑⠑⠙⠁⠁ ⠁⠑⠙⠑⠑⠑⠙⠑⠙⠑⠑⠑⠙⠁⠙⠑⠙⠑⠙⠑⠁ ⠁ ⠙⠑⠁⠑⠙⠑⠙⠑⠙⠑⠙⠑⠑⠑⠙⠁⠙⠑⠙ ⠁ ⠑⠑⠙⠁⠙⠑⠁⠑⠙⠑⠙⠑⠙⠑⠙⠑⠑⠑⠙⠁⠁ ⠁⠑" +"⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ " +"⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ " +"⠕ ⠁ ⢕⢅⢕⠅⢕⢅⢕⢅⢕⢅⠕⢅⢕⢅⠕⢅⢕⠅⢕⢅⢕⠅⠁ ⠁⢅⢕⢅⠕⢅⢕⢅⢕⢅⢕⠅⢕⢅⢕⢅⢕⢅⠅⢅⢕⢅⠁ ⠁ ⢕⢅⢕⠅⢕⢅⢕⢅⢕⢅⠕⢅⢕⢅⠕⢅⢕⠅⢕⢅⢕ ⠁ ⠑⢅⢕⢅⠕⢅⢕⢅⢕⢅⢕⠅⢕⢅⢕⢅⢕⢅⠕⢅⢕⢄" +"⠁ ⠁⢄⢝⢕⠝⢕⢝⢕⢕⢕⢝⠕⢕⢕⢝⢅⢕⢕⢝⢅⢝⢕⠝ ⠁ ⠑⢕⢝⢕⢕⢕⢝⠕⢕⢕⢝⢅⢝⢕⢝⢕⢝⢕⠕⢕⢝⢕⠁ ⠁ ⢝⢕⢝⠅⢝⢕⢝⢕⢝⢕⢅⢕⢝⢕⠕⢕⢝⢕⠝⢕⢝⢅⠁ ⠁⠑⢝⢕⢕⢕⢝⢕⢕⢕⢝⢕⠝⢕⢝⢅⠝⢕⢝⢅⢝⢕" +"⠁ ⢕⢕⢝⢕⢕⢕⢝⢅⢝⢕⠝⢅⢝⢕⠝⢕⢝⢕⠝⢕⢝⢕⠁ ⠁ ⢕⢕⢝⠅⢕⢕⢝⢅⢝⢕⢝⢕⢝⢕⠝⢕⢝⢕⠕⢕⢝⢕⠁ ⠁ ⢕⢕⢝⠅⢝⢕⢝⠅⢝⢕⢝⢕⢝⢕⢕⢕⢝⢕⠕⢕⢝⢕⠅ ⠁ ⠝⢕⢝⢅⢝⢕⢝⠅⢝⢕⢕⠕⢝⢕⢅⢕⢝⢕⢕⢕" +"⠁⢅⢕⢕⠅⢅⢕⢕⠕⢕⢕⢕⢕⢕⢕⠕⢕⢕⢕⠕⢕⢕⢕⠅⠁ ⠁⢀⢕⢕⢕⢅⢕⢕⢕⢅⢕⢕⠕⢅⢕⢕⠕⢅⢕⢕⠕⢕⢕⢕⠁ ⠁ ⠕⢕⢕⢕⢕⢕⢕⢅⢕⢕⢕⠅⢕⢕⢕⠅⢕⢕⢕⢅⢕⢕⢕ ⠁ ⠑⢕⢕⢕⢕⢕⢕⢕⠕⢕⢕⢕⠕⢕⢕⢕⠕⢕⢕⢅" +"⢕⢕⢝⢅⢕⢕⢝⢅⢝⢕⢝⢅⢝⢕⢝⢅⢝⢕⢝⢕⢝⢕⠝ ⠁ ⠁⢕⢝⢕⠝⢕⢝⢕⠍⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠁ ⠁ ⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⢝⢕⢝⢅⢝⢕⢝⢅⢝⢕⢝⢅⠁ ⠁⠁⢝⢕⢝⠅⢝⢕⢝⠕⢝⢕⢕⠕⢝⢕⢕⠕⢝⢕" +"⢝⢕⠝⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠁ ⠁ ⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠁ ⠁ ⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠁ ⠁ ⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠝⢕⢝⢕⠝⢕" +"⢕⢅⢕⢅⢕⢅⢕⢅⢕⢅⢕⢅⢕⢅⢕⢅⢕⠅⢕⢅⢕⠅⠁ ⠁ ⢕⢅⢕⠅⢕⢅⢕⢅⢕⢅⢕⢅⠕⢅⢕⢅⠕⢅⢕⢅⠕⢅⢕⢅⠁ ⠁ ⠑⢅⢕⢅⠕⢅⢕⢅⠕⢅⢕⢅⠕⢅⢕⢅⢕⢅⢕⢅⢅⢅⢕⢅⢅ ⠁ ⠁⢅⢕⢅⢕⢅⢕⢅⢕⠅⢕⢅⢕⠅⢕⢅⢕⠅" +"⢕⢕⢝⢕⠕⢕⢝⢕⠝⢕⢝⢕⠝⢕⢝⢕⠝⢕⢝⢕⢝⠁⠁ ⠁⢄⢝⢕⢝⢅⢝⢕⢝⠅⢝⢕⢝⠕⢕⢕⢝⢕⢕⢕⢝⢕⠕⢕⢝⢕⠁ ⠁ ⠑⢕⢝⢕⠕⢕⢝⢕⢅⢕⢝⢕⢝⢕⢝⢕⢝⢕⢝⢕⢝⠅⢝⢕⢝⠄⠁ ⠁ ⢝⢕⢝⢅⠝⢕⢝⢕⠝⢕⢝⢕⠕⢕⢝⢕" diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_braille_36x20.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_braille_36x20.snap new file mode 100644 index 000000000..d5127f7dd --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_braille_36x20.snap @@ -0,0 +1,24 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +expression: terminal.backend().to_string() +--- +"⠝⠕⠁⠔⠕⠕⠝⠕⠝⠕⠁⠔⠕⠅⠝⠕⠝⠕⠁⠐⠕⠅⠝⠕⠝⠕⠅⠐⠕⠕⠕⠕⠝⠕⠅ " +"⠍ ⠝⢕⠕⢅⠝⢕⠝⠅⠁⢕⠝⢕⠕⠅⠝⢕⠁⠐⠅⢕⠝⠕⠝⢅⠝ ⠙⢕⠅⢕⠝⢕⠝⢅" +"⠁⠕⠕⠕⠝⠕⠝⠕⠝ ⠝⠕⠝⠕⠝⠅⠝⠕⠁ ⠝⠕⠝⠅⠝⠕⠝⠅⠁⠕⠝⠅⠕⠕⠝⠅" +"⠝⢕⢕⢕⢝⢕⢝⢕⠁⢀⢝⢕⢕⢕⢝⢕⢝⢕⠁ ⢝⢕⠕⢕⢝⠕⢕⢕⠅ ⢝⢕⢝⢕⠝⢕" +"⢕⢕⠕⢕⢕⠕⢕⠅⠁⢕⢕⢕⢕⢅⢕⢕⠕⢕⠁ ⢕⢕⢕⢕⠕⢕⢕⠕⢕ ⠑⢕⢕⢕⢕⢕" +"⢕⠕⢝⢅⢝⢕⠝ ⢑⢕⢝⠕⢝⢅⢝⢕⠕⢕⠁ ⢝⢅⢝⢕⢕⢕⠝⢕⢝⢅⠁⢑⢕⢕⢝⢕" +"⠝⢕⠝⢕⢝⢕⠁ ⢝⢅⢝⢕⢝⢕⠝⢕⠕⢕⠁ ⢝⠅⢝⢕⢝⢕⢕⢕⠕⢕⠅ ⢝⢅⢝⠕" +"⠕⠕⠝⠕⠝⠅⠁⠐⠝⠕⠝⠕⠝⠕⠕⠕⠕⠕⠁ ⠝⠕⠝⠅⠝⠕⠝⠕⠝⠕⠕ ⠑⠕⠝⠕" +"⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ " +"⢕⢄⢕⢄⠁ ⢕⢄⢕⢄⢕⢄⢕⢄⢕⢄⢕⢄⠁ ⢕⢄⢕⢄⢕⢄⢕⢄⠕⢄⠕⢄⠁ ⠕⢄" +"⢝⢅⢝⠕⠁ ⢝⠕⢝⢕⢝⢕⢝⢕⢝⢕⢝⢕⠁ ⠑⢕⠕⢕⠕⢕⠕⢕⢕⢕⢕⢕⢅ ⠁⢕" +"⠕⢕⢕⠁⠁⢔⢕⢅⢕⢅⢕⠕⢕⢕⢕⢕⢕⢕⠁ ⠑⢕⠕⢕⢅⢕⢕⢕⢕⢕⢕⢕⢕⠄⠁ " +"⠕⢕⠅ ⠁⢕⠝⢕⠝⢕⠝⠅⠝⠅⠝⢕⠝⢕⠁ ⠑⢕⠅⢕⠝⢕⠝⠕⠝⠅⠝⢅⠝⢕⠁ " +"⢝⠕⠁ ⢕⢕⠕⢕⠝⢕⢝⢕⢝⢅⢝⢕⢝⢕⠁ ⠑⢕⢝⢕⢝⢕⢝⢅⢝⢕⢝⢕⠕⢕⢅ " +"⠝⠁⠁⢀⠝⢕⠕⢕⠕⢕⠝⢕⠝⢕⠝⢕⠝⢕⠁ ⠑⢕⠝⢕⠝⠅⠝⢕⠝⢕⠕⢕⠕⢕⠝⠄" +"⠅ ⠁⢕⢝⢅⢝⢕⢕⢕⠕⢕⢝⢕⢝⠅⢝⢕⠁ ⠁⢕⢝⢕⢝⢕⢝⢕⠕⢕⢕⢕⢝⠅⢝⢕" +"⠁ ⠑⢕⠝⢕⠝⠕⠝⢕⠕⢕⠝⢕⠝⠅⠝⢕⠁ ⠁⢕⠝⠅⠝⢕⠝⢕⠕⢕⠝⠕⠝⢕⠝⢕" +"⠁ ⢕⢕⠍⢕⢝⢅⢝⢕⢕⢕⠝⢕⢝⠅⢝⢕⠁ ⠁⢕⢝⠅⢝⢕⠕⢕⢝⢕⢝⢕⢝⢕⠕⢕" +"⠁ ⠝⠕⠕⠕⠝⠕⠝⠕⠝⠕⠕⠕⠝⠅⠝⠕⠁ ⠁⠕⠝⠕⠝⠕⠕⠕⠝⠅⠝⠕⠕⠕⠝⠕" +"⠁⢕⢕⠕⢕⢕⠕⢕⢕⢅⢕⢕⠕⢕⢕⢅⢕⢕⠁ ⠁⢕⢕⢕⢕⢕⢕⢕⢕⢕⢕⢕⢕⢕⢕⢅" diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_dots_100x34.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_dots_100x34.snap new file mode 100644 index 000000000..fe1445202 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_dots_100x34.snap @@ -0,0 +1,38 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +expression: terminal.backend().to_string() +--- +" · · ··· · · · · ∘∘∘∘∘∘∘·· ········· ·∘∘○○○∘∘··" +" · · · · · ··· · · · · · ····∘···· " +" " +"· ········· · · · · · · · ····· · · · · · · · ········" +"·· ·∘∘∘∘∘·∘·· · · · ··∘∘∘∘∘·∘ · ····∘∘∘∘∘" +"∘·· ∘∘○○○○○∘∘·· · · · · · ··∘∘○○○○○∘· · · · · · · · ··∘·∘∘○○○∘" +"∘∘ ··∘∘○○○∘∘·· · · · · ∘∘○○●●●○○·· · · · · · ··∘∘∘∘○∘∘" +"∘·· ··∘∘○∘∘∘∘·· · · · · · ··○○○○●○○∘∘ · · · · · · · · · · · ··∘∘∘∘∘·" +" · · · · · ······· · · ·" +" · · · · · · " +" ··∘·∘·∘·· · · · · ····· · · ··· · ······∘···· · · ··∘·∘·∘·∘··" +"· · ··○○○○●○○∘· ····∘···· ··∘·∘∘∘·∘·· ·∘∘∘○∘∘·∘·· ··∘∘○∘○∘○∘· · · ······· ∘∘●○●○○∘∘·" +" · ∘∘○○○○○∘∘· ··∘···· · ··∘·∘···· ··∘○○○○∘∘·· ··∘∘○∘∘∘∘· · ··· · ··○○●●●○○∘∘" +"· · ··∘∘○∘○∘∘·· ··∘∘∘·∘·· · ····∘······ ∘∘●●●○○∘∘·· ····∘∘∘∘∘·· · ····· · ∘∘○○○○○∘∘·" +" · ··∘·∘·∘·· ······· · · · · · ··○○○○○∘∘·· ······· · · · ∘∘∘∘∘·∘··" +"· · · · · · · · · · · · ····∘···· · · · · · · · · · · " +" " +"· · · · · · ··· · ······· · ··∘∘∘∘∘∘∘·· ······· · " +"·· · · · · ·∘∘∘∘∘···· ∘∘∘∘∘∘∘·· ·∘○●●●○○∘∘· ··∘∘○∘∘∘∘··" +"∘·· ········· ∘∘○○●○○∘∘·· ·∘○○●○○∘∘·· · · · · · · · · ∘∘○○●●●○○∘· ·∘○●●●○○∘∘·" +"·· · ····· ··○○●●●○○·· ·∘○●○●○○∘∘ ∘∘○∘○∘○∘∘ ··○○●●●○○∘∘" +"· · ······· ∘∘●●●○○∘∘·· ·∘○∘○○○∘∘·· · · · ··∘∘∘∘∘·∘·· ∘∘○○●○○∘∘·" +" · ········ · ······· · · ······· " +" · · · " +" · · · ··· · · · · ······· · · · " +"· · ··∘·∘∘∘·· ··∘∘∘∘∘·· · · ····· · · · ··· · ··∘∘○∘○∘∘·· ··∘∘∘∘∘∘∘·· · · · " +"·· ··∘∘○∘○∘∘·· ··○○○○○∘∘·· ······· · · · · · ··∘∘○∘∘·∘·· ·∘∘○○○○○∘∘· · " +"··· ∘∘○○●○○∘∘·· ∘∘●●●○○∘∘·· ··∘·∘·∘·· · · · · · · · ··∘∘∘∘∘∘∘·· ∘∘○○●●●○○∘∘ · · · · " +" · ·∘∘○○○∘∘·· ··∘∘○∘○∘∘·· ······· · · · ······· ∘∘○○●○○∘∘·· " +" · ········· · ········· · · · · · · · · · ····∘·∘···· " +" " +" · ······· · · · ······· · · · · · · · · · ··∘·∘·∘···· · ····· " +" ··∘·∘···· ····∘·∘·· ······· · ······· ∘∘○∘○∘○∘∘ ·∘∘∘∘∘····" +" ··∘∘○∘○∘∘·· · ··∘·∘·∘·· ··∘∘∘∘∘···· · ··∘·∘·∘·· ·∘○○●○●○○∘· ∘∘○○●○○∘∘·" diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_dots_36x20.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_dots_36x20.snap new file mode 100644 index 000000000..bef9934c5 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_dots_36x20.snap @@ -0,0 +1,24 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +expression: terminal.backend().to_string() +--- +" ∘∘○○○○○∘○·· · · · " +" ····∘·∘···· · · " +" " +" · ······· · ······· · · ··∘·" +" ··∘·∘···· ∘∘∘∘∘·∘·· ··∘∘○" +" ··∘·∘∘∘·∘·· ∘∘○○○○○∘∘·· ··∘∘○∘" +" ········· ··○○●●●∘∘∘∘ ··∘·∘" +" · ······· · ∘∘○○●○○∘∘·· ····" +" ······· " +" " +" ······· " +" ··○∘○∘○∘∘·· · · · · " +" ·∘∘○○○∘∘∘∘ " +" ∘∘○○●○○∘∘·· · · · · " +" ··∘∘○∘○∘∘·· " +" ········· · · · " +" " +" · · · · · · ····∘·" +" · · · · · · · ··∘∘∘" +" ········· · · · ······· ··∘∘○∘" diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_100x34.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_100x34.snap new file mode 100644 index 000000000..66cddd254 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_100x34.snap @@ -0,0 +1,38 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +expression: terminal.backend().to_string() +--- +" ⠑ ⠑ ⠁⠑⢁⠄⠅⠄⠅⢅⠅⠁⠅⠅⠇⠄⠁⠄⠅⠅⠁⠄⠁⠄⠑⠅⠁⠄⠁⠄⢁⢀⠑ ⢁⢐⢁ ⢑⠑⠑ ⠁⢕⠁⠅⠄⠄⠁⠁⠅⠄⠇⠅⠅⠄⠁ ⠅⠅⠅⠕⢑⠄⠑⢤⠁⠄⠑⢀ ⢰⠑⢐⠁ ⠁⢄⠕⢄⠅⠄⠕⠅⠅⠄⠅⠄⠅⠄⠁⠁⠅⠅⠅⠁" +"∘⠄·⢰·⠐∘⢄○ ·⠄·⠄·⠄·⠅·⠅·⠅· ·⠅·⠅·⢅·⠑·⠄○⢀∘⠬○⠘·⢀· ∘⢄∘ ∘⠄ ⠅·⠅·⠄ ·⠅·⠄·⠄·⠄·⠄∘⠄∘⠔·⠐∘⢀· ·⢀∘⠤∘ ·⠄∘⠁·⠅·⠅·⠅·⠄·⠅·⠅" +"⠁·⠑ ∘⠑⢤⠍∘⠁ ⠅·⠅⠄⠅·⠁⠅⠅ ⠅⠅⠁·⠅⠅⠁·⠥⠅ ·⠁ ⠁∘⠁ ⠁∘⠑⠄⠕·⠅⠄⠁·⠅⠄⠅∘⠅⠅⠁ ⠁⠅⠁·⠅⠅⠁ ⠁⠄⠕○⠑⠱⠁·⠁ ⠁·⠱⠄⠑·⠑ ⠝·⠅⠅⠁·⠁⠅⠅ ⠅⠄⠅·⠅⠄" +"· ○⠠○⠠·⠍∘⠄∘⠁∘⠄∘⠄·⠁·⠅ ⠄·⠅·⠅·⠅∘⠅·⠅∘⠄○ ● ○⠠○ ○ ∘ ∘⠅∘ ·⠄· ·⠅·⠅·⠅·⠅·⠅·⠡·⠅●⠤· · · · ∘⠤○⠁· ·⠅·⠄·⠅·⠅·⠁·⠅·⠄·⠄" +"⠉⠠ ⠈⠡⠈⠁⠤⠁⠍⠉⠅⠅⠅⠅⠁⠁⠅⠅⠅⠅⠅⠅⠅⠅⠅⠁⠅⠅⠅⠅⠥⠅⠄⠉⠄⠁ ⠁⠄⠁⠁⠅⠁⠁⠥⠅⠅⠁⠅⠅⠄⠁⠅⠁⠅⠅⠅⠅⠁⠅⠄⠅⠅⠁⠅⠁ ⠉ ⠡⠠⠁⠠⠁ ⠄⠉ ⠅⠅⠅⠅⠁⠄⠁ ⠁⠄⠅⠄⠅⠅⠅⠁" +"· ·⠨○⠄·⠁·⠄·⠄ ⠅∘⠅ ·⠅·⠄·⠄·⠅·⠅·⠅●⠅∘⠥·⠈○⠈○ ·⠠·⠄∘⠅○⠅∘⠅ ⠅· ·⠄·⠅·⠅·⠁·⠅∘⠄○⠥○⠄○⠄●⠈∘ ∘⠠·⠤· ○⠥∘⠄∘⠅·⠅·⠅·⠄·⠄ ⠅·⠅" +"⠁ ⠉ ●⠉⠥⠄∘⠅⠄⠅·⠅⠄⠅·⠅⠅⠁·⠅⠄⠅·⠅⠅⠅ ⠁⠤⠥·⠁⠌⠉ ⠡⠠ ○⠁ ⠁∘⠍⠅⠁·⠁⠅⠁·⠁⠅⠅ ⠅⠅⠅·⠅⠄⠁·⠁⠅⠁∘⠉⠅⠉∘⠈ ⠉·⠁⠍⠉ ⠅⠁⠁○⠄⠁⠁·⠁⠅⠅ ⠅⠁⠅ ⠁⠁" +"● ∘⠠· ∘ ·⠄·⠁○⠅·⠅·⠅ ⠁ ⠄ ⠅·⠅ ⠄·⠅·⠅○⠅○⠉●⠠∘ ○⠈● ●⠄∘⠅·⠅·⠁·⠄ ⠄·⠅ ⠅·⠅ ⠅∘⠅○⠅∘⠄○⠅· ∘ · ○⠁○⠅ ⠄∘ ·⠁·⠅·⠅·⠄ ⠁·⠄ ⠁" +"⠈⢀ ⠠ ⠉⢀⠁ ⠄⠁⠁⠁ ⠁⠄⠁⠅⠅⠅⠅⠅⠁⠅⠅⠅⠁⢅⠁⠤⠁⠄ ⢄⠈ ⠐ ⠁ ⠄⠅⠅⠄ ⠁⠅⠄⠅⠁⠅⠅⠅⠅⠅ ⠅⠄⠅⠤⠅⠅⠅⠤⠁ ⠁⠠⠁⠠⠠⠠⠁ ⠉⠁⠅ ⠅⠄⠅⠄⠅⠅⠅⠄⠁⠅⠁⠅⠅⠄⠁⠁" +"○ ·⢈∘ · ∘ ∘⠁∘⠁·⠄·⠅·⠅·⠅·⠅·⠄·⠅·⠄○⠕·⠁○⠥ ⠐·⢀·⠈∘⠔∘⠉○⢀∘⢅∘⠅·⠅·⠅·⠅·⠅·⠅·⠄ ⠁·⢕○⠄∘⢅∘⠄●⠈· ⢤·⠐∘⢔∘⠄·⠅·⠅·⠅·⠅·⠅·⠄·⠅" +"⠑○⠘⠐⢙∘⢑⢤⢅·⠕⢀⠅·⠅⠅ ·⠁⠁⠅ ⠅⠄⠅·⠕⠄⠉·⢁⢄⢰·⠁⠐⢀· ⠈⠐∘ ⢔⠑○⠁⢄⠄·⠁ ⠁ ⠅⠁⠁ ⠁⠅⠅·⠁⠅⠅·⠁⢅⠕·⢁⠔⢁·⠁⢐⠐·⠑⢀ ⠁⢄⢕·⢔⠁⠁·⠁⠅⠅ ⠁⠅⠅·⠅⠅" +"·⢐∘⢀·⢐·⠑∘⢁·⠅·⠄·⠁·⠅·⠄ ⠁·⠄·⠄·⠅·⠅∘⠄·⢔○ ∘⠈∘ ·⠐·⢁·⠐·⠄·⠔ ⠅·⠄·⠅·⠄·⠄·⠅·⠁·⠄ ⢑·⢄·⠁·⠐∘⢐·⢐ ⢐·⢀ ⠕∘ ·⠁·⠄·⠄·⡅·⠄ ·⠄" +"⠑⢐⢑⢀⠐ ⠑ ⢁ ⠕⠅⠑⠄⠁⠄⠁⠄⠁ ⠁⠅⠅⠅⠁ ⠑⠕⠁⢐⠑⠄⠁ ⠑ ⢀⢀⢑ ⠑⢀⢑⢐⢑⢄⠑⠔⠑⢔⠁⠅⠑⠅⠅⡀⠅⡄⠁⠄⠁⠅⠁⠅⠁⠅ ⠔⠑⢔⢅ ⠁⢐⢁⢐⢑⠐⠑⢄⢑⢀ ⠁⢑⢁⠑⠁⠁ ⠁⠄⠅⠅⠃⠄⠁ ⠁⠁" +"·⢐· ⢀·⢀ ⢀·⢄· · ⠁·⠄ ⢀· ⢀·⢀· ⠐ ⢀·⢐ ⠐·⢀ ⠐·⠄ ⢐·⠄ ·⠅ ·⠁·⠄·⢀ ·⠐ ⢀·⠐ ⠐· ⠐· ·⠄ ⢐·⢀ ·⠁ · ·⡁" +"⢐ ⢑⠐⢁·⠁⠐⠑ ⠑ ⠑ ⠑ ⠃ ⠄⠁ ⠁ ⠁ ⠁⢀⢑ ⢁⢀⢁ ⠐⢐⢑ ⢑⢐⠑·⢁⠐⢑ ⢑⢀⠑ ⠁ ⠃ ⠁ ⠁ ⠁ ⠑ ⠁ ⠁⠐⢑ ⠁⢀⢑ ⠑⢀⢁ ⠁⠐⠑ ⠑⢐ ⠁⢀⠑ ⠁⡀⠁ ⠁ ⠁ ⠁ " +"·⢀ ·⢐·⢐·⢐· · ⡀ ⠄· ·⢀ ⢐·⢀·⠐ ⠐ ⢀· ⠐·⢐ ⢀· ·⢐·⢀ ·⡀·⡀· · · · ·⢀ · ⢀· ·⢀·⢐ · · · ⠄·⡀ " +"⠁⢀⠁⢀⢑⢐⢀⢔⠑⠔⠑⠄⠑⠄⠐ ⠁⠆⠃ ⡁⠁⠁ ⠁ ⠁⠄⠁⠄⢑ ⠐⠐⢐ ⢑⢐⠑ ⢑⢀⠑⢀⠁⢀⠑⠔⠁⢄ ⠁⠄⠃ ⠃ ⠁⠄⠇ ⠁⠄⠑⢐⢁⠐⢐ ⢑⢀⠁⢐⢐ ⢑ ⠑⢀⠑ ⠑ ⠑ ⠁ ⠁⠄⠃⠄⠁⠄⠑⠄" +"∘⠐∘ ·⢐·⢑·⢀·⠄ ⠄·⠄· · ·⠄ ·⠕· · ·⢀∘⠄· ·⠐ ⢐·⢔·⢀·⠐ · ⠄·⡅ ·⠅·⠄· ·⠄·⠐ · ·⢐∘⢀∘⢀·⢐·⢀·⢔ ⠐·⠄ ⠄ ⠄·⠆·⠄ ⠅· " +"⠁·⠑⢀⠑·⢑ ⢁ ⠁⠄⠅·⠅⠅⠅ ⠁ ⠁ ⠅⠅⠅·⠑⠁⠕·⠑⢔⢁ ⢁ ⠁·⢑ ⢑∘⠁⢔⠕∘⠁⠄⠁·⠁⠄⠁ ⠅⠅⠁ ⠁⠁⠁ ⠅⢄⠕·⠑⠔⠕·⢄ ⠁∘⠑ ⠁·⠑⢄⠑ ⢑ ⠑∘⠅⠔⠅· ⠁·⠇⠅⠅·⠅⠁" +"·⢐·⠰∘ ○⠁∘⠕∘⠔∘⠅∘⠁·⠁·⠅·⠁·⠁·⠄· ·⢁·⢁∘⠸·⠐∘⠜ ·⠐∘ ∘⢄∘⢕∘⠄·⠄·⠅·⠄·⠅· ·⠄·⠅∘⠅∘⢄· ·⠐·⠐∘⢀·⢸∘ ∘⢄·⠁·⠄·⠄∘⠄·⠅·⠅·⠄·⠅·⠄" +"⢁⢀⠁⠠⠁ ⠑⠥⠁⠄⠄ ⠁⠅⠁ ⠁⠄⠅⠅⠅⠄⠅⠅⠅⠅⠁⠅⠁⠁⠅ ⢕⠑⠐⠁⠔⠉⠠⠁ ⠙⠌⠙⠄⠁⠁⠁ ⠁⠅⠅⠅⠅⠅⠅⠄⠅⠁⠅⠅⠅⢅⠅⠤⠍⠅⠉⢉⠙⠄⠘⠄⠁⠌⠡⠠⠁⢠⠁⠄⠍ ⠅⠄⠑⠄⠁ ⠅⠅⠁⠄⠁ ⠁⠄⠁⠄" +"●⠠· ○⠉●⠄●⠁·⠅○⠁·⠁·⠅·⠅·⠅·⠅·⠅· ·⠅∘⠅·⠅○ ∘⠄○⢀·⠠○⠍·⠕∘⠄·⠅·⠅·⠄·⠁ ⠄·⠅·⠅· ·⠁·⠄∘⠵· ⠐○ · ∘⠈∘⠈∘⠥ ⠅∘⠅·⠅·⠅·⠅ ⠅ ⠄·⠄" +"⠁● ⠨ ∘⠠⠁ ·⠁ ⠅ ⠅⠄⠅ ⠄⠅⠅ ⠁⠅⠁ ⠅⠁⠅ ⠉⠅⠉·⠁⠠ ⠁⠠ ·⠩⠄⠁○⠅⠅⠅·⠅⠁⠁ ⠅⠄⠁ ⠅⠅⠅ ⠅⠅⠅·⠅⠁⠅·⠉ ⠁○⠁ ∘⠉ ∘⠁ ⠅· ⠅·⠁⠅⠅ ⠅⠅⠅ ⠅" +"· ⠈∘⠈∘⠅∘⠅·⠄·⠅∘⠁·⠅·⠅·⠁ ⠅· ∘⠅· · ∘⠁∘⠡● ∘ ∘ · ∘⠁·⠅·⠅·⠅·⠅·⠁·⠄ ·⠄·⠅·⠄·⠄○⠅∘⠄ ⠩● · ○⠠∘ ∘⠅·⠁∘⠅·⠅·⠅·⠄ ⠅·⠅·⠅" +"⠁⠠ ⠨ ⠁⠁⠅⠁⠅⠁⠅⠅⠅⠅⠅⠁⠅⠅⠅⠅⠅⠁⠅⠁⠅⠁ ⠄⠄⠄⠁⠄⠉⠬ ⠨⠤⠈ ⠁⠥⠁⠄⠅⠁⠁⠄⠄⠄⠅⠅⠁⠅⠄⠅⠅⠅ ⠄⠍⠉⠍⠡⠅ ⠁ ⠨⠨⠠⠁⠄⠍⠄⠍⠁⠁⠄⠅⠅⠅⠅⠅⠄⠅⠅⠅⠁⠅⠅⠅⠄" +"∘⠄○ ⠨∘⠤·⠁·⠥·⠅·⠅·⠅·⠁·⠅·⠄·⠅·⠄ ⠁○⠅·⠉·⠠∘⠈∘ ∘⠬∘⠄○⠬·⠅∘⠄·⠅ ⠄·⠄·⠅·⠅·⠅∘⠅·⠅·⠁∘⠅●⠥·⠡·⠠○ ·⠄∘⠤∘⠤·⠅∘⠅·⠅·⠅·⠅·⠅·⠅·⠅" +"⠁●⠈ ⠈○⠑⠅⠍·⠁⠁⠁·⠅⠅⠅ ⠅⠅⠅·⠅⠅⠅·⠅⠅⠁·⠅⠄⠁○⠁⢤ ∘⠁⠨⠉·⠡ ⠉∘⠁⠅⠁·⠅⠅⠄·⠅⠅⠅ ⠁⠅⠁ ⠁⠄⠁ ⠉⠅⠁ ⠩⠭⠡∘⠁⠈ · ⠅∘⠅⠤⠁○⠁⠄⠁·⠅⠅⠁ ⠅ ⠅ ⠁⠁" +"∘⠈·⢀·⠄· ·⠁·⠅∘ ·⠅·⠄·⠄·⠅ ⠅· ⠁·⠅·⢄○⢄●⠤○ ·⢘·⢀·⢀·⠅ ⠄·⠅·⠅·⠅·⠅·⠁·⠅·⠅·⠄·⠅·⠄·⠁○⢤● ∘ ∘ ●⢀∘⢄∘⠅·⠅ ⠄·⠄·⠄·⠅ ⠅·⠁·⠅" +" ⢐⢈⠘⠁⢤⢉⠔⠑⠅⠑⠅⠁⠄⠁⠅⠁⠁⠁⠄⠁⠁⠁⠄⠁⠅⠅⠅⠅⠥⠵⠄⠑⢄⠑⠝⠑⠄⢙⠐⠉⢀⢁⢔⠁⠝⠕⠔⠁⢀⠅⠁⠁⠅⠅⠁⠁⠅⠅⠅⠅⠅⠅⠅⠅ ⢍⠁⠑⠅⠉⢅⠱⢐⠑⢠⢐ ⠉ ⢑⠔⢑⠁⠁⠴⠕⠅⠅⠅⠅⠅⠅⠅⠅ ⠅⠅⠅⠅" +"· ·⢀·⢌∘⠁○⢁∘⠄·⠄·⠄·⠁·⠅·⡄·⠅ ·⠁·⢄∘⢄·⠄∘⠐·⠐·⢀· ·⠔·⢀∘⢅·⠅ ⠄·⠅·⠅·⠄·⠄·⠄·⠄∘⢅·⢐· ·⢐∘⢐· ·⢐∘⢕∘⠕ ⢄∘⠅·⢅·⠄ ⠁·⠅·⠅·⠄" +"⠑ ⢑ ⢁·⢑⢀⠑·⢑⢐⠁ ⠁⠅⠅ ⠁⠄⠅ ⠃⠅⠁ ⠁⠑·⠕⠐⠁·⠙⢄⢁·⠁⢀⢑·⢁ ⠁·⠑⢀⠕ ⠄⠄ ⠃⠅⠇ ⠁⠅⠁·⠅⢀⢑ ⠑⢕⠁∘⠁ ⠑·⠁⢐⢑·⢀⢀⠑·⠁⠐⠁·⠁⢐⠁ ⠁ ⠁ ⠁⠇⠁ ⠅⠅" +"·⠐·⢐· ·⢐·⢐·⠔· ·⠆ ⠄·⠁·⠅ ·⢐· ·⢀· ·⢐·⠐·⢐· ·⠄·⢀·⢐·⠕ · ·⠁ ⠁· ⠐·⢔·⢐·⢐·⢀·⠐·⢀·⢀·⢔·⢄·⠔·⠕· ·⠁·⠅· ·⠄· " +"⢑ ⠑⢐⠑⢐⢁⢀⠑⢔⠁ ⠁ ⠃⡄⠁⠆⠁ ⠁ ⠁ ⠁ ⠑⢄⢑ ⠁⢐⠑⢐⠁⢐⢁⢀⢑⢐⠑⢐⢐ ⠁ ⢔⠑⢐⠁ ⠁⡀ ⠁ ⠁⡀⠁ ⠁ ⠑ ⠑⢀⠁ ⢁⢐⢑⢐⢑⢐⢁ ⠑⢐ ⢀⠁⢐⠑⢀⠁⢁⠁ ⠑⡂⠁⠄⠁⠄⠁ ⠁ " +" ⠐·⢐ ⠐· ⢀·⠐ ⠐·⢀ · · · ⠐· ⢐· ⢀·⢀ ⢐·⢀ · · · ⠐· ·⢐ ⠐·⠐ ⠐·⢐ ⢐ ⠐ ⢀· · ⠂· · " diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_36x20.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_36x20.snap new file mode 100644 index 000000000..f6cfe3cfb --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_36x20.snap @@ -0,0 +1,24 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +expression: terminal.backend().to_string() +--- +"⠩⠅⠉⠭⠩⠠⠉ ⠁⠌⠡ ⠥⠄⠉⠅⠁⠅⠅⠁⠁⠄⠁⠄⠅⠅⠁⠅⠁⠅⠁⠅⠉⠅⠭⠅" +"∘⠄○⢌· ·⠐∘ ○⠁○ ∘⠅∘⠄·⠁∘⠄·⠁·⠅·⠅· ·⠄·⠤·⠅" +"⠁·⠉⠡⠁∘⠉⢀⠉·⠐⠄⠑ ⠝⢀⠑·⠑⠅⠅·⠁⠅⠅ ⠁⠅⠅·⠅⠄⠅·⠅⢕" +"●⢄·⠐∘⢀ ⠈· ·⢐∘⢥·⢄∘⠁· ·⠁·⠁·⠅·⠅·⠄·⠅·⠁·⢅" +"⠁⢐⠑ ⢑⠈⠐ ⠘⠐⠑⢁⠁⠐⢑⠄⠁⠔⠁⠅⠅⠄⠅⠅⠁⠄⠁⠄⠅⠅⠅⠁⠁⠄⢅⢑" +"· · ·⢀· ·⢀·⢐·⢅·⠔·⢔·⠅·⠅· ·⡅·⠄·⠅·⠅·⠅·⠔" +"⢑ ⠁⠐⢁ ⢑⢐⢐ ⠁⢀⢁·⠁⠄⠑ ⠑⠄⠁ ⠁⠅⠁ ⠁⠁⠁ ⠁·⠁⠐" +" ⢀ ⢐ ⢀ ⢐·⠐ ⠐ ⢀ ⠐ ⠐" +"⠐⢐ ⢀⠐ ⠐⠐⢐⢐⠐⢀⠐ ⠐⢐ ⢀ ⡀ ⡀⠂ ⠐ ⠐ " +"·⠐· ·⢐· ·⢀·⢀·⢀·⠔·⢄ ·⠄·⠄· · ·⠄· · ·⢐" +"⢁· ⠄⠐ ⢀⠐ ∘⠁⢔ ·⢁⠐⠑ ⠁·⠁⡅⠅ ⠅⠁·⠃ ⢁ ⠁⠐" +"·⠔∘ · ∘ ∘⠐·⢔∘⢅·⠄·⢅·⠄·⠅ ⠅·⠅·⠁·⠅·⠄·⠅·⠔" +"⠑⢸⠅⠐⢐⠜⠑ ⠁⠐⠁ ⠁⢄⠕⢕⠑⠄⠁⠄⠄⠅⠅⠄⠅⠅⠅⠄⠅⠄⠁⠅⠕⠅⠁⢄" +"·⢕·⠐∘⠔○⠠· ·⠈ ⠄·⠁ ·⠅ ⠅·⠅ ⠄·⠁·⠅·⢅∘⠤·⠅" +"⠅ ⠁·⠁⢀⠉●⠁⠍⠁∘⠁⠄⠁·⠅⠅⠅·⠁⠁⠅ ⠅⠅⠅·⠅ ⠁∘⠅⠄" +"○⠍∘⠠∘ ○⠠· ○⠄∘⠥∘⠅∘⠄·⠁·⠁·⠄·⠅·⠅·⠁·⠅○⠄·⠁" +"⠁⠁⠍⠥⠡ ⠉ ⠁⠄⠁ ⠁⠁⠉⠅⠁⠥⠁⠅⠁⠅⠅⠅⠁⠄⠅ ⠅⠄⠅⠅⠅⠄⠅⠅" +"∘⠄○⠄○⠬· ○⠤○ ∘⠥·⠄·⠁·⠄·⠄·⠅·⠅ ⠅·⠅·⠄·⠉" +"⠁∘⠍⠠⠁ ⠁ ⠉○⠁⠄⠅○⠉⠅⠅·⠁⠅⠁·⠅⠄⠅ ⠅⠅⠁·⠅⠅⠅ ⠁⠁" +"·⢬·⠤○⠄∘⠨○⠈○ ·⠄·⠅·⠅·⠅∘⠅·⠅·⠅·⠅·⠅·⠄∘⠅·⠅" diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_braille_100x34.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_braille_100x34.snap new file mode 100644 index 000000000..580657b9c --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_braille_100x34.snap @@ -0,0 +1,38 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +expression: terminal.backend().to_string() +--- +"⢅⢥⢅⢥⢅⠅⠁⠅⢁⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⠅⠁⠅⢁⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⠅⠁⠅⢁⢥⢅⢥⢅⢥⢅⢥⢅⢤⢅⢤⢅⢤⢅⠄⠁⠄⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁⠄⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁⠄⢁⢤" +"⠝⠝⠝⠝⠝⠅⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝" +"⢕⢥⢕⢥⢕⠅⠁⠅⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠅⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠅⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠄⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠄⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠄⢑⢥" +"⠝⠝⠝⠝⠝⠅⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝" +"⠑⠅⠑⠅⠑⠅⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠑⠅" +"⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁ " +"⢝⢽⢝⢽⢝⠅⠁⠅⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠅⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠅⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠄⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠄⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠄⢙⢽" +"⠕⠅⠕⠅⠕⠅⠁⠅⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠅⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠄⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠄⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠄⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁ ⠑⠅" +"⢝⢽⢝⢽⢝⠅⠁⠅⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠄⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠄⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠄⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠄⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁ ⢙⢽" +"⠕⠅⠕⠅⠕⠅⠁⠅⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠄⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠄⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠄⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠄⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁ ⠑⠅" +"⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁ ⠁ ⠁ ⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁ ⠁ ⠁ ⠁ " +"⠁⠅⢁⢥⢅⢥⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁⠄⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁⠄⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁⠄⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁ ⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁ ⢁⢤⢅⢤⢅⢤⢅⢤" +"⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁ ⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁ ⠙⠝⠝⠝⠝⠝⠝⠝" +"⠁⠄⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠄⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠄⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠄⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁ ⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁ ⢑⢥⢕⢥⢕⢥⢕⢥" +"⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁ ⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁ ⠙⠝⠝⠝⠝⠝⠝⠝" +"⠁⠄⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠁⠑⠁⠁ ⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠁ ⠑⠁⠑⠁⠑⠁⠑⠁" +"⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ " +"⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽" +"⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅" +"⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽" +"⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅" +"⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ " +"⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠅⠄⠁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠅⠄⠁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠅⠄⠁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠅ ⠁⢠⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠅ ⠁⢠⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤" +"⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠄⠁⠜⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠄⠁⠜⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠄⠁⠜⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅ ⠁⠘⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅ ⠁⠘⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝" +"⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠅⠄⠁⢤⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠅⠄⠁⢤⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠅ ⠁⢠⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠅ ⠁⢠⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠅ ⠁⢠⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥" +"⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠄⠁⠜⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠄⠁⠜⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅ ⠁⠘⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅ ⠁⠘⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅ ⠁⠘⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝" +"⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠁⠄⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠁⠑⠁⠁ ⠁ ⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠁ ⠁ ⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠁ ⠁ ⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠁ ⠁ ⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁" +"⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ " +"⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ " +"⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ " +"⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ " +"⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ " +"⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ " +"⢅⢤⢅⢤⢅⠄⠁⠄⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁ ⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁ ⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁ ⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁ ⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁ ⢁⢤" diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_braille_36x20.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_braille_36x20.snap new file mode 100644 index 000000000..6c39793a2 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_braille_36x20.snap @@ -0,0 +1,24 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +expression: terminal.backend().to_string() +--- +"⢅⢥⢅⢥⢅⠅⠁⠅⢁⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⠅⠁⠅⢁⢥⢅⢥⢅⢥⢅⢥⢅⢥" +"⠝⠝⠝⠝⠝⠅⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝" +"⢕⢥⢕⢥⢕⠅⠁⠅⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠅⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥" +"⠝⠝⠝⠝⠝⠅⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝" +"⠑⠅⠑⠅⠑⠅⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅" +"⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅" +"⢝⢽⢝⢽⢝⠅⠁⠅⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠅⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽" +"⠕⠅⠕⠅⠕⠅⠁⠅⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠅⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅" +"⢝⢽⢝⢽⢝⠅⠁⠅⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠄⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽" +"⠕⠅⠕⠅⠕⠅⠁⠅⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠄⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅" +"⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄" +"⠁⠅⢁⢥⢅⢥⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁⠄⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄" +"⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅" +"⠁⠄⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠄⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅" +"⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅" +"⠁⠄⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅" +"⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄" +"⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼" +"⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄" +"⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼" diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_dots_100x34.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_dots_100x34.snap new file mode 100644 index 000000000..fe1445202 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_dots_100x34.snap @@ -0,0 +1,38 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +expression: terminal.backend().to_string() +--- +" · · ··· · · · · ∘∘∘∘∘∘∘·· ········· ·∘∘○○○∘∘··" +" · · · · · ··· · · · · · ····∘···· " +" " +"· ········· · · · · · · · ····· · · · · · · · ········" +"·· ·∘∘∘∘∘·∘·· · · · ··∘∘∘∘∘·∘ · ····∘∘∘∘∘" +"∘·· ∘∘○○○○○∘∘·· · · · · · ··∘∘○○○○○∘· · · · · · · · ··∘·∘∘○○○∘" +"∘∘ ··∘∘○○○∘∘·· · · · · ∘∘○○●●●○○·· · · · · · ··∘∘∘∘○∘∘" +"∘·· ··∘∘○∘∘∘∘·· · · · · · ··○○○○●○○∘∘ · · · · · · · · · · · ··∘∘∘∘∘·" +" · · · · · ······· · · ·" +" · · · · · · " +" ··∘·∘·∘·· · · · · ····· · · ··· · ······∘···· · · ··∘·∘·∘·∘··" +"· · ··○○○○●○○∘· ····∘···· ··∘·∘∘∘·∘·· ·∘∘∘○∘∘·∘·· ··∘∘○∘○∘○∘· · · ······· ∘∘●○●○○∘∘·" +" · ∘∘○○○○○∘∘· ··∘···· · ··∘·∘···· ··∘○○○○∘∘·· ··∘∘○∘∘∘∘· · ··· · ··○○●●●○○∘∘" +"· · ··∘∘○∘○∘∘·· ··∘∘∘·∘·· · ····∘······ ∘∘●●●○○∘∘·· ····∘∘∘∘∘·· · ····· · ∘∘○○○○○∘∘·" +" · ··∘·∘·∘·· ······· · · · · · ··○○○○○∘∘·· ······· · · · ∘∘∘∘∘·∘··" +"· · · · · · · · · · · · ····∘···· · · · · · · · · · · " +" " +"· · · · · · ··· · ······· · ··∘∘∘∘∘∘∘·· ······· · " +"·· · · · · ·∘∘∘∘∘···· ∘∘∘∘∘∘∘·· ·∘○●●●○○∘∘· ··∘∘○∘∘∘∘··" +"∘·· ········· ∘∘○○●○○∘∘·· ·∘○○●○○∘∘·· · · · · · · · · ∘∘○○●●●○○∘· ·∘○●●●○○∘∘·" +"·· · ····· ··○○●●●○○·· ·∘○●○●○○∘∘ ∘∘○∘○∘○∘∘ ··○○●●●○○∘∘" +"· · ······· ∘∘●●●○○∘∘·· ·∘○∘○○○∘∘·· · · · ··∘∘∘∘∘·∘·· ∘∘○○●○○∘∘·" +" · ········ · ······· · · ······· " +" · · · " +" · · · ··· · · · · ······· · · · " +"· · ··∘·∘∘∘·· ··∘∘∘∘∘·· · · ····· · · · ··· · ··∘∘○∘○∘∘·· ··∘∘∘∘∘∘∘·· · · · " +"·· ··∘∘○∘○∘∘·· ··○○○○○∘∘·· ······· · · · · · ··∘∘○∘∘·∘·· ·∘∘○○○○○∘∘· · " +"··· ∘∘○○●○○∘∘·· ∘∘●●●○○∘∘·· ··∘·∘·∘·· · · · · · · · ··∘∘∘∘∘∘∘·· ∘∘○○●●●○○∘∘ · · · · " +" · ·∘∘○○○∘∘·· ··∘∘○∘○∘∘·· ······· · · · ······· ∘∘○○●○○∘∘·· " +" · ········· · ········· · · · · · · · · · ····∘·∘···· " +" " +" · ······· · · · ······· · · · · · · · · · ··∘·∘·∘···· · ····· " +" ··∘·∘···· ····∘·∘·· ······· · ······· ∘∘○∘○∘○∘∘ ·∘∘∘∘∘····" +" ··∘∘○∘○∘∘·· · ··∘·∘·∘·· ··∘∘∘∘∘···· · ··∘·∘·∘·· ·∘○○●○●○○∘· ∘∘○○●○○∘∘·" diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_dots_36x20.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_dots_36x20.snap new file mode 100644 index 000000000..bef9934c5 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_dots_36x20.snap @@ -0,0 +1,24 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +expression: terminal.backend().to_string() +--- +" ∘∘○○○○○∘○·· · · · " +" ····∘·∘···· · · " +" " +" · ······· · ······· · · ··∘·" +" ··∘·∘···· ∘∘∘∘∘·∘·· ··∘∘○" +" ··∘·∘∘∘·∘·· ∘∘○○○○○∘∘·· ··∘∘○∘" +" ········· ··○○●●●∘∘∘∘ ··∘·∘" +" · ······· · ∘∘○○●○○∘∘·· ····" +" ······· " +" " +" ······· " +" ··○∘○∘○∘∘·· · · · · " +" ·∘∘○○○∘∘∘∘ " +" ∘∘○○●○○∘∘·· · · · · " +" ··∘∘○∘○∘∘·· " +" ········· · · · " +" " +" · · · · · · ····∘·" +" · · · · · · · ··∘∘∘" +" ········· · · · ······· ··∘∘○∘" diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_100x34.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_100x34.snap new file mode 100644 index 000000000..e606b1e0a --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_100x34.snap @@ -0,0 +1,38 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +expression: terminal.backend().to_string() +--- +" ⠄⠐ ⠐ ⠐⢀⠄⠅⠄⠅⢅⠅⠅⠅⠅⠇⠄⠁⠄⠅⠅⠁⠄⠁⠄⠑⠁⠁⠄⠁⠄⢀⢄⠑⢀⢀⢐⢀ ⢑⠑⠑ ⢅⠅⠅⠄⠄⠁⠁⠅⠄⠇⠅⠅⠄⠁ ⠅⠅⠅⠅⢑⠄⠑⢤⠁⠄⠐⢀⠠⢰⠐⢐ ⠄⠕⢀⠄⠄⠕⠅⠅⠄⠅⠄⠅⠄⠁⠅⠅⠅⠅⠁" +"∘ ·⢰·⠐∘⢄○ ·⠄·⠄·⠄·⠅·⠅ ⠅·⠁·⠅·⠅·⢅·⠑·⠄○⢀∘⠬○⠘ ⢀· ∘⢄∘ ·⠄·⠅·⠅·⠄ ·⠅ ⠄·⠄·⠄·⠄∘⠄∘⠔ ⠐∘⢀·⠐·⢀∘⠄∘ ·⠅∘⠁·⠅·⠅ ⠅·⠄·⠅·⠅" +"⠁·⠑ ⠁∘⠑⢤⠍· ⠅·⠅⠄⠅·⠁⠅⠅·⠅⠅⠁·⠅⠅⠁·⠥⢅⠅·⠁⠄⠁∘⠁ ⠁∘⠑⠄⠕·⠅ ⠁·⠅⠄⠅∘⠅⠅⠁ ⠁⠅⠁·⠅⠅⠁ ⠁⠄⠕○⢑⠱⠁·⠁ ⠁·⠱⠄⠑·⠑ ⠝·⠅⠅⠁·⠁⠅⠅·⠅⠄⠅·⠅⠄" +"· ○⠠○⠠·⠍∘⠄∘⠁∘⠄∘⠄·⠁·⠅·⠄·⠅·⠅·⠅∘⠅·⠅∘⠄○ ● ○⠠○ ○ ∘ ∘⠅∘ ·⠄·⠁·⠁·⠅·⠅·⠅·⠅·⠁·⠅●⠤· · · · ∘⠤○⠁· ·⠅·⠄·⠅ ⠅·⠁ ⠅·⠄·⠄" +"⠉⠠⠁⠈⠡⠈⠁⠤⠁⠍⠉⠅⠅⠅⠅⠁⠁⠅⠅⠅⠅⠅⠅⠅⠅⠅⠁⠅⠅⠅⠅⠥⠅ ⠉⠄⠁ ⠁ ⠁ ⠁⠄⠁⠁⠅⠁⠁⠥⠅⠅⠁⠁⠅⠄⠁⠅⠁⠅⠅⠅⠅⠁⠅⠄⠅⠅⠁⠅⠁ ⠉ ⠡⠠⠁⠠⠁ ⠁⠄⠉ ⠅⠅⠅⠅⠁⠄⠁ ⠁⠄⠅⠄⠅⠅⠅⠁" +"· ·⠨○⠄·⠁·⠄ ⠄ ⠅∘⠅ ·⠅ ⠄·⠄ ⠁·⠅·⠅●⠅∘⠥·⠈○⠈○ ·⠠·⠄∘⠁○⠅∘⠅ ⠅ ⠄ ⠅·⠅ ⠁·⠅∘⠄∘⠥∘⠄○⠄●⠈∘ · ·⠠ ○⠥∘⠄∘⠅·⠅·⠅ ⠄ ⠅·⠅" +"⠁·⠉ ⠁●⠉⠤⠄∘⠅⠄⠅·⠅⠄⠅·⠅⠅⠁·⠅⠄⠅·⠄⠅⠅·⠁⠥⠥·⠡⠌⠉ ⠡⠠⠁○⠁ ⠁∘⠍⠅⠁·⠁⠅⠁·⠁⠅⠅·⠅⠅⠅ ⠁⠄⠁·⠁⠅⠁∘⠉⠅⠉∘⠉ ⠉·⠁ ⠉ ⠅⠁⠁○⠅⠁⠁·⠁⠅⠅·⠅⠅⠅ ⠁⠁" +"● ∘⠠· ∘ ∘⠄·⠁○⠅·⠅·⠅·⠁·⠅·⠅·⠅·⠄·⠅·⠅○⠅○⠍●⠠∘ ○⠈● ●⠄∘⠅·⠅·⠁·⠄ ⠄·⠅·⠅·⠅ ⠅∘⠅○⠅∘⠄○⠅· ∘ · ○⠁○⠅·⠄∘ ·⠅·⠅·⠅·⠄ ⠁·⠄ ⠁" +"⠉⢀⠉⠨⠁ ⠉⢀⠑ ⠁⠄⠁⠁⠁ ⠁⠄⠁⠅⠅⠅⠅⠅⠁⠅⠅⠅⠡⢅⠁⠤⠅⠄⠁⢍⠉ ⠁⠐⠑ ⠉ ⠅⠅⠅⠄⠁⠅⠅⠄⠅⠁⠅⠅⠅⠅⠅ ⠅⠄⠅⠤⠅⠅⠅⠤⠅⠄⠁⠠⠁⠠⠡⠠⠉ ⠉⠁⠅⠄⠅⠄⠅⠄⠅⠅⠅⠄⠁⠅⠁⠅⠅⠄⠁⠁" +"∘ ·⢈∘ · ∘⢀∘⠁·⠁·⠄·⠅·⠅ ⠅·⠅·⠄·⠅·⠄○⠕ ⠁○⠥ ⠐· ·⠈∘⠄∘ ○⢀∘⢅∘⠅·⠅·⠅·⠅·⠅ ⠅·⠄·⢁·⢕○⠄∘⠄∘ ●⠈ ·⢤ ⠐∘⠔∘⠄·⠅·⠅·⠅·⠅·⠅·⠄ ⠅" +"⠐○⠘⠐⠙·⢐⢤⢅·⠕⢀⠅ ⠅⠅ ·⠁⠁⠅ ⠅⠄⠁ ⠕⠄⠉ ⢁⢄⢰ ⠁⠐⢀· ⠈⠐∘ ⠐⠐○⠁⢄⠄ ⠁ ⠁ ⠅⠁⠁ ⠁⠅⠅ ⠁⠅·⠁⢅⠕· ⠐⢁· ⢐ ·⠑⢀ ⠁⢄⠕·⢔ ⠁ ⠁⠅⠅ ⠁⠅⠅·⠄⠅" +"·⢐∘⢀·⢔·⠑∘⢀·⠅·⠄·⠁· ⠄·⠅·⠄·⠄·⠅·⠅○⠄·⢔∘ ∘⠈∘ ·⠐·⢅·⠐·⠄·⠔·⠅· ⠅·⠄·⠄·⠅·⢁·⠄·⢑·⢄· ·⠐∘⢐∘⢰·⢐·⢀·⢕∘ ·⠁·⠄ ⠄·⡅·⠄·⠄·⠄" +"⠑⢐⢑⢀⠑ ⠑ ⢁ ⠕⠅⠑⠄⠁ ⠁⠄⠁ ⠁⠅⠁⠅⠁⠁⠑⠕⠁⢐⠑ ⠁ ⠑ ⢁⢀⢑ ⠑⢀⢑⢐⠑⢅⠑⠔⠑⢐⠁⠅⠁⠅⠅ ⠅⡅⠁⠄⠁⠅⠁⠅⠁⠅⠁⠔⠑⢔⢁ ⠁⢐⢁⢐⢑⠐⠑⢄⢑⢁⠕⠁⢑⢁⠑⠁ ⠁⠄⠅⠅⠃⠄⠁ ⠁⠅" +"·⢐· ·⢀·⢀·⢀·⢄· · ·⠁·⠄·⢀·⠄·⢀·⢀·⠄·⠐ ⢀·⢐·⠐·⢄·⠐·⠄·⢐·⠄ ⠅· ·⠁·⠄·⢀· ·⠐·⢀·⠐ ⠐· ·⠐· · ·⠄·⢐·⢀ · ·⠄·⠄·⡁" +"⢑ ⢑⠐⢁ ⠁⠐⠑ ⠑ ⠑ ⠑ ⠃ ⠁ ⠁ ⠁ ⠁⢀⢑ ⢁⢀⠁ ⠐⢐⢐ ⢑⢐⠑ ⢑⠐⢑ ⢑⢀⠑ ⠁ ⠁ ⠃ ⠁ ⠁ ⠁ ⠑ ⠁ ⠁⠐⢑ ⢀⢐ ⠑⢀⢁ ⠁⠐⠑ ⠑⢐⠑ ⠁⢀⠑ ⡀⠁ ⠁ ⠁ ⠁ " +"·⢀ ·⢐ ⢐·⢐ · ·⡀ · · ⢐·⢀ ⠐·⠐ ⢀· ⠐·⢐ ⢀· ⠐·⢀ ·⡀ · · · ·⢀ · ⢀· ⢀·⢐ · · · ·⡀ " +" ⢀ ⢀⢐⢐⢀⢐⠑⠐⠑⠄⠐⠄⠐ ⠁⠂ ⡁ ⠁ ⠑ ⠐⠐⢐ ⢐⢐⠑ ⠐⢀⠐⢀ ⢀⠐⠐⠁⠄ ⠁ ⠃ ⠄⠃ ⠐⢐⢁⠐⢐ ⢐⢀⠁⢐⢐ ⢀ ⠐ ⠐ ⠁ ⠂⠄⠁ ⠁⠄" +"∘⠐· ·⢐·⢑·⢀·⢄·⠄·⠄· ⠄·⠄·⠄·⢕·⠄·⠄·⢀∘⠄· ·⠐·⢐·⢔·⢄·⠐· ·⠅·⠄ ⠄ ⠄·⠅·⠄· ·⠄·⠔· · ·⢐∘⢀∘⢀·⢐·⢀∘⢔·⠔·⠄·⠄ ·⠆·⠄·⠅· " +" ·⠐⢀⠑·⢑ ⢁ ⠁⠄⠅·⠅⠅⠁ ⠁ ⠅⠅⠅ ⠁⠁⠅ ⠑⢕⢁ ⢁ ⠁·⢐ ⢑∘⠁⢔⠕∘⠁⠄⠁·⠁⠔⠁ ⠁⠁ ⠁ ⠁ ⠅⠄⠑·⠑⠔⠑·⢅ ⠁∘⠐ ⠁·⠑⢄⠑ ⢑ ⠑∘⠅⠄⠅· ⠁ ⠇⠅⠅ ⠅⠁" +"·⢐·⠰∘ ○⠁∘⠕∘⠕∘⠅∘⠁·⠁ ⠅·⠁·⠅·⠄· ·⢁·⢅∘⢼·⠐∘⠈ ·⠐∘ ∘⢄∘⢕∘⠄·⠄·⠅ ⠄·⠅·⠄·⠄·⠅∘⠅∘⢄· ·⠔·⠐∘⢀·⢸∘⠐∘⢄∘⠁·⠄·⠄∘⠄ ⠅·⠅·⠄·⠅·⠄" +"⢀⢀ ⠠⠁ ⠑⠄⠁⠄⠅⠁⠁⠅⠁ ⠁⠄⠄⠄⠅⠄⠅⠅⠅⠅⠁⠅⠁⠁⠅ ⠁⢕⠑⠐⠁⠄⠉⠠⠁ ⠙⠈⠉⠄⠁⠁⠁ ⠁⠅⠅⠅⠅⠅⠅⠄⠁⠁⠅⠅⠅⢅⠅⠤⠍⠅⠉⢉⠙⠅⠘⠄ ⠈⠡⠠⠁⠠⠁⠄⠍ ⠅⠄⠑⠄⠁ ⠅⠅⠁⠄⠁ ⠁⠄⠁⠄" +"●⠠· ○ ●⠄●⠁·⠅∘⠁·⠁·⠅·⠅ ⠅ ⠅·⠅ ·⠅∘⠅·⠁○ · ○ ⠠○⠅ ∘⠄ ⠅·⠅·⠄·⠁ ⠄ ⠅·⠅ ⠁·⠄∘⠵· ⠐○ · ∘⠈∘⠈·⠅ ⠅·⠁·⠁·⠅ ⠅ ⠅ ⠄ " +"⠁● ⠨ ○⠡⠁ ·⠁⠄⠅ ⠅⠄⠅ ⠄⠅⠅ ⠁⠅⠁·⠅⠁⠅·⠉⠅⠍∘⠁⠠⠁·⠁⠠ ·⠩⠄⠁○⠅⠅⠅·⠅⠁⠁ ⠅⠄⠁ ⠅⠅⠅·⠅⠅⠅∘⠅⠁⠥·⠉ ⠁○⠁ ∘⠉ ∘⠁ ⠅· ⠄⠅·⠁⠅⠅·⠅⠅⠅· ⠅" +"· ·⠈∘⠈∘⠅∘⠅·⠄·⠅∘⠁·⠅·⠅·⠁·⠅·⠄∘⠅·⠈·⠅∘⠅∘⠡● ∘ ∘⠄· ∘⠁·⠅·⠥·⠅·⠅·⠁·⠄ ·⠄·⠅·⠅·⠅○⠅∘⠄·⠩● ·⠈○⠠∘⠁∘⠅·⠁∘⠅·⠅·⠅·⠅ ⠅·⠅·⠅" +"⠁⠤⠁⠨⠁ ⠁⠁⠁⠅⠉⠅⠁⠅⠅⠅⠅⠅⠁⠅⠅⠅⠅⠅⠁⠅⠅⠅⠁⠄⠁⠄⠅⠄⠁⠄⠉⠬⠁ ⠩⠤⠉ ⠁ ⠅⠥⠁⠄⠅⠅⠁⠄⠄⠄⠅⠅⠁⠅⠅⠅⠅⠅⠁⠄⠍⠩⠍⠥⠁ ⠁⠄⠁⠨⠩⠠⠁⠄⠍⠤⠍⠁⠅⠄⠅⠥⠅⠅⠅⠄⠅⠅⠅⠅⠅⠅⠅⠄" +"∘ ○⠈ ⠨∘⠤·⠁·⠥·⠅·⠅·⠅·⠁ ⠅·⠄ ⠅·⠄ ⠁○⠅·⠉·⠠∘⠈∘ ∘⠬· ○⠭·⠅∘⠄·⠅ ⠄·⠄ ⠅·⠅·⠅∘⠅·⠅·⠁∘⠅●⠤ ⠡·⠠○ ·⠄∘⠠∘⠤ ⠅∘⠅·⠅·⠅ ⠅·⠅·⠅·⠅" +" ●⠉ ⠉○⠁⠅⠍·⠁ ⠁·⠅⠅⠄ ⠄⠅⠅ ⠅⠅⠅·⠅⠅⠁·⠅⠄⠁○⠁⠠ ·⠁⠈⠉·⠁ ⠉∘⠁⠅⠁·⠅⠅⠄·⠅⠅⠅ ⠁⠅⠁ ⠁⠄⠁ ⠉⠅⠁ ⠈⠥⠡·⠁⠈⠁·⠁ ⠁∘⠅⠤⠁○⠁⠄⠁·⠅⠅⠁ ⠅ ⠅ ⠁⠁" +"∘⠈· · · ·⠁·⠅∘ ·⠅·⠄ ⠄·⠅ ⠅· ⠁·⠅·⢄○⢄●⠤○ ·⢘·⢀ ⢀·⠅ ⠄·⠅·⠅·⠅ ⠅·⠁ ⠅·⠅ ⠄·⠁·⠄·⠁○⢠● ∘⠈∘ ●⢀∘⢄∘⠅·⠅ ⠄·⠄·⠄·⠅ ⠅·⠁·⠅" +"⠁⢐⢉⠘⠁⢤⢉⠐⠐⠅⠑⠅⢁⠄⠁⠅⠁⠅⠁⠄⠁⠁⠁⠄⠁⠅⠅⠅⠅⠥⠵⠄⠑⢄⠑⠝⠑⠄⢙⠐⠙⢀⢁⢔⠁⠙⠝⠔⠁⢀⠅⠁⠁⠅⠅⠁⠁⠅⠅⠅⠅⠅⠅⠁⠅⠁⢍⠁⠑⠅⠉⢅⠱⢐⠑⢠⢑ ⠉ ⢑⠔⢑⠁⠁⠴⠕⠅⠅⠅⠅⠅⠅⠅⠅ ⠅ ⠅⠄" +"· ·⢀·⢌∘⠁○⢁∘⠄ ·⠄ ⠁·⠅ ⡄·⠅· ·⠁·⢄∘⢄· ∘⠑ ⠐·⢀ ·⠐ ⢀∘⢅·⠄·⠄·⠄·⠅ ⠅·⠄·⠄·⠄·⠄∘⢅ ⢐· ·⢐∘⢐· ∘⢐∘⢕∘⠕ ⢄∘⠅·⢅·⠄ ⠁·⠅ ⠄·⠄" +"⠑·⢑ ⢑·⢑⢀⠐·⢕⢔⠁·⠁⠅⠅ ⠅⠅⠅ ⠇⠅⠃ ⠑·⠕⠐⠁·⠙⢄⢁·⠁⢀⢑·⢁ ⠁·⠑⢀⠕·⠕⠄⠁·⠇⠅⠇ ⠅⠅⠁·⠁⢀⢑·⠑⢕⠅∘⠁ ⠑·⠁⢐⢑∘⢁⢀⠑·⠁⠐⠁·⠁⢐⠁·⠁ ⠁ ⠁⠇⠁ ⠁⠁" +"·⠐ ⢐· ·⢐·⢐·⠐· ·⠆ ⠄·⠁·⠅· ⢐· ⢀· ·⢐·⠐·⢐· · ·⢀·⢐·⠅·⠄· · ⠁· ·⢀ ⢐·⢐·⢀·⠐ ⢀·⢀·⢔·⢄·⠔·⠁· ·⠁·⠁· ⠄· " +"⢀ ⠐⢐⠐⢐⢀⢀⠑⢐ ⠂⠄⠁⠂⠁ ⠁ ⠁ ⠑ ⢐⠐⢐ ⠐⢀ ⢀⢐⠐⢐⢐ ⠑⢐⠁ ⠁⡀ ⡀ ⠁ ⠐ ⠐⢀ ⠁⢐⢀⢐⢐⢐⢀ ⠐⢐ ⢀⠁⠐⠐⢀ ⢀ ⠑⠂ ⠁ " +"·⠐·⢐·⠐· ·⢀ ⠐·⠐·⢀· · · · · · · ·⢐· ·⢐· ·⢀·⢀·⢐ ⢀· · · · · · · · ⠐· · ·⢐·⠐·⠐·⠐·⢐·⢐ ⠐·⢀·⢀· · ·⠂· · · " diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_100x34_ansi.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_100x34_ansi.snap new file mode 100644 index 000000000..0ff731b8b --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_100x34_ansi.snap @@ -0,0 +1,37 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│\x1b[48;2;10;15;12m \x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠐\x1b[39m \x1b[38;2;38;64;49m⠐\x1b[39m \x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠅⢅⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠇⠄\x1b[38;2;31;52;39m⠁⠄⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄⠁⠄⠑⠁\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠄⠁⠄\x1b[38;2;38;64;49m⢀⢄\x1b[38;2;31;52;39m⠑⢀\x1b[38;2;38;64;49m⢀⢐\x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;38;64;49m⢑⠑\x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;38;64;49m⢅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠇⠅⠅⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠅⠅⠅⠅⢑⠄⠑⢤\x1b[38;2;31;52;39m⠁⠄⠐\x1b[38;2;38;64;49m⢀⠠⢰⠐⢐\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠕⢀\x1b[38;2;31;52;39m⠄⠄\x1b[38;2;38;64;49m⠕⠅⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠅⠄\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠅⠅\x1b[38;2;31;52;39m⠁│ +│\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢰\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠐\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⢄\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;31;52;39m·⠄·⠄\x1b[38;2;38;64;49m·⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁·⠅·⠅·\x1b[38;2;38;64;49m⢅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m·⠄\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⢀\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠬\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠘\x1b[39m \x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⢄\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠄·⠄·⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠔\x1b[39m \x1b[38;2;38;64;49m⠐∘⢀·⠐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠄∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅∘⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅·⠄·⠅·⠅│ +│⠁·⠑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⢤\x1b[38;2;38;64;49m⠍·\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠅⠅\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠥⢅\x1b[38;2;31;52;39m⠅·⠁⠄⠁\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠑⠄⠕·⠅\x1b[39m \x1b[38;2;38;64;49m⠁·⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅∘\x1b[38;2;31;52;39m⠅⠅⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠅⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠕\x1b[38;2;60;102;76m○\x1b[38;2;38;64;49m⢑⠱\x1b[38;2;31;52;39m⠁·⠁\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠱\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m·⠑\x1b[39m \x1b[38;2;38;64;49m⠝·⠅⠅\x1b[38;2;31;52;39m⠁·⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄│ +│·\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠠\x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⠠\x1b[38;2;38;64;49m·⠍\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄·⠁·⠅·⠄·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[38;2;38;64;49m∘⠅·⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;60;102;76m●\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠠\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;38;64;49m∘⠅\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m·⠄·⠁·⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁\x1b[38;2;38;64;49m·⠅\x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠤\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠤\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;31;52;39m⠅·⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄│ +│⠉⠠⠁⠈⠡⠈⠁⠤⠁\x1b[38;2;38;64;49m⠍\x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠅⠅⠁⠁⠅⠅⠅⠅⠅⠅⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠥\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠥⠅⠅\x1b[38;2;31;52;39m⠁⠁⠅⠄⠁⠅⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠅⠅⠁⠅⠄\x1b[38;2;38;64;49m⠅⠅⠁\x1b[38;2;31;52;39m⠅⠁\x1b[39m \x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;31;52;39m⠡⠠⠁⠠⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠉\x1b[39m \x1b[38;2;38;64;49m⠅⠅⠅\x1b[38;2;31;52;39m⠅⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠅⠅⠅⠁│ +│·\x1b[39m \x1b[38;2;38;64;49m·⠨\x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⠄·⠁·⠄\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;38;64;49m⠅∘\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m·⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠄\x1b[39m \x1b[38;2;31;52;39m⠁·⠅·⠅\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠥·⠈\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠈\x1b[38;2;45;77;58m○\x1b[39m \x1b[38;2;31;52;39m·⠠·⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠅·⠅\x1b[39m \x1b[38;2;31;52;39m⠁·⠅\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠥\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m○\x1b[38;2;31;52;39m⠄\x1b[38;2;67;114;86m●\x1b[38;2;31;52;39m⠈\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·⠠\x1b[39m \x1b[38;2;45;77;58m○\x1b[38;2;38;64;49m⠥\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅·⠅·⠅\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠅·⠅│ +│⠁·\x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;67;114;86m●\x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m⠤⠄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅⠄⠅\x1b[38;2;31;52;39m·⠅⠄\x1b[38;2;38;64;49m⠅·⠅\x1b[38;2;31;52;39m⠅⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅·\x1b[38;2;31;52;39m⠄⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠥\x1b[38;2;38;64;49m⠥·\x1b[38;2;31;52;39m⠡⠌⠉\x1b[39m \x1b[38;2;38;64;49m⠡\x1b[38;2;31;52;39m⠠⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠍⠅⠁\x1b[38;2;31;52;39m·⠁\x1b[38;2;38;64;49m⠅⠁·\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m·⠅⠅\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁·⠁⠅⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠉\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠁⠁·\x1b[38;2;31;52;39m⠁⠅⠅·⠅⠅\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠁│ +│\x1b[38;2;60;102;76m●\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠠\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄·⠁\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅·⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁·⠅·⠅·⠅·⠄·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠅\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠍\x1b[38;2;67;114;86m●\x1b[38;2;31;52;39m⠠\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;45;77;58m○\x1b[38;2;38;64;49m⠈\x1b[38;2;67;114;86m●\x1b[39m \x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅·⠅·\x1b[38;2;31;52;39m⠁·⠄\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;60;102;76m○\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⠅·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠅·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m⠁·⠄\x1b[39m \x1b[38;2;31;52;39m⠁│ +│\x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m⠉⠨\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠁⠅⠅⠅⠅⠅⠁\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠅⠡⢅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠤⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠁⢍⠉\x1b[39m \x1b[38;2;31;52;39m⠁⠐\x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁⠅\x1b[38;2;38;64;49m⠅⠄⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠅⠅⠅⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠤⠅⠅⠅⠤\x1b[38;2;31;52;39m⠅⠄⠁\x1b[38;2;38;64;49m⠠\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠠⠡⠠\x1b[38;2;31;52;39m⠉\x1b[39m \x1b[38;2;31;52;39m⠉⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠄⠅⠅⠅⠄⠁⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠄⠁⠁│ +│\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⢈\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁·⠄·⠅·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠅·\x1b[38;2;38;64;49m⠄\x1b[38;2;45;77;58m○\x1b[38;2;38;64;49m⠕\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠥\x1b[39m \x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠈\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⢀\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢅∘⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢕\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠄\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠈\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢤\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m∘⠔∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠅·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠅│ +│⠐\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠘\x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⠙·⢐⢤⢅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m⢀⠅\x1b[39m \x1b[38;2;38;64;49m⠅⠅\x1b[39m \x1b[38;2;31;52;39m·⠁⠁\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠄⠁\x1b[39m \x1b[38;2;38;64;49m⠕⠄⠉\x1b[39m \x1b[38;2;38;64;49m⢁⢄⢰\x1b[39m \x1b[38;2;31;52;39m⠁⠐⢀·\x1b[39m \x1b[38;2;31;52;39m⠈⠐\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;38;64;49m⠐⠐\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢄⠄\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠅⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m·⠁⢅⠕·\x1b[39m \x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m⢁·\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m·⠑\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢄⠕\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢔\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠁⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄⠅│ +│·\x1b[38;2;38;64;49m⢐\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⢀·⢔·⠑\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⢀·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠁·\x1b[39m \x1b[38;2;31;52;39m⠄·⠅·⠄·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢔\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠈\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;38;64;49m·⠐·⢅·⠐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠔·\x1b[38;2;38;64;49m⠅·\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢑·⢄\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠐\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢐∘⢰\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⢀·\x1b[38;2;38;64;49m⢕∘\x1b[39m \x1b[38;2;31;52;39m·⠁·⠄\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⡅\x1b[38;2;31;52;39m·⠄·⠄·\x1b[38;2;38;64;49m⠄│ +│\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢐⢑\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;38;64;49m⢁\x1b[39m \x1b[38;2;38;64;49m⠕⠅⠑⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠁⠑\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⢁⢀\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;31;52;39m⠑⢀\x1b[38;2;38;64;49m⢑⢐\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢅⠑⠔⠑⢐⠁⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅⡅⠁⠄\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠁⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠔⠑⢔⢁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⢐⢑\x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⠑⢄⢑\x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠃⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅│ +│\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢀·⢀·⢀·\x1b[38;2;38;64;49m⢄\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠁·⠄·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·⠄·⠐\x1b[39m \x1b[38;2;31;52;39m⢀·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⠐·⢄·⠐·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠅·\x1b[39m \x1b[38;2;31;52;39m·⠁·⠄·⢀·\x1b[39m \x1b[38;2;31;52;39m·⠐·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·⠐\x1b[39m \x1b[38;2;31;52;39m⠐·\x1b[39m \x1b[38;2;31;52;39m·⠐·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠄·⠄·\x1b[38;2;38;64;49m⡁│ +│\x1b[38;2;31;52;39m⢑\x1b[39m \x1b[38;2;31;52;39m⢑⠐⢁\x1b[39m \x1b[38;2;31;52;39m⠁⠐⠑\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;38;64;49m⠃\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢀⢑\x1b[39m \x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⢐\x1b[39m \x1b[38;2;38;64;49m⢑⢐\x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⢑⠐\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⢀⠑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;38;64;49m⠃\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠐\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⠑⢀⢁\x1b[39m \x1b[38;2;31;52;39m⠁⠐⠑\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢀⠑\x1b[39m \x1b[38;2;38;64;49m⡀\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;24;39;30m·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⡀\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⢀\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[38;2;24;39;30m·\x1b[38;2;38;64;49m⠐\x1b[39m \x1b[38;2;31;52;39m⢀\x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m⠐·⢐\x1b[39m \x1b[38;2;31;52;39m⢀·\x1b[39m \x1b[38;2;38;64;49m⠐\x1b[38;2;24;39;30m·\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⡀\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢀\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m⢀\x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m⢀·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[38;2;38;64;49m⡀\x1b[39m │ +│ \x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⢐⢀\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠑⠐⠑⠄⠐⠄\x1b[38;2;38;64;49m⠐\x1b[39m \x1b[38;2;31;52;39m⠁⠂\x1b[39m \x1b[38;2;38;64;49m⡁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠐⠐\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m⢐⢐\x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⠐⢀⠐⢀\x1b[39m \x1b[38;2;31;52;39m⢀⠐\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠃\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠃\x1b[39m \x1b[38;2;31;52;39m⠐⢐\x1b[38;2;38;64;49m⢁\x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⢀⠁⢐\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠂⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄│ +│∘\x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m·⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠄·⠄·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢕·\x1b[38;2;31;52;39m⠄·⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄·\x1b[39m \x1b[38;2;31;52;39m·⠐·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢔·⢄·⠐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠔\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·⢐∘\x1b[38;2;31;52;39m⢀\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀∘⢔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠔\x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠆\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m │ +│ \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠐⢀⠑·\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;31;52;39m⢁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠅\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠁⠅\x1b[39m \x1b[38;2;38;64;49m⠑⢕⢁\x1b[39m \x1b[38;2;38;64;49m⢁\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m⢑∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢔⠕\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁⠄⠁·⠁\x1b[38;2;38;64;49m⠔\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠑⠔\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m·⢅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⢄⠑\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;38;64;49m⠑∘\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠅·\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠇\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠁│ +│·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠰\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m∘⠕\x1b[38;2;45;77;58m∘⠕∘\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠁·⠅·⠄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢅∘⢼·⠐\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠈\x1b[39m \x1b[38;2;31;52;39m·⠐\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;38;64;49m∘⢄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠅·⠄·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅∘\x1b[38;2;45;77;58m⢄\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠔·⠐\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m·⢸\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠐∘⢄∘⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄∘⠄\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄│ +│⢀⢀\x1b[39m \x1b[38;2;31;52;39m⠠⠁\x1b[39m \x1b[38;2;38;64;49m⠑⠄\x1b[38;2;31;52;39m⠁⠄⠅⠁⠁\x1b[38;2;38;64;49m⠅⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠄⠄⠅⠄\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅⠁\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢕\x1b[38;2;31;52;39m⠑⠐⠁\x1b[38;2;38;64;49m⠄⠉\x1b[38;2;31;52;39m⠠⠁\x1b[39m \x1b[38;2;38;64;49m⠙⠈\x1b[38;2;31;52;39m⠉⠄⠁\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠅⠅⠄⠁⠁\x1b[38;2;38;64;49m⠅⠅⠅⢅⠅⠤⠍⠅⠉⢉⠙\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠘\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠈⠡⠠⠁⠠⠁⠄\x1b[38;2;38;64;49m⠍\x1b[39m \x1b[38;2;31;52;39m⠅⠄⠑⠄⠁\x1b[39m \x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁⠄│ +│\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠠·\x1b[39m \x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;67;114;86m●\x1b[38;2;38;64;49m⠄\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁·⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;45;77;58m○\x1b[39m \x1b[38;2;31;52;39m⠠\x1b[38;2;45;77;58m○\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠁\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠅·⠅\x1b[39m \x1b[38;2;31;52;39m⠁·⠄\x1b[38;2;38;64;49m∘⠵\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘⠈\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠈\x1b[38;2;38;64;49m·⠅\x1b[39m \x1b[38;2;38;64;49m⠅·\x1b[38;2;31;52;39m⠁·⠁·⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[39m │ +│\x1b[38;2;31;52;39m⠁\x1b[38;2;67;114;86m●\x1b[39m \x1b[38;2;38;64;49m⠨\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠡⠁\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠅\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁·⠅⠁⠅·\x1b[38;2;38;64;49m⠉⠅⠍∘\x1b[38;2;31;52;39m⠁⠠⠁·⠁\x1b[38;2;38;64;49m⠠\x1b[39m \x1b[38;2;38;64;49m·⠩⠄\x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅⠅⠅·⠅\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m·⠅\x1b[38;2;38;64;49m⠅⠅∘⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠥·⠉\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠄⠅·⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅·⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅·\x1b[39m \x1b[38;2;38;64;49m⠅│ +│\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠈\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠈\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅∘\x1b[38;2;31;52;39m⠅·⠄\x1b[38;2;38;64;49m·⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁·⠅·⠅·⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄\x1b[38;2;38;64;49m∘⠅\x1b[38;2;31;52;39m·⠈\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠡\x1b[38;2;67;114;86m●\x1b[39m \x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁·⠅·\x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠁·⠄\x1b[39m \x1b[38;2;31;52;39m·⠄\x1b[38;2;38;64;49m·⠅\x1b[38;2;31;52;39m·⠅·⠅\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;24;39;30m·\x1b[38;2;38;64;49m⠩\x1b[38;2;60;102;76m●\x1b[39m \x1b[38;2;38;64;49m·⠈\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠠\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅·\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[39m \x1b[38;2;31;52;39m⠅·⠅·\x1b[38;2;38;64;49m⠅│ +│\x1b[38;2;31;52;39m⠁⠤⠁\x1b[38;2;38;64;49m⠨\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠁⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅⠅⠅⠅⠅⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠅⠅⠅⠁⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄⠁⠄⠅⠄⠁⠄⠉\x1b[38;2;38;64;49m⠬\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠩\x1b[38;2;31;52;39m⠤\x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠅⠥\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠁⠄⠄⠄⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅⠅⠅⠅⠅⠁\x1b[38;2;38;64;49m⠄⠍⠩⠍⠥\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁\x1b[38;2;38;64;49m⠨⠩⠠\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠍\x1b[38;2;31;52;39m⠤\x1b[38;2;38;64;49m⠍\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠥\x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠅⠅⠅⠄│ +│∘\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠈\x1b[39m \x1b[38;2;38;64;49m⠨∘\x1b[38;2;31;52;39m⠤\x1b[38;2;38;64;49m·⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠥·\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠁\x1b[39m \x1b[38;2;31;52;39m⠅·⠄\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠠\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠈\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;38;64;49m∘⠬·\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠭·⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠄\x1b[39m \x1b[38;2;31;52;39m⠅·⠅·\x1b[38;2;38;64;49m⠅∘⠅·\x1b[38;2;31;52;39m⠅·⠁\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠤\x1b[39m \x1b[38;2;38;64;49m⠡·⠠\x1b[38;2;60;102;76m○\x1b[39m \x1b[38;2;31;52;39m·⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠠\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠤\x1b[39m \x1b[38;2;38;64;49m⠅∘\x1b[38;2;31;52;39m⠅·⠅·⠅\x1b[39m \x1b[38;2;31;52;39m⠅·⠅·⠅·\x1b[38;2;38;64;49m⠅│ +│\x1b[39m \x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠉\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠍\x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠄⠅⠅\x1b[39m \x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠅⠅⠁·⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⠁⠠\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠈⠉\x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠅⠅\x1b[38;2;31;52;39m⠄·⠅\x1b[38;2;38;64;49m⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠅⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m⠅⠁\x1b[39m \x1b[38;2;38;64;49m⠈⠥\x1b[38;2;31;52;39m⠡\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠈\x1b[38;2;31;52;39m⠁·⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠤⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠁·\x1b[38;2;31;52;39m⠅⠅⠁\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠁│ +│\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠈\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠅∘\x1b[39m \x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠄·⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m⠁·⠅·\x1b[38;2;38;64;49m⢄\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⢄\x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠤\x1b[38;2;45;77;58m○\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢘\x1b[38;2;31;52;39m·⢀\x1b[39m \x1b[38;2;31;52;39m⢀·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅·\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⢠\x1b[38;2;60;102;76m●\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠈\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m∘⢄∘⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠄·⠄·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠅│ +│\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢐⢉⠘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢤⢉⠐\x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⠅⠑⠅\x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁⠁⠁⠄⠁\x1b[38;2;38;64;49m⠅⠅⠅⠅⠥⠵⠄⠑⢄⠑⠝⠑\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⢙⠐⠙\x1b[38;2;31;52;39m⢀⢁\x1b[38;2;38;64;49m⢔\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠙⠝⠔\x1b[38;2;31;52;39m⠁⢀⠅⠁\x1b[38;2;38;64;49m⠁⠅⠅\x1b[38;2;31;52;39m⠁⠁⠅\x1b[38;2;38;64;49m⠅⠅⠅⠅⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢍⠁⠑⠅⠉⢅⠱⢐\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢠⢑\x1b[39m \x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;38;64;49m⢑⠔⢑⠁\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠴⠕⠅⠅⠅⠅\x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠅⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄│ +│·\x1b[39m \x1b[38;2;31;52;39m·⢀·\x1b[38;2;38;64;49m⢌\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m⠁·⠅\x1b[39m \x1b[38;2;38;64;49m⡄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠁·\x1b[38;2;38;64;49m⢄∘⢄\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⠐·⢀\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠐\x1b[39m \x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m∘⢅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠄\x1b[38;2;38;64;49m·⠄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢅\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·⢐\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘⢐∘⢕∘⠕\x1b[39m \x1b[38;2;38;64;49m⢄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅·\x1b[38;2;45;77;58m⢅\x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠄│ +│⠑·\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;38;64;49m⢑·⢑\x1b[38;2;31;52;39m⢀⠐·\x1b[38;2;45;77;58m⢕\x1b[38;2;38;64;49m⢔\x1b[38;2;31;52;39m⠁·⠁\x1b[38;2;38;64;49m⠅⠅\x1b[39m \x1b[38;2;38;64;49m⠅⠅⠅\x1b[39m \x1b[38;2;38;64;49m⠇⠅⠃\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕⠐\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠙⢄\x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢀⢑·\x1b[38;2;31;52;39m⢁\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠑⢀⠕\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕⠄\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠇\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠇\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁·⠁⢀\x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠑⢕⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⢑\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m⠑·⠁\x1b[38;2;38;64;49m⠐⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠁⢐\x1b[38;2;31;52;39m⠁·⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠇\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠁│ +│·\x1b[38;2;38;64;49m⠐\x1b[39m \x1b[38;2;31;52;39m⢐·\x1b[39m \x1b[38;2;31;52;39m·⢐\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⢐·\x1b[38;2;38;64;49m⠐·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠆\x1b[39m \x1b[38;2;31;52;39m⠄·⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⢐·\x1b[39m \x1b[38;2;31;52;39m⢀·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⠐·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢀·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⢀·⠐\x1b[39m \x1b[38;2;31;52;39m⢀·⢀·\x1b[38;2;38;64;49m⢔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢄·\x1b[38;2;31;52;39m⠔·\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠁·⠁·\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[39m │ +│\x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;31;52;39m⠐⢐⠐⢐⢀⢀⠑⢐\x1b[39m \x1b[38;2;38;64;49m⠂⠄\x1b[38;2;31;52;39m⠁⠂⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⢐⠐\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⠐⢀\x1b[39m \x1b[38;2;31;52;39m⢀⢐⠐⢐⢐\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢐⠁\x1b[39m \x1b[38;2;31;52;39m⠁⡀\x1b[39m \x1b[38;2;31;52;39m⡀\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;31;52;39m⠐⢀\x1b[39m \x1b[38;2;31;52;39m⠁⢐⢀\x1b[38;2;38;64;49m⢐⢐\x1b[38;2;31;52;39m⢐⢀\x1b[39m \x1b[38;2;31;52;39m⠐⢐\x1b[39m \x1b[38;2;31;52;39m⢀⠁⠐⠐⢀\x1b[39m \x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;38;64;49m⠑⠂\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│\x1b[38;2;31;52;39m·⠐·⢐·⠐·\x1b[39m \x1b[38;2;31;52;39m·⢀\x1b[39m \x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·⠐·⢀·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢐·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢀·⢀·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠐·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⠐·⠐·⠐·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⠐·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠂\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_100x34_text.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_100x34_text.snap new file mode 100644 index 000000000..77ae92a57 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_100x34_text.snap @@ -0,0 +1,37 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│ ⠄⠐ ⠐ ⠐⢀⠄⠅⠄⠅⢅⠅⠅⠅⠅⠇⠄⠁⠄⠅⠅⠁⠄⠁⠄⠑⠁⠁⠄⠁⠄⢀⢄⠑⢀⢀⢐⢀ ⢑⠑⠑ ⢅⠅⠅⠄⠄⠁⠁⠅⠄⠇⠅⠅⠄⠁ ⠅⠅⠅⠅⢑⠄⠑⢤⠁⠄⠐⢀⠠⢰⠐⢐ ⠄⠕⢀⠄⠄⠕⠅⠅⠄⠅⠄⠅⠄⠁⠅⠅⠅⠅⠁│ +│∘ ·⢰·⠐∘⢄○ ·⠄·⠄·⠄·⠅·⠅ ⠅·⠁·⠅·⠅·⢅·⠑·⠄○⢀∘⠬○⠘ ⢀· ∘⢄∘ ·⠄·⠅·⠅·⠄ ·⠅ ⠄·⠄·⠄·⠄∘⠄∘⠔ ⠐∘⢀·⠐·⢀∘⠄∘ ·⠅∘⠁·⠅·⠅ ⠅·⠄·⠅·⠅│ +│⠁·⠑ ⠁∘⠑⢤⠍· ⠅·⠅⠄⠅·⠁⠅⠅·⠅⠅⠁·⠅⠅⠁·⠥⢅⠅·⠁⠄⠁∘⠁ ⠁∘⠑⠄⠕·⠅ ⠁·⠅⠄⠅∘⠅⠅⠁ ⠁⠅⠁·⠅⠅⠁ ⠁⠄⠕○⢑⠱⠁·⠁ ⠁·⠱⠄⠑·⠑ ⠝·⠅⠅⠁·⠁⠅⠅·⠅⠄⠅·⠅⠄│ +│· ○⠠○⠠·⠍∘⠄∘⠁∘⠄∘⠄·⠁·⠅·⠄·⠅·⠅·⠅∘⠅·⠅∘⠄○ ● ○⠠○ ○ ∘ ∘⠅∘ ·⠄·⠁·⠁·⠅·⠅·⠅·⠅·⠁·⠅●⠤· · · · ∘⠤○⠁· ·⠅·⠄·⠅ ⠅·⠁ ⠅·⠄·⠄│ +│⠉⠠⠁⠈⠡⠈⠁⠤⠁⠍⠉⠅⠅⠅⠅⠁⠁⠅⠅⠅⠅⠅⠅⠅⠅⠅⠁⠅⠅⠅⠅⠥⠅ ⠉⠄⠁ ⠁ ⠁ ⠁⠄⠁⠁⠅⠁⠁⠥⠅⠅⠁⠁⠅⠄⠁⠅⠁⠅⠅⠅⠅⠁⠅⠄⠅⠅⠁⠅⠁ ⠉ ⠡⠠⠁⠠⠁ ⠁⠄⠉ ⠅⠅⠅⠅⠁⠄⠁ ⠁⠄⠅⠄⠅⠅⠅⠁│ +│· ·⠨○⠄·⠁·⠄ ⠄ ⠅∘⠅ ·⠅ ⠄·⠄ ⠁·⠅·⠅●⠅∘⠥·⠈○⠈○ ·⠠·⠄∘⠁○⠅∘⠅ ⠅ ⠄ ⠅·⠅ ⠁·⠅∘⠄∘⠥∘⠄○⠄●⠈∘ · ·⠠ ○⠥∘⠄∘⠅·⠅·⠅ ⠄ ⠅·⠅│ +│⠁·⠉ ⠁●⠉⠤⠄∘⠅⠄⠅·⠅⠄⠅·⠅⠅⠁·⠅⠄⠅·⠄⠅⠅·⠁⠥⠥·⠡⠌⠉ ⠡⠠⠁○⠁ ⠁∘⠍⠅⠁·⠁⠅⠁·⠁⠅⠅·⠅⠅⠅ ⠁⠄⠁·⠁⠅⠁∘⠉⠅⠉∘⠉ ⠉·⠁ ⠉ ⠅⠁⠁○⠅⠁⠁·⠁⠅⠅·⠅⠅⠅ ⠁⠁│ +│● ∘⠠· ∘ ∘⠄·⠁○⠅·⠅·⠅·⠁·⠅·⠅·⠅·⠄·⠅·⠅○⠅○⠍●⠠∘ ○⠈● ●⠄∘⠅·⠅·⠁·⠄ ⠄·⠅·⠅·⠅ ⠅∘⠅○⠅∘⠄○⠅· ∘ · ○⠁○⠅·⠄∘ ·⠅·⠅·⠅·⠄ ⠁·⠄ ⠁│ +│⠉⢀⠉⠨⠁ ⠉⢀⠑ ⠁⠄⠁⠁⠁ ⠁⠄⠁⠅⠅⠅⠅⠅⠁⠅⠅⠅⠡⢅⠁⠤⠅⠄⠁⢍⠉ ⠁⠐⠑ ⠉ ⠅⠅⠅⠄⠁⠅⠅⠄⠅⠁⠅⠅⠅⠅⠅ ⠅⠄⠅⠤⠅⠅⠅⠤⠅⠄⠁⠠⠁⠠⠡⠠⠉ ⠉⠁⠅⠄⠅⠄⠅⠄⠅⠅⠅⠄⠁⠅⠁⠅⠅⠄⠁⠁│ +│∘ ·⢈∘ · ∘⢀∘⠁·⠁·⠄·⠅·⠅ ⠅·⠅·⠄·⠅·⠄○⠕ ⠁○⠥ ⠐· ·⠈∘⠄∘ ○⢀∘⢅∘⠅·⠅·⠅·⠅·⠅ ⠅·⠄·⢁·⢕○⠄∘⠄∘ ●⠈ ·⢤ ⠐∘⠔∘⠄·⠅·⠅·⠅·⠅·⠅·⠄ ⠅│ +│⠐○⠘⠐⠙·⢐⢤⢅·⠕⢀⠅ ⠅⠅ ·⠁⠁⠅ ⠅⠄⠁ ⠕⠄⠉ ⢁⢄⢰ ⠁⠐⢀· ⠈⠐∘ ⠐⠐○⠁⢄⠄ ⠁ ⠁ ⠅⠁⠁ ⠁⠅⠅ ⠁⠅·⠁⢅⠕· ⠐⢁· ⢐ ·⠑⢀ ⠁⢄⠕·⢔ ⠁ ⠁⠅⠅ ⠁⠅⠅·⠄⠅│ +│·⢐∘⢀·⢔·⠑∘⢀·⠅·⠄·⠁· ⠄·⠅·⠄·⠄·⠅·⠅○⠄·⢔∘ ∘⠈∘ ·⠐·⢅·⠐·⠄·⠔·⠅· ⠅·⠄·⠄·⠅·⢁·⠄·⢑·⢄· ·⠐∘⢐∘⢰·⢐·⢀·⢕∘ ·⠁·⠄ ⠄·⡅·⠄·⠄·⠄│ +│⠑⢐⢑⢀⠑ ⠑ ⢁ ⠕⠅⠑⠄⠁ ⠁⠄⠁ ⠁⠅⠁⠅⠁⠁⠑⠕⠁⢐⠑ ⠁ ⠑ ⢁⢀⢑ ⠑⢀⢑⢐⠑⢅⠑⠔⠑⢐⠁⠅⠁⠅⠅ ⠅⡅⠁⠄⠁⠅⠁⠅⠁⠅⠁⠔⠑⢔⢁ ⠁⢐⢁⢐⢑⠐⠑⢄⢑⢁⠕⠁⢑⢁⠑⠁ ⠁⠄⠅⠅⠃⠄⠁ ⠁⠅│ +│·⢐· ·⢀·⢀·⢀·⢄· · ·⠁·⠄·⢀·⠄·⢀·⢀·⠄·⠐ ⢀·⢐·⠐·⢄·⠐·⠄·⢐·⠄ ⠅· ·⠁·⠄·⢀· ·⠐·⢀·⠐ ⠐· ·⠐· · ·⠄·⢐·⢀ · ·⠄·⠄·⡁│ +│⢑ ⢑⠐⢁ ⠁⠐⠑ ⠑ ⠑ ⠑ ⠃ ⠁ ⠁ ⠁ ⠁⢀⢑ ⢁⢀⠁ ⠐⢐⢐ ⢑⢐⠑ ⢑⠐⢑ ⢑⢀⠑ ⠁ ⠁ ⠃ ⠁ ⠁ ⠁ ⠑ ⠁ ⠁⠐⢑ ⢀⢐ ⠑⢀⢁ ⠁⠐⠑ ⠑⢐⠑ ⠁⢀⠑ ⡀⠁ ⠁ ⠁ ⠁ │ +│·⢀ ·⢐ ⢐·⢐ · ·⡀ · · ⢐·⢀ ⠐·⠐ ⢀· ⠐·⢐ ⢀· ⠐·⢀ ·⡀ · · · ·⢀ · ⢀· ⢀·⢐ · · · ·⡀ │ +│ ⢀ ⢀⢐⢐⢀⢐⠑⠐⠑⠄⠐⠄⠐ ⠁⠂ ⡁ ⠁ ⠑ ⠐⠐⢐ ⢐⢐⠑ ⠐⢀⠐⢀ ⢀⠐⠐⠁⠄ ⠁ ⠃ ⠄⠃ ⠐⢐⢁⠐⢐ ⢐⢀⠁⢐⢐ ⢀ ⠐ ⠐ ⠁ ⠂⠄⠁ ⠁⠄│ +│∘⠐· ·⢐·⢑·⢀·⢄·⠄·⠄· ⠄·⠄·⠄·⢕·⠄·⠄·⢀∘⠄· ·⠐·⢐·⢔·⢄·⠐· ·⠅·⠄ ⠄ ⠄·⠅·⠄· ·⠄·⠔· · ·⢐∘⢀∘⢀·⢐·⢀∘⢔·⠔·⠄·⠄ ·⠆·⠄·⠅· │ +│ ·⠐⢀⠑·⢑ ⢁ ⠁⠄⠅·⠅⠅⠁ ⠁ ⠅⠅⠅ ⠁⠁⠅ ⠑⢕⢁ ⢁ ⠁·⢐ ⢑∘⠁⢔⠕∘⠁⠄⠁·⠁⠔⠁ ⠁⠁ ⠁ ⠁ ⠅⠄⠑·⠑⠔⠑·⢅ ⠁∘⠐ ⠁·⠑⢄⠑ ⢑ ⠑∘⠅⠄⠅· ⠁ ⠇⠅⠅ ⠅⠁│ +│·⢐·⠰∘ ○⠁∘⠕∘⠕∘⠅∘⠁·⠁ ⠅·⠁·⠅·⠄· ·⢁·⢅∘⢼·⠐∘⠈ ·⠐∘ ∘⢄∘⢕∘⠄·⠄·⠅ ⠄·⠅·⠄·⠄·⠅∘⠅∘⢄· ·⠔·⠐∘⢀·⢸∘⠐∘⢄∘⠁·⠄·⠄∘⠄ ⠅·⠅·⠄·⠅·⠄│ +│⢀⢀ ⠠⠁ ⠑⠄⠁⠄⠅⠁⠁⠅⠁ ⠁⠄⠄⠄⠅⠄⠅⠅⠅⠅⠁⠅⠁⠁⠅ ⠁⢕⠑⠐⠁⠄⠉⠠⠁ ⠙⠈⠉⠄⠁⠁⠁ ⠁⠅⠅⠅⠅⠅⠅⠄⠁⠁⠅⠅⠅⢅⠅⠤⠍⠅⠉⢉⠙⠅⠘⠄ ⠈⠡⠠⠁⠠⠁⠄⠍ ⠅⠄⠑⠄⠁ ⠅⠅⠁⠄⠁ ⠁⠄⠁⠄│ +│●⠠· ○ ●⠄●⠁·⠅∘⠁·⠁·⠅·⠅ ⠅ ⠅·⠅ ·⠅∘⠅·⠁○ · ○ ⠠○⠅ ∘⠄ ⠅·⠅·⠄·⠁ ⠄ ⠅·⠅ ⠁·⠄∘⠵· ⠐○ · ∘⠈∘⠈·⠅ ⠅·⠁·⠁·⠅ ⠅ ⠅ ⠄ │ +│⠁● ⠨ ○⠡⠁ ·⠁⠄⠅ ⠅⠄⠅ ⠄⠅⠅ ⠁⠅⠁·⠅⠁⠅·⠉⠅⠍∘⠁⠠⠁·⠁⠠ ·⠩⠄⠁○⠅⠅⠅·⠅⠁⠁ ⠅⠄⠁ ⠅⠅⠅·⠅⠅⠅∘⠅⠁⠥·⠉ ⠁○⠁ ∘⠉ ∘⠁ ⠅· ⠄⠅·⠁⠅⠅·⠅⠅⠅· ⠅│ +│· ·⠈∘⠈∘⠅∘⠅·⠄·⠅∘⠁·⠅·⠅·⠁·⠅·⠄∘⠅·⠈·⠅∘⠅∘⠡● ∘ ∘⠄· ∘⠁·⠅·⠥·⠅·⠅·⠁·⠄ ·⠄·⠅·⠅·⠅○⠅∘⠄·⠩● ·⠈○⠠∘⠁∘⠅·⠁∘⠅·⠅·⠅·⠅ ⠅·⠅·⠅│ +│⠁⠤⠁⠨⠁ ⠁⠁⠁⠅⠉⠅⠁⠅⠅⠅⠅⠅⠁⠅⠅⠅⠅⠅⠁⠅⠅⠅⠁⠄⠁⠄⠅⠄⠁⠄⠉⠬⠁ ⠩⠤⠉ ⠁ ⠅⠥⠁⠄⠅⠅⠁⠄⠄⠄⠅⠅⠁⠅⠅⠅⠅⠅⠁⠄⠍⠩⠍⠥⠁ ⠁⠄⠁⠨⠩⠠⠁⠄⠍⠤⠍⠁⠅⠄⠅⠥⠅⠅⠅⠄⠅⠅⠅⠅⠅⠅⠅⠄│ +│∘ ○⠈ ⠨∘⠤·⠁·⠥·⠅·⠅·⠅·⠁ ⠅·⠄ ⠅·⠄ ⠁○⠅·⠉·⠠∘⠈∘ ∘⠬· ○⠭·⠅∘⠄·⠅ ⠄·⠄ ⠅·⠅·⠅∘⠅·⠅·⠁∘⠅●⠤ ⠡·⠠○ ·⠄∘⠠∘⠤ ⠅∘⠅·⠅·⠅ ⠅·⠅·⠅·⠅│ +│ ●⠉ ⠉○⠁⠅⠍·⠁ ⠁·⠅⠅⠄ ⠄⠅⠅ ⠅⠅⠅·⠅⠅⠁·⠅⠄⠁○⠁⠠ ·⠁⠈⠉·⠁ ⠉∘⠁⠅⠁·⠅⠅⠄·⠅⠅⠅ ⠁⠅⠁ ⠁⠄⠁ ⠉⠅⠁ ⠈⠥⠡·⠁⠈⠁·⠁ ⠁∘⠅⠤⠁○⠁⠄⠁·⠅⠅⠁ ⠅ ⠅ ⠁⠁│ +│∘⠈· · · ·⠁·⠅∘ ·⠅·⠄ ⠄·⠅ ⠅· ⠁·⠅·⢄○⢄●⠤○ ·⢘·⢀ ⢀·⠅ ⠄·⠅·⠅·⠅ ⠅·⠁ ⠅·⠅ ⠄·⠁·⠄·⠁○⢠● ∘⠈∘ ●⢀∘⢄∘⠅·⠅ ⠄·⠄·⠄·⠅ ⠅·⠁·⠅│ +│⠁⢐⢉⠘⠁⢤⢉⠐⠐⠅⠑⠅⢁⠄⠁⠅⠁⠅⠁⠄⠁⠁⠁⠄⠁⠅⠅⠅⠅⠥⠵⠄⠑⢄⠑⠝⠑⠄⢙⠐⠙⢀⢁⢔⠁⠙⠝⠔⠁⢀⠅⠁⠁⠅⠅⠁⠁⠅⠅⠅⠅⠅⠅⠁⠅⠁⢍⠁⠑⠅⠉⢅⠱⢐⠑⢠⢑ ⠉ ⢑⠔⢑⠁⠁⠴⠕⠅⠅⠅⠅⠅⠅⠅⠅ ⠅ ⠅⠄│ +│· ·⢀·⢌∘⠁○⢁∘⠄ ·⠄ ⠁·⠅ ⡄·⠅· ·⠁·⢄∘⢄· ∘⠑ ⠐·⢀ ·⠐ ⢀∘⢅·⠄·⠄·⠄·⠅ ⠅·⠄·⠄·⠄·⠄∘⢅ ⢐· ·⢐∘⢐· ∘⢐∘⢕∘⠕ ⢄∘⠅·⢅·⠄ ⠁·⠅ ⠄·⠄│ +│⠑·⢑ ⢑·⢑⢀⠐·⢕⢔⠁·⠁⠅⠅ ⠅⠅⠅ ⠇⠅⠃ ⠑·⠕⠐⠁·⠙⢄⢁·⠁⢀⢑·⢁ ⠁·⠑⢀⠕·⠕⠄⠁·⠇⠅⠇ ⠅⠅⠁·⠁⢀⢑·⠑⢕⠅∘⠁ ⠑·⠁⢐⢑∘⢁⢀⠑·⠁⠐⠁·⠁⢐⠁·⠁ ⠁ ⠁⠇⠁ ⠁⠁│ +│·⠐ ⢐· ·⢐·⢐·⠐· ·⠆ ⠄·⠁·⠅· ⢐· ⢀· ·⢐·⠐·⢐· · ·⢀·⢐·⠅·⠄· · ⠁· ·⢀ ⢐·⢐·⢀·⠐ ⢀·⢀·⢔·⢄·⠔·⠁· ·⠁·⠁· ⠄· │ +│⢀ ⠐⢐⠐⢐⢀⢀⠑⢐ ⠂⠄⠁⠂⠁ ⠁ ⠁ ⠑ ⢐⠐⢐ ⠐⢀ ⢀⢐⠐⢐⢐ ⠑⢐⠁ ⠁⡀ ⡀ ⠁ ⠐ ⠐⢀ ⠁⢐⢀⢐⢐⢐⢀ ⠐⢐ ⢀⠁⠐⠐⢀ ⢀ ⠑⠂ ⠁ │ +│·⠐·⢐·⠐· ·⢀ ⠐·⠐·⢀· · · · · · · ·⢐· ·⢐· ·⢀·⢀·⢐ ⢀· · · · · · · · ⠐· · ·⢐·⠐·⠐·⠐·⢐·⢐ ⠐·⢀·⢀· · ·⠂· · · │ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_36x20.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_36x20.snap new file mode 100644 index 000000000..5175f50d7 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_36x20.snap @@ -0,0 +1,24 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +expression: terminal.backend().to_string() +--- +"⠩⠅⠉⠭⠩⠠⠈ ⠈⠠ ⠤⠄⠉⠅⠁⠅⠅⠅⠁⠄⠁⠄⠅⠅⠁⠅⠁⠅⠁⠅ ⠅⠭⠅" +"∘⠄○⠍· ·⠐∘ ○ ○ ∘⠅∘⠄·⠅∘⠄·⠁·⠅·⠅ ·⠄·⠤·⠅" +"⠁·⠉⠥⠁∘⠉⢀⠉·⠐⠄⠑·⠝⢀⠑·⠕⠅⠅·⠁⠅⠅·⠁⠅⠅ ⠅⠄⠅·⠅⢕" +"●⢄·⠐∘⢀ ⠈· ⠐∘⠥·⢄∘⠁· ·⠁·⠁·⠅ ⠅·⠄ ⠅·⠁·⢅" +"⠁⢐⠑ ⢑⠈⠑ ⠙⠐⠐⢁⠁⠐⠑⠄⠁⠐⠁⠅⠅ ⠅⠅⠁⠄⠁⠄⠅⠅⠅⠁⠁⠄⢅⢑" +" · ⢀· ·⢀·⢐·⢀·⠔·⢐·⠅ ⠅· ⡄ ⠄·⠅·⠄ ⠅·⠔" +"⢑·⢁⠐⢑ ⢑⢐⢐ ⠁⢄⢁·⠁⠄⠓ ⠑⠄⠁ ⠁⠅⠁ ⠁⠁⠁ ⠁⢐⠁·⠁⠑" +"·⢀·⢐·⢐ ⢐·⠐ ⠐· ⢀·⠐ · · · · · ⠐" +"⠑⢐⠑⢀⠑ ⢑⠐⢐⢐⠑⢀⠑ ⠑⢐⠁⢀⠁ ⠁⡀⠁⡄⠃ ⠁ ⠑ ⠁ ⠑ " +" ⠐· ·⢐· ·⢀·⢀·⢀·⠐ ⠄· · ·⠄ ·⠄· ·⠄·⢐" +"⢀· ⠄⠐ ⢀⠐ · ⢐ ·⢀⠐⠁ ⠁ ⠁⠄⠄ ⠁⠁ ⠃ ⠁ ⠁⠐" +"·⠔∘ · ∘ ∘⠐·⢔∘⢄·⠄·⢄·⠄·⠅·⠅·⠅· ·⠅·⢄·⠅·⠔" +"⠑⠸⠅⠐⢑⠘⠑ ⠁⠐⠁ ⠁⢄⠕⢕⠑⠄⠁⠄⠅⠅⠅⠄⠅⠅⠅ ⠅⠄⠁⠅⠕⠅⠁⢄" +"·⢕·⠐○⠄○⠠· ∘⠌·⠄·⠁ ·⠅·⠅·⠅·⠄·⠁·⠅·⢅∘⠤·⠅" +"⠅ ⠁ ⠁ ⠁ ⠉●⠁⠍⠁∘⠁⠅ ·⠅⠅⠅·⠁⠁⠅ ⠅⠅⠅·⠅ ⠁∘⠅⠄" +"○⠍∘⠠· ○⠠· ○⠄∘⠥∘⠅∘⠄·⠁·⠁·⠄·⠅ ⠅·⠁·⠅∘⠄ ⠁" +"⠁⠁⠍⠡⠡ ⠈ ⠁⠉⠅⠁⠅⠁⠅⠁⠅⠅⠁⠁⠄⠅ ⠅⠄⠅⠅⠅⠄⠅⠄" +"∘⠄○⠄○⠬· ○⠤○ · ∘⠥·⠄·⠁·⠄·⠄·⠅·⠅·⠅·⠅·⠄·⠩" +"⠁∘⠍⠠⠁ ⠁ ⠉○⠁ ⠅○⠉⠅⠅·⠁⠅⠁·⠅⠄⠅ ⠁⠅⠁·⠅⠅⠅ ⠁⠁" +"∘⢬·⢤○⠄∘⠨○⠈○ ·⠄·⠅·⠅·⠅∘⠅·⠅·⠅·⠅·⠅·⠄∘⠅·⠅" diff --git a/nori-rs/tui-components/examples/motion_storybook/story.rs b/nori-rs/tui-components/examples/motion_storybook/story.rs new file mode 100644 index 000000000..93361298d --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/story.rs @@ -0,0 +1,67 @@ +use std::time::Duration; + +use nori_tui_components::MotionBackground; +use nori_tui_components::MotionFormation; +use nori_tui_components::MotionPalette; +use nori_tui_components::MotionScene; +use nori_tui_components::MotionState; + +/// Only the scene 1 <-> 2 zoom; no foreground widgets or reserved regions. +pub struct Story { + motion: MotionState, + pub formation: MotionFormation, + leg_elapsed: Duration, + pub zooming_in: bool, +} + +impl Story { + pub fn new(muster: bool) -> Self { + let mut motion = MotionState::default(); + motion.advance(Duration::from_secs(12)); + motion.set_scene(MotionScene::Formations); + Self { + motion, + formation: if muster { + MotionFormation::Muster + } else { + MotionFormation::Platoon + }, + leg_elapsed: Duration::ZERO, + zooming_in: true, + } + } + + pub fn advance(&mut self, mut delta: Duration) { + let leg = Duration::from_secs(3); + while !delta.is_zero() { + let step = delta.min(leg - self.leg_elapsed); + self.motion.advance(step); + self.leg_elapsed += step; + delta -= step; + if self.leg_elapsed == leg { + self.leg_elapsed = Duration::ZERO; + self.zooming_in = !self.zooming_in; + self.motion.set_scene(if self.zooming_in { + MotionScene::Formations + } else { + MotionScene::Dots + }); + } + } + } + + pub fn phase(&self) -> f64 { + let progress = self.leg_elapsed.as_secs_f64() / 3.0; + if self.zooming_in { + progress + } else { + 1.0 - progress + } + } + + pub fn widget(&self) -> MotionBackground<'_> { + MotionBackground::new(&self.motion) + .palette(MotionPalette::nori()) + .formation(self.formation) + } +} diff --git a/nori-rs/tui-components/scripts/summarize-motion-profile.py b/nori-rs/tui-components/scripts/summarize-motion-profile.py new file mode 100644 index 000000000..fb66279e0 --- /dev/null +++ b/nori-rs/tui-components/scripts/summarize-motion-profile.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +"""Summarize raw motion_storybook CSVs (plain or gzip), without external packages.""" +import argparse +import csv +import gzip +import math +import statistics +from collections import defaultdict +from pathlib import Path + + +def percentile(values, fraction): + ordered = sorted(values) + return ordered[max(0, math.ceil(len(ordered) * fraction) - 1)] + + +def summarize(rows): + budget = 1_000_000 / float(rows[0]['fps']) + result = {'frames': len(rows)} + for key in ['widget_us', 'output_us', 'reset_us', 'total_us', 'diff_probe_us', + 'changed_cells', 'ansi_bytes', 'write_calls', 'interval_us']: + values = [float(row[key]) for row in rows if row[key]] + if values: + result.update({f'{key}_mean': statistics.mean(values), + f'{key}_p50': percentile(values, .50), + f'{key}_p95': percentile(values, .95), + f'{key}_p99': percentile(values, .99), + f'{key}_max': max(values)}) + result['work_over_budget_pct'] = sum(float(row['total_us']) > budget for row in rows) * 100 / len(rows) + if rows[0]['mode'] == 'live': + intervals = [float(row['interval_us']) for row in rows] + result['produced_fps'] = 1_000_000 / statistics.mean(intervals) + result['intervals_over_1_5_budget_pct'] = sum(t > budget * 1.5 for t in intervals) * 100 / len(intervals) + return result + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('inputs', nargs='+', type=Path) + parser.add_argument('--output', required=True, type=Path) + args = parser.parse_args() + groups, phases = defaultdict(list), defaultdict(list) + for path in args.inputs: + opener = gzip.open if path.suffix == '.gz' else open + with opener(path, 'rt') as stream: + rows = list(csv.DictReader(stream)) + for row in rows: + # Exclude the first full repaint/startup frame of every measured run. + if int(row['frame']) == 0: + continue + key = tuple(row[k] for k in ['mode', 'build', 'width', 'height', 'variant', 'fps']) + groups[key].append(row) + phase = float(row['phase']) + band = 'early_0-.45' if phase < .45 else 'middle_.45-.75' if phase < .75 else 'late_.75-1' + phases[key + (band,)].append(row) + args.output.mkdir(parents=True, exist_ok=True) + for name, data in [('summary', groups), ('phases', phases)]: + records = [] + for key, rows in sorted(data.items()): + record = dict(zip(['mode', 'build', 'width', 'height', 'variant', 'fps', 'phase_band'], key)) + record.update(summarize(rows)) + records.append(record) + columns = list(dict.fromkeys(k for record in records for k in record)) + with (args.output / f'{name}.csv').open('w') as stream: + writer = csv.DictWriter(stream, columns) + writer.writeheader() + writer.writerows(records) + print(args.output / f'{name}.csv') + + +if __name__ == '__main__': + main() diff --git a/nori-rs/tui-components/src/lib.rs b/nori-rs/tui-components/src/lib.rs index 817e192b5..f0172bce3 100644 --- a/nori-rs/tui-components/src/lib.rs +++ b/nori-rs/tui-components/src/lib.rs @@ -7,6 +7,7 @@ pub mod detail; pub mod markdown; pub mod menu; +pub mod motion; pub mod picker; pub mod primitives; pub mod theme; @@ -33,6 +34,11 @@ pub use menu::MenuRowPattern; pub use menu::MenuShortcut; pub use menu::MenuState; pub use menu::OverlayMenu; +pub use motion::MotionBackground; +pub use motion::MotionFormation; +pub use motion::MotionPalette; +pub use motion::MotionScene; +pub use motion::MotionState; pub use picker::Picker; pub use picker::PickerAction; pub use picker::PickerColumn; diff --git a/nori-rs/tui-components/src/motion/fields.rs b/nori-rs/tui-components/src/motion/fields.rs new file mode 100644 index 000000000..62849cd13 --- /dev/null +++ b/nori-rs/tui-components/src/motion/fields.rs @@ -0,0 +1,349 @@ +//! Cell-space adaptation of the supplied Nori Motion Suite canvas formulas. +//! Two horizontal and four vertical samples form one terminal braille cell. + +use std::f64::consts::TAU; + +use ratatui::layout::Rect; + +use super::MotionFormation; + +const BAYER: [[i32; 4]; 4] = [[0, 8, 2, 10], [12, 4, 14, 6], [3, 11, 1, 9], [15, 7, 13, 5]]; +const BITS: [[i32; 2]; 4] = [[1, 8], [2, 16], [4, 32], [64, 128]]; +const DOTS: [char; 5] = [' ', '·', '∘', '○', '●']; +const ASCII: [char; 5] = [' ', '.', ':', 'o', '*']; + +pub(super) fn smooth(value: f64) -> f64 { + let value = value.clamp(0.0, 1.0); + value * value * (3.0 - 2.0 * value) +} + +fn hash(x: i32, y: i32, z: i32) -> f64 { + let mut h = x + .wrapping_mul(374_761_393) + .wrapping_add(y.wrapping_mul(668_265_263)) + .wrapping_add(z.wrapping_mul(1_274_126_177)); + h = (h ^ ((h as u32 >> 13) as i32)).wrapping_mul(1_274_126_177); + f64::from((h ^ ((h as u32 >> 16) as i32)) as u32) / f64::from(u32::MAX) +} + +fn noise(x: f64, y: f64, t: f64) -> f64 { + let mut value = 0.0; + let sx = smooth(x - x.floor()); + let sy = smooth(y - y.floor()); + let st = smooth(t - t.floor()); + for dz in 0..2 { + for dy in 0..2 { + for dx in 0..2 { + value += hash( + x.floor() as i32 + dx, + y.floor() as i32 + dy, + t.floor() as i32 + dz, + ) * if dx == 0 { 1.0 - sx } else { sx } + * if dy == 0 { 1.0 - sy } else { sy } + * if dz == 0 { 1.0 - st } else { st }; + } + } + } + value +} + +pub(super) struct Sample { + pub glyph: char, + pub intensity: f64, + pub highlight: bool, +} + +pub(super) struct Field { + width: f64, + height: f64, + time: f64, + phase: f64, + scale: f64, + shape: f64, + lines: f64, + formation: MotionFormation, +} + +impl Field { + pub fn new(area: Rect, time: f64, phase: f64, formation: MotionFormation) -> Self { + let morph = if phase < 3.0 { + (phase - 2.0).max(0.0) * 0.55 + } else { + 0.55 + (phase - 3.0) * 0.45 + }; + Self { + width: f64::from(area.width) * 2.0, + height: f64::from(area.height) * 4.0, + time, + phase, + scale: if phase < 1.0 { + 28.0_f64.powf(1.0 - phase) + } else { + 28.0 + 8.0 * smooth(morph / 0.55) + }, + shape: smooth(morph / 0.6), + lines: smooth((morph - 0.55) / 0.45), + formation, + } + } + + pub fn cell(&self, x: i32, y: i32, ascii: bool) -> Sample { + let threshold = + (f64::from(BAYER[y.rem_euclid(4) as usize][x.rem_euclid(4) as usize]) + 0.5) / 16.0; + let braille = !ascii + && ((self.phase < 1.5 && threshold < smooth((self.phase.min(1.0) - 0.45) / 0.55)) + || self.lines > 0.5); + let mut sum = 0.0; + let glyph = if braille { + let mut bits = 0; + for sy in 0..4 { + for sx in 0..2 { + let fx = x * 2 + sx; + let fy = y * 4 + sy; + let value = self.value(f64::from(fx), f64::from(fy)); + sum += value / 8.0; + let threshold = + (f64::from(BAYER[fy.rem_euclid(4) as usize][fx.rem_euclid(4) as usize]) + + 0.5) + / 16.0; + if value > threshold { + bits |= BITS[sy as usize][sx as usize]; + } + } + } + if bits == 0 { + ' ' + } else { + char::from_u32(0x2800 + bits as u32).unwrap_or(' ') + } + } else { + sum = self.value(f64::from(x * 2 + 1), f64::from(y * 4 + 2)); + let level = (sum.clamp(0.0, 0.999) * 4.0 + threshold).floor() as usize; + if ascii { ASCII[level] } else { DOTS[level] } + }; + let fade = if (1.0..2.0).contains(&self.phase) { + 1.0 - smooth(1.0 - (2.0 * (self.phase - 1.0) - 1.0).abs()) + } else { + 1.0 + }; + let eye = if self.phase >= 2.0 && self.lines < 0.7 { + self.eye(x, y) + } else { + None + }; + Sample { + glyph: eye.unwrap_or(glyph), + intensity: if eye.is_some() { + 0.8 * fade + } else { + (0.15 + sum * 0.35) * fade + }, + highlight: eye.is_some() || self.lines > 0.5, + } + } + + fn value(&self, fx: f64, fy: f64) -> f64 { + if self.phase < 1.5 { + let z = self.phase.min(1.0); + let scale = if self.phase >= 1.0 { 1.0 } else { self.scale }; + let wx = (fx - self.width / 2.0) / scale + self.time * 0.02; + let wy = (fy - self.height / 2.0) / scale + self.time * 0.008; + let phase = hash(wx.floor() as i32, wy.floor() as i32, 0) * TAU; + let speed = 0.5 + hash(wx.floor() as i32, wy.floor() as i32, 1) * 0.9; + let t = self.time * 0.5; + let u = (wx - wx.floor() - 0.5) * 2.0; + let v = (wy - wy.floor() - 0.5) * 2.0; + let mx = 0.26 * (t * 0.43 * speed + phase).sin(); + let my = 0.26 * (t * 0.31 * speed + phase * 1.7).cos(); + let window = ((1.0 - u.abs().max(v.abs())) * 2.2).clamp(0.0, 1.0); + let dots = (1.0 - (u - mx).hypot(v - my) * 0.85).max(0.0) + * (0.5 + 0.5 * (t * speed + phase).sin()) + * 1.15 + * window; + let mix = smooth((z - 0.75) / 0.25); + // Avoid paying for dense formations until the zoom reaches them. + return if mix == 0.0 { + dots + } else { + dots + (self.formations(fx, fy) - dots) * mix + }; + } + let wx = (fx - self.width / 2.0) / self.scale + 0.5; + let wy = (fy - self.height / 2.0) / self.scale + 0.5; + let i = wx.floor() as i32; + let j = wy.floor() as i32; + let u = (wx - wx.floor() - 0.5) * 2.0; + let v = (wy - wy.floor() - 0.5) * 2.0; + let phase = hash(i, j, 0) * TAU; + let pulse = 0.5 + 0.5 * (self.time * 0.4 + phase).sin(); + let height = if hash(i, j, 4) < 0.18 { + 0.0 + } else { + (0.45 + 0.25 * hash(i, j, 5)) + * (0.5 + 0.5 * pulse).max(self.lines * (0.85 + 0.15 * pulse)) + }; + let edge = u.abs().max(v.abs()); + let blob = (1.0 - u.hypot(v - 0.25) * 1.8).max(0.0) * (0.35 + 0.65 * pulse); + let sandbox = if edge > 0.64 && edge < 0.84 { + blob.max(0.28) + } else if edge < 0.92 { + blob.max(0.12) + } else { + 0.0 + }; + let c = v.clamp(0.18 - height, 0.18); + let body = (0.46 * u).abs() / 0.38 + (v - c).abs() / 0.34; + let top = (0.46 * u).abs() / 0.38 + (v - (0.18 - height)).abs() / 0.34; + let bottom = (0.46 * u).abs() / 0.38 + (v - 0.18).abs() / 0.34; + let creature = if body <= 1.0 { + let glow = (1.0 - u.hypot((v - 0.18 + height * 0.22) * 1.5) * 2.3).max(0.0); + (0.18 + 0.45 * glow * pulse).max(if body > 0.78 || (top - 1.0).abs() < 0.12 { + 0.42 + } else { + 0.0 + }) + } else { + 0.0 + }; + let wire = if (body - 1.0).abs() < 0.085 + || (top - 1.0).abs() < 0.085 + || ((bottom - 1.0).abs() < 0.085 && v >= 0.18) + || (u.abs() < 0.055 && v > 0.18 - height + 0.34 && v < 0.52) + { + 0.9 + } else if top < 0.9 && ((u * 0.6 + v) * 12.0).rem_euclid(1.0) < 0.18 { + 0.22 + } else { + 0.0 + }; + let solid = sandbox + (creature - sandbox) * self.shape; + solid + (wire - solid) * self.lines + } + + fn formations(&self, x: f64, y: f64) -> f64 { + let t = self.time; + let quiet = 0.1 + + 0.3 * (0.5 + 0.5 * (x * 0.01 + y * 0.014 + t * 0.12).sin()) + + 0.2 * noise(x * 0.022, y * 0.013, t * 0.1); + // Four 16-second formations, each separated by eight seconds of quiet. + let segment = match self.formation { + MotionFormation::Cycle => (t / 24.0).floor() as i32, + MotionFormation::Platoon => 0, + MotionFormation::Muster => 3, + }; + let local = t.rem_euclid(24.0) - 8.0; + let fade = match self.formation { + MotionFormation::Cycle => smooth(local / 1.6) * smooth((16.0 - local) / 1.6), + MotionFormation::Platoon | MotionFormation::Muster => 1.0, + }; + if fade == 0.0 { + return quiet; + } + let formation = match segment.rem_euclid(4) { + 0 => { + let lane = (y / 22.0).floor() as i32; + let speed = [-11.0, -5.0, 5.0][lane.rem_euclid(3) as usize]; + let lx = (x - t * speed + f64::from(lane) * 18.0).rem_euclid(36.0); + let ly = y.rem_euclid(22.0); + if (2.0..32.0).contains(&lx) && (2.0..18.0).contains(&ly) { + if ((ly - 2.0) / 4.0) as i32 % 2 == 0 { + 0.66 + } else { + 0.34 + } + } else { + quiet * 0.35 + } + } + 1 => { + let u = (x * 0.55 + y) / 22.0 + t * 0.03; + let v = (x * 0.55 - y) / 22.0 - t * 0.13; + let edge = u + .rem_euclid(1.0) + .min(1.0 - u.rem_euclid(1.0)) + .min(v.rem_euclid(1.0).min(1.0 - v.rem_euclid(1.0))); + if edge < 0.06 { + 0.66 + } else if (u.floor() as i32 + v.floor() as i32) % 2 == 0 { + 0.12 + } else { + 0.46 + } + } + 2 => { + let mut value = quiet; + for k in 0..6 { + let angle = f64::from(k) * TAU / 6.0 + t * 0.11; + let px = x - self.width * (0.5 + angle.cos() * 0.32); + let py = y - self.height * (0.5 + angle.sin() * 0.32); + let size = self.width.min(self.height) * 0.06; + if (px - size * 0.4).abs().max((py + size * 0.4).abs()) < size + || (px + size * 0.4).abs().max((py - size * 0.4).abs()) < size + { + value = 0.65; + } + } + value + } + _ => { + let depth = 50.0 + y; + let row = 14.0 * depth.ln() - t * 0.9; + let col = (x - self.width / 2.0) * 22.0 / depth; + if (col.floor() as i32).rem_euclid(7) == 0 + || (row.floor() as i32).rem_euclid(8) == 0 + { + 0.05 + } else { + 0.28 + 0.3 + * smooth(row.rem_euclid(1.0) * 3.0) + * smooth(col.rem_euclid(1.0) * 3.0) + } + } + }; + quiet + (formation - quiet) * fade + } + + fn eye(&self, x: i32, y: i32) -> Option { + if self.shape < 0.8 { + return None; + } + let wx = (f64::from(x * 2 + 1) - self.width / 2.0) / self.scale + 0.5; + let wy = (f64::from(y * 4 + 2) - self.height / 2.0) / self.scale + 0.5; + let i = wx.floor() as i32; + let j = wy.floor() as i32; + if hash(i, j, 4) < 0.18 { + return None; + } + let phase = hash(i, j, 0) * TAU; + let pulse = 0.5 + 0.5 * (self.time * 0.4 + phase).sin(); + let height = (0.45 + 0.25 * hash(i, j, 5)) * (0.5 + 0.5 * pulse); + let ey = ((f64::from(j) * self.scale + + (0.1 - height * 0.22) * self.scale / 2.0 + + self.height / 2.0 + - 2.0) + / 4.0) + .round() as i32; + let look = (self.time * 0.25 + phase).sin().round() * 0.1; + let left = + ((f64::from(i) * self.scale + (-0.17 + look) * self.scale / 2.0 + self.width / 2.0 + - 1.0) + / 2.0) + .round() as i32; + let right = + ((f64::from(i) * self.scale + (0.17 + look) * self.scale / 2.0 + self.width / 2.0 + - 1.0) + / 2.0) + .round() as i32; + if y == ey && (x == left || x == right) { + Some( + if (self.time * 0.25 + hash(i, j, 7)).rem_euclid(1.0) < 0.07 { + '-' + } else { + 'o' + }, + ) + } else { + None + } + } +} diff --git a/nori-rs/tui-components/src/motion/mod.rs b/nori-rs/tui-components/src/motion/mod.rs new file mode 100644 index 000000000..e24a9783f --- /dev/null +++ b/nori-rs/tui-components/src/motion/mod.rs @@ -0,0 +1,272 @@ +//! Deterministic animated scenery for caller-owned full-screen experiences. +//! +//! Render this layer first, then render onboarding, credentials, or other content +//! in a [`MotionBackground::quiet_area`]. The caller owns the alternate screen, +//! clock, redraw scheduling, input, and all authentication behavior. + +mod fields; + +use std::time::Duration; + +use ratatui::buffer::Buffer; +use ratatui::layout::Rect; +use ratatui::style::Color; +use ratatui::style::Modifier; +use ratatui::style::Style; +use ratatui::widgets::Widget; + +use crate::Theme; + +/// Optional fixed destination for the dot-to-braille zoom. +/// `Cycle` retains the original time-driven formation sequence. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] +pub enum MotionFormation { + #[default] + Cycle, + Platoon, + Muster, +} + +/// The five destinations in the motion suite, in visual transition order. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] +pub enum MotionScene { + #[default] + Dots, + Formations, + Sandboxes, + Creatures, + Blueprint, +} + +impl MotionScene { + pub const ALL: [Self; 5] = [ + Self::Dots, + Self::Formations, + Self::Sandboxes, + Self::Creatures, + Self::Blueprint, + ]; + + pub fn label(self) -> &'static str { + match self { + Self::Dots => "Dots", + Self::Formations => "Formations", + Self::Sandboxes => "Sandboxes", + Self::Creatures => "Creatures", + Self::Blueprint => "Blueprint", + } + } + + fn position(self) -> f64 { + match self { + Self::Dots => 0.0, + Self::Formations => 1.0, + Self::Sandboxes => 2.0, + Self::Creatures => 3.0, + Self::Blueprint => 4.0, + } + } +} + +/// Caller-held animation clock and interruptible scene transition. +/// +/// Adjacent scenes take three seconds to morph. No wall clock, background task, +/// random source, or input handling is hidden in this state. Pause by not calling +/// [`Self::advance`]. Reduced motion freezes scenery and switches scenes instantly. +#[derive(Clone, Debug, Default)] +pub struct MotionState { + scene: MotionScene, + position: f64, + elapsed: Duration, + reduced_motion: bool, +} + +impl MotionState { + pub fn new(scene: MotionScene) -> Self { + Self { + scene, + position: scene.position(), + ..Self::default() + } + } + + /// The requested destination, including while a transition is in progress. + pub fn scene(&self) -> MotionScene { + self.scene + } + + pub fn set_scene(&mut self, scene: MotionScene) { + self.scene = scene; + if self.reduced_motion { + self.position = scene.position(); + } + } + + pub fn set_reduced_motion(&mut self, reduced: bool) { + self.reduced_motion = reduced; + if reduced { + self.position = self.scene.position(); + } + } + + pub fn reduced_motion(&self) -> bool { + self.reduced_motion + } + + pub fn advance(&mut self, delta: Duration) { + if self.reduced_motion { + return; + } + self.elapsed = self.elapsed.saturating_add(delta); + let distance = self.scene.position() - self.position; + self.position += distance.signum() * distance.abs().min(delta.as_secs_f64() / 3.0); + } +} + +/// Explicit scenery styles, separate from the semantic colors of foreground UI. +#[derive(Clone, Copy, Debug)] +pub struct MotionPalette { + pub surface: Style, + pub ink: Style, + pub highlight: Style, +} + +impl MotionPalette { + /// Terminal-compatible default; never invents a background color. + pub fn from_theme(theme: Theme) -> Self { + Self { + surface: theme.surface, + ink: theme.muted, + highlight: theme.muted, + } + } + + /// Opt-in, true-color art direction from the Nori Motion Suite mockup. + /// The caller must also give foreground content suitable contrasting colors. + #[allow(clippy::disallowed_methods)] + pub fn nori() -> Self { + Self { + surface: Style::new().bg(Color::Rgb(10, 15, 12)), + ink: Style::new().fg(Color::Rgb(125, 214, 160)), + highlight: Style::new().fg(Color::Rgb(214, 255, 224)), + } + } + + #[allow(clippy::disallowed_methods)] + fn style(self, intensity: f64, highlight: bool) -> Style { + let ink = if highlight { self.highlight } else { self.ink }; + let mut style = self.surface.patch(ink); + if let (Some(Color::Rgb(r, g, b)), Some(Color::Rgb(br, bg, bb))) = (ink.fg, self.surface.bg) + { + // Quantization keeps subtle field changes from repainting every cell. + let amount = (intensity.clamp(0.0, 1.0) * 16.0).round() / 16.0; + let mix = |base, top| (f64::from(base) + f64::from(top - base) * amount) as u8; + style = style.fg(Color::Rgb( + mix(i32::from(br), i32::from(r)), + mix(i32::from(bg), i32::from(g)), + mix(i32::from(bb), i32::from(b)), + )); + } else if intensity < 0.3 { + style = style.add_modifier(Modifier::DIM); + } + style + } +} + +impl Default for MotionPalette { + fn default() -> Self { + Self::from_theme(Theme::default()) + } +} + +/// Background widget with an optional blank content region and soft outer falloff. +/// +/// Work is bounded by the visible cell count, with at most eight field samples per +/// cell. Choose a cadence using measurements at the intended viewport. Unicode assumes a font with +/// single-cell braille and geometric symbols; use [`Self::ascii`] for a fallback. +#[derive(Clone, Debug)] +pub struct MotionBackground<'a> { + state: &'a MotionState, + palette: MotionPalette, + quiet_area: Option, + ascii: bool, + formation: MotionFormation, +} + +impl<'a> MotionBackground<'a> { + pub fn new(state: &'a MotionState) -> Self { + Self { + state, + palette: MotionPalette::default(), + quiet_area: None, + ascii: false, + formation: MotionFormation::Cycle, + } + } + + pub fn palette(mut self, palette: MotionPalette) -> Self { + self.palette = palette; + self + } + + /// Absolute terminal coordinates. This region is cleared, not preserved; + /// foreground widgets must be rendered after the background on each frame. + pub fn quiet_area(mut self, area: Rect) -> Self { + self.quiet_area = Some(area); + self + } + + pub fn ascii(mut self, enabled: bool) -> Self { + self.ascii = enabled; + self + } + + /// Pin a formation for repeatable zooms instead of the ambient cycle. + pub fn formation(mut self, formation: MotionFormation) -> Self { + self.formation = formation; + self + } +} + +impl Widget for MotionBackground<'_> { + fn render(self, area: Rect, buf: &mut Buffer) { + // Keep coordinates relative to the original area when the buffer clips it. + let visible = area.intersection(buf.area); + // Bound the floating-point clock even for a caller supplying Duration::MAX. + let time = (self.state.elapsed.as_secs() % 86_400) as f64 + + f64::from(self.state.elapsed.subsec_nanos()) / 1e9; + let field = fields::Field::new(area, time, self.state.position, self.formation); + let quiet = self.quiet_area.filter(|rect| !rect.is_empty()); + for y in visible.top()..visible.bottom() { + for x in visible.left()..visible.right() { + let cell = &mut buf[(x, y)]; + cell.reset(); + cell.set_style(self.palette.surface); + let fade = quiet.map_or(1.0, |rect| { + let dx = (i32::from(rect.left()) - i32::from(x)) + .max(i32::from(x) - i32::from(rect.right()) + 1) + .max(0); + let dy = (i32::from(rect.top()) - i32::from(y)) + .max(i32::from(y) - i32::from(rect.bottom()) + 1) + .max(0); + fields::smooth((f64::from(dx).hypot(f64::from(dy) * 2.0)) / 6.0) + }); + if fade == 0.0 { + continue; + } + let sample = field.cell(i32::from(x - area.x), i32::from(y - area.y), self.ascii); + if sample.glyph == ' ' || sample.intensity * fade < 0.035 { + continue; + } + cell.set_char(sample.glyph); + cell.set_style( + self.palette + .style(sample.intensity * fade, sample.highlight), + ); + } + } + } +} + +#[cfg(test)] +mod tests; diff --git a/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__blueprint_32x12.snap b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__blueprint_32x12.snap new file mode 100644 index 000000000..b16a61ff8 --- /dev/null +++ b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__blueprint_32x12.snap @@ -0,0 +1,16 @@ +--- +source: tui-components/src/motion/tests.rs +expression: terminal.backend().to_string() +--- +" " +" " +" " +"⠢⢤⢀ ⢀⠤⠤⢄ ⢀⣀⠤⠐" +" ⠁ ⢍⢒⣤⠄ ⣀⠠⠔⠚⠉⠁ ⠄ ⠈⠙⠒⠤⢀⡀ ⢶⡬⢅⣄ " +"⠤⠐⠊⠁ ⣽⠇ ⢿⡝⠒⠤⢁⡀⠄ ⠁ ⣄⠠⠔⠛⣽⠇ ⢿⡅ ⠉⠐" +" ⣽⠇ ⢿⡅ ⠈⠑⠐⠕⠐⠉ ⣽⠇ ⢿⡅ " +"⢀⡠⠤⠐⠉⠁ ⠉⠑⠠⠤⣀ ⠇ ⢀⡠⠤⠐⠉⠁ ⠉⠑⠠⠤⣀" +"⠁ ⠉⠐⠓⠈⠁ " +" " +" " +" " diff --git a/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__blueprint_80x24.snap b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__blueprint_80x24.snap new file mode 100644 index 000000000..95413d74f --- /dev/null +++ b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__blueprint_80x24.snap @@ -0,0 +1,28 @@ +--- +source: tui-components/src/motion/tests.rs +expression: terminal.backend().to_string() +--- +"⢀⠤⠒⠈⠉⠔⠢⢄⢀ ⢀⢀⠤⠢⢄⢀ ⢀⢀⠤⠖⠉⠁ ⠁⠄⠉⠑⠢⢄⢀ ⢀⣀⠤⠐⠓⠤⢄⣀" +" ⠁ ⠁ ⢉⢒⣤⠄ ⢀⣀⠤⠐⠊⠁⠁ ⠉⠒⠠⢄⣀ ⢾⡕⠢⢄⢀ ⠁ ⢁⢀⠤⠒⣽⠆ ⢀⣤⠒⠌⠁ ⠁ ⠁" +"⠓⠠⢄⡀ ⣁⠤⠐⠊⠁ ⣽⠇ ⢿⡍⠒⠠⢅⡀⠄ ⠁ ⣄⠤⠐⠋⣽⠇ ⢿⡅ ⠉⠒⠠⠤⠑⠊⠁ ⣽⠇ ⢀⠠⠤⠢⠤⢀ ⢿⡅⠉⠐⠣⢄⢄ ⢁⢀⠤" +" ⠈⠏ ⣽⠇ ⢿⡅ ⠈⠉⠐⠕⠈⠉ ⣽⠇ ⢿⡅ ⠇ ⣽⠇ ⢀⡠⠤⠐⠍⠁ ⠁⠄ ⠉⠑⠠⠤⣀ ⢿⡅ ⠈⠉⠏⠉ " +"⠤⣀ ⠇ ⢀⡠⠤⠐⠉⠁ ⠉⠑⠠⠤⣀ ⠇ ⢀⡠⠤⠐⠉⠁ ⠉⠑⠠⠤⣀ ⠇ ⢀⡠⠤⠐⠉⠁ ⠉⠑⠠⠤⣀⠁ ⢀⡡⠤⠐⠉⠁ ⠉⠑⠠⠤⣀ ⠇ ⢀⡠" +" ⠉⠐⠓⠈⠁ ⠉⠐⠓⠈⠁ ⠉⠐⠓⠈⠁ ⠉⠐⠒⠈⠁ ⠉⠐⠓⠈⠁ " +" " +" " +" ⣀⠠⠔⠒⠤⢀⡀ ⢀⢀ " +"⠍ ⠁⠄ ⠈⠑⠰⠤⣀ ⢀⢠⠤⠒⠉⠉⠕⠢⢤⢀ ⢀⠤⠤⢄ ⢀⣀⠤⠐⠊⠁⠁⠍⠒⠠⢄⣀ " +"⠤⣀⠁ ⠄ ⢀⡡⠴⠐⠉⣽⠇ ⢤⣔⢊⠅ ⠁ ⠄ ⠁ ⢍⢒⣤⠄ ⣀⠠⠔⠚⠉⠁ ⠄ ⠈⠙⠒⠤⢀⡀ ⢶⡬⢅⣄ ⠁ ⠄ ⠁⢀⣀⠭⣴⠆ " +" ⠉⠑⠖⠉⠁ ⣽⠇ ⢿⡅ ⠉⠒⠠⢄⣀⢀⣁⠤⠐⠊⠁ ⣽⠇ ⢿⡝⠒⠤⢁⡀⠄ ⠁ ⣄⠠⠔⠛⣽⠇ ⢿⡅ ⠉⠐⠦⢄⢀⠥⠖⠈⠁ ⣽⠇ ⢀⠠⠤⠢⠤⢀ " +" ⠇ ⣽⠇ ⢿⡅ ⠇ ⣽⠇ ⢿⡅ ⠈⠑⠐⠕⠐⠉ ⣽⠇ ⢿⡅ ⠇ ⣽⠇ ⢀⡠⠤⠐⠍⠁ ⠁⠄ ⠉" +"⠤⣀ ⠇ ⢀⡠⠤⠐⠉⠁ ⠉⠑⠠⠤⣀ ⠇ ⢀⡠⠤⠐⠉⠁ ⠉⠑⠠⠤⣀ ⠇ ⢀⡠⠤⠐⠉⠁ ⠉⠑⠠⠤⣀ ⠇ ⢀⡠⠤⠐⠉⠁ ⠉⠑⠠⠤⣀⠁ ⢀⡡" +" ⠉⠐⠓⠈⠁ ⠉⠐⠓⠈⠁ ⠉⠐⠓⠈⠁ ⠉⠐⠓⠈⠁ ⠉⠐⠒⠈⠁ " +" " +" " +" ⢀⡠⠤⣀ " +" ⢀⠠⠤⠖⠉⠁ ⠄⠉⠑⠢⠤⢀ ⣀⠤⠔⠒⠤⢄⡀ ⣀⠤⠔⠊⠉⠈⠍⠒⠤" +" ⢿⡕⠢⠤⢀ ⠁ ⠄ ⢁⠠⠤⠒⣽⠇ ⢀⡤⠔⠌⠉ ⠁ ⠄ ⠉⠉⠔⠤⣄ ⢴⡴⢍⡄ ⠁ ⠄ ⠁" +" ⢀⠠⠤⠢⠤⢀ ⢿⡅ ⠉⠑⠠⠤⠑⠉⠁ ⣽⠇ ⢀⠠⠤⠢⠤⢀ ⢿⡍⠉⠐⠥⢄⠄ ⠁⢀⠤⠔⠈⠉⣽⠇ ⢿⡅ ⠈⠑⠐⠤⣀⢀⡡⠔⠐" +"⠍⠁ ⠁⠄ ⠉⠑⠠⠤⣀ ⢿⡅ ⠇ ⣽⠇ ⢀⡠⠤⠐⠍⠁ ⠁⠄ ⠉⠑⠠⠤⣀ ⢿⡅ ⠈⠙⠟⠉ ⣽⠇ ⢿⡅ ⠇ " +"⠤⣀⠁ ⠄ ⢀⡡⠤⠐⠉⠁ ⠉⠑⠠⠤⣀ ⠇ ⢀⡠⠤⠐⠉⠁ ⠉⠑⠠⠤⣀⠁ ⠄ ⢀⡡⠤⠐⠉⠁ ⠉⠑⠠⠤⣀ ⠇ ⢀⡠⠤⠐⠉⠁ ⠉⠑⠠⠤⣀ ⠇ ⢀⡠" +" ⠉⠐⠒⠈⠁ ⠉⠐⠓⠈⠁ ⠉⠐⠒⠈⠁ ⠉⠐⠓⠈⠁ ⠉⠐⠓⠈⠁ " diff --git a/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__creatures_32x12.snap b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__creatures_32x12.snap new file mode 100644 index 000000000..ae464c6a2 --- /dev/null +++ b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__creatures_32x12.snap @@ -0,0 +1,16 @@ +--- +source: tui-components/src/motion/tests.rs +expression: terminal.backend().to_string() +--- +" " +" " +" " +"∘ ∘∘" +" · ·· ·∘·∘ ∘·· ·" +"∘ ··∘ ∘·· ··· ···· ∘· ··" +"·· ·· ∘ ···o· o ∘ ·· ∘ · ·" +"∘∘ ∘∘····∘∘ ∘∘" +" " +" " +" " +" " diff --git a/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__creatures_80x24.snap b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__creatures_80x24.snap new file mode 100644 index 000000000..247c02918 --- /dev/null +++ b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__creatures_80x24.snap @@ -0,0 +1,28 @@ +--- +source: tui-components/src/motion/tests.rs +expression: terminal.backend().to_string() +--- +" ∘· ∘·· · · ∘· " +"· ··· ··∘· ∘∘ ·∘∘ ·∘∘· ··· ··∘·∘ ∘··· " +"······ ∘··· ∘ · ··· · · ·· ∘ · ·o∘·o·· ·· ∘· ∘ · · · · ·" +"·o∘·o·····∘ ∘···o∘·o∘∘···∘ ∘····∘∘○∘∘···∘ ∘∘··∘·····∘∘ ∘··∘∘o··o∘∘" +"·∘ · ··∘ ·∘ ····∘ ·∘ · ··∘ ·∘ ····∘ ·∘ · ··∘" +" " +" " +" " +" ∘· " +"· ··· ··∘· ∘∘ ·∘∘ ∘∘· ··∘· " +"·· · · ∘··· ∘ · · · · · ·· ·∘·∘ ∘·· · · · · ∘· " +"·o∘·o·····∘ ∘···∘o·∘o∘···∘ ∘··········∘ ∘····o·∘o····∘ ∘∘ " +" ··∘·∘·· ·· ∘ ····∘∘∘·· ·· ∘ ···o· o ∘ ·· ∘ ····∘∘∘·· ·· ·∘ · · · ·" +"∘·····∘∘ ∘∘····∘· ∘·····∘∘ ∘∘····∘· ∘·····∘∘" +" " +" " +" " +" " +" ·· · · ∘ ∘· " +" ∘∘··········∘∘ ∘········∘ ∘····∘ " +" ∘· ∘ · o·∘o∘ · ·· ∘· ∘ ∘ ····· ···· ∘ · · · · ·" +"··∘∘∘·∘·∘· ∘· ··∘∘∘∘∘···∘ ∘∘··∘·∘···∘· ∘· ··∘o∘·o···∘ ·····o··o∘·" +"·∘·····∘ ·∘ · ··∘ ·∘·····∘ ·∘·····∘ ·∘ · ··∘" +" " diff --git a/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__dots_32x12.snap b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__dots_32x12.snap new file mode 100644 index 000000000..404d7568d --- /dev/null +++ b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__dots_32x12.snap @@ -0,0 +1,16 @@ +--- +source: tui-components/src/motion/tests.rs +expression: terminal.backend().to_string() +--- +" ··∘·∘·∘·· ·∘∘∘∘∘···· ··∘" +"··∘·∘∘∘···· ∘∘○○●○○∘∘·· ··∘∘" +" ········· ··○○●●●○○·· ··∘" +"· ······· · ∘∘○○●○○∘∘·· · ··" +" ····· · · " +" " +" · ··· · · " +"·∘∘∘○∘∘∘∘·· · · · · " +"·∘∘○○○∘○·∘ " +"·∘○○●○○∘∘·· · · · · " +"·∘∘○○○∘∘·∘ " +"········· · · · " diff --git a/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__dots_80x24.snap b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__dots_80x24.snap new file mode 100644 index 000000000..6eeda9e6a --- /dev/null +++ b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__dots_80x24.snap @@ -0,0 +1,28 @@ +--- +source: tui-components/src/motion/tests.rs +expression: terminal.backend().to_string() +--- +"○○∘∘·· · · · · ·∘○∘○○○∘∘·· · · · " +"○○○∘∘·· · · · · · ··○○●●●●○∘∘ · · ··· · · · · · " +"∘∘·∘·· · · ∘∘○○●○○○○·· · · · " +"··· · · · ····∘·∘·∘·· · · · · · · " +" " +"∘·∘·∘·· · · · · · · ······· · ······· · · ··∘·∘·∘·· · · · " +"○○○○∘∘· ······· ··∘·∘·∘·· · ∘∘∘∘∘·∘·· ··∘∘○∘○∘∘·· · · · · ·" +"○○○○○∘· ··∘∘∘·∘·· · ··∘·∘∘∘·∘·· ∘∘○○○○○∘∘·· ··∘∘○∘○∘○∘· · ········· " +"∘∘∘∘·∘ ··∘·∘···· ······· · ··○○●●●∘∘∘∘ ··∘·∘∘∘·· · · · · ·" +"∘·∘···· ··∘·∘···· ······· · ∘∘○○●○○∘∘·· ····∘···· · · · · · " +" · · · · · ······· " +" · · · · · " +" · · · ······· ·∘·∘∘∘∘∘·· " +"· ··· · ·∘∘∘○∘∘·· ··∘∘○∘∘∘∘·· · · · · ∘∘○○●●●○○∘· " +" ····· ··○○○○○∘∘·· ·∘∘○○○∘∘∘∘ ··∘○●●●○○∘∘·· ·" +"······· ·∘○●●●○●∘∘·· ∘∘○○●○○∘○∘· · · · · · · · · · ·∘○○○○○∘∘·· " +" · · · ··○○●○○∘∘·· ··∘∘○∘○∘∘·· ··∘·∘·∘·· ·" +"· · · · ··∘·∘···· · ······· · · · · · " +" " +"··· · ······· · · · · · · · · · · · ····∘·∘···· ······· · " +"·∘·· · ·∘∘∘∘∘···· · · · · · · · ··∘∘∘∘∘·· ··∘∘∘∘∘·· " +"○∘○∘∘·· ∘∘○○○○○∘∘·· ········· · · ······· ··∘∘○∘○∘∘·· ·∘○○●○○○○∘· " +"○○∘∘·· ··○○●○○∘∘·· ··∘·∘···· · · · · ··∘∘∘·∘·· ··∘○●●●●●∘∘·· " +"○○○∘∘·· ∘∘○○○∘○∘∘·· ····∘······ · · · · · ····∘·∘···· ·∘○○●●●○○∘∘ " diff --git a/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__fade.snap b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__fade.snap new file mode 100644 index 000000000..5d9916875 --- /dev/null +++ b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__fade.snap @@ -0,0 +1,22 @@ +--- +source: tui-components/src/motion/tests.rs +expression: terminal.backend().to_string() +--- +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" ⢕⢝⢕⢝⢕⢝⢕⢝⢕ " +" ⢝⢕⢝⢕⢝⢕⢝⢕⢝⢕⢝⢕ " +" ⢝⢕⢝⢕⢝⢕⢝⢕⢝⢕⢝⢕⢝ " +"⢝⢕⢝⢕⢝⢕⢕ ⢝⢕⢝⢕⢝⢕⢝⢕⢝⢕⢝⢕⢝ " +"⢝⢕⢝⢕⢝⢕⢝⢕⢝ ⢕⢝⢕⢝⢕⢝⢕⢝⢕⢝⢕⢝ " +"⢝⢕⢝⢕⢝⢕⢝⢕⢝⢕ ⢝⢕⢝⢕⢝⢕⢝⢕⢝⢕ " diff --git a/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__formations_32x12.snap b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__formations_32x12.snap new file mode 100644 index 000000000..5e10ce092 --- /dev/null +++ b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__formations_32x12.snap @@ -0,0 +1,16 @@ +--- +source: tui-components/src/motion/tests.rs +expression: terminal.backend().to_string() +--- +"⢅⢥⢅⢥⠁⠅⠁⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⠁⠅⠁⢥⢅⢥⢅⢥⢅⢥" +"⠝⠝⠝⠝⠁⠅⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠅⠁⠝⠝⠝⠝⠝⠝⠝" +"⢕⢥⢕⢥⠁⠅⠁⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠁⠅⠁⢥⢕⢥⢕⢥⢕⢥" +"⠝⠝⠝⠝⠁⠅⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠅⠁⠝⠝⠝⠝⠝⠝⠝" +"⠑⠅⠑⠅⠁⠅⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠅⠁⠅⠑⠅⠑⠅⠑⠅" +"⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅" +"⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠅⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅" +"⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅" +"⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠅⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅" +"⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅" +"⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅" +"⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⠁⠅⠁⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⠁⠅⠁⢥" diff --git a/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__formations_80x24.snap b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__formations_80x24.snap new file mode 100644 index 000000000..6840ec583 --- /dev/null +++ b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__formations_80x24.snap @@ -0,0 +1,28 @@ +--- +source: tui-components/src/motion/tests.rs +expression: terminal.backend().to_string() +--- +"⢅⢥⢅⢥⠁⠅⠁⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⠁⠅⠁⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⠁⠅⠁⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⠁⠅⠁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠁⠄⠁⢤" +"⠝⠝⠝⠝⠁⠅⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠅⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠅⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠄⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠄⠁⠝" +"⢕⢥⢕⢥⠁⠅⠁⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠁⠅⠁⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠁⠅⠁⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠁⠄⠁⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠁⠄⠁⢥" +"⠝⠝⠝⠝⠁⠅⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠅⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠅⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠄⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠄⠁⠝" +"⠑⠅⠑⠅⠁⠅⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠅⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠅⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠁⠅" +"⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄" +"⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠅⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠅⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠅⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠄⠁⠄⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽" +"⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅" +"⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠅⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠅⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠅⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠄⠁⠄⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽" +"⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅" +"⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄" +"⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⠁⠅⠁⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⠁⠅⠁⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⠁⠅⠁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠁⠄⠁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤" +"⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠅⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠄⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠄⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠄⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝" +"⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠁⠅⠁⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠁⠄⠁⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠁⠄⠁⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠁⠄⠁⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥" +"⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠅⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠄⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠄⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠄⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝" +"⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠅⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅" +"⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄" +"⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠄⠁⠄⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠄⠁⠄⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠄⠁⠄⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠄⠁⠄⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽" +"⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅" +"⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠄⠁⠄⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠄⠁⠄⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠄⠁⠄⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠄⠁⠄⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽" +"⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅" +"⠁⠅⠁⠅⠁⠅⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ " +"⢅⢥⢅⢥⠁⠄⠁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠁⠄⠁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠁⠄⠁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠁⠄⠁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠁ ⠁⢤" +"⠝⠝⠝⠝⠁⠄⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠄⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠄⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁⠄⠁⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠁ ⠁⠝" diff --git a/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__sandboxes_32x12.snap b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__sandboxes_32x12.snap new file mode 100644 index 000000000..eb95cd1c0 --- /dev/null +++ b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__sandboxes_32x12.snap @@ -0,0 +1,16 @@ +--- +source: tui-components/src/motion/tests.rs +expression: terminal.backend().to_string() +--- +"···· ··· ·· ·∘○∘∘···· ·· ·····" +"··∘···∘· ∘···∘···∘··· ··∘···∘·" +" " +"∘···∘··· ··∘···∘···∘· ∘···∘···" +" · · ··· ·· · · · ··· ·· · · ·" +"··∘·· ∘· ∘·· · · · ·· ··· ··∘·" +"∘○○∘···· ·· · ··· ··· ·· ·∘○○∘" +"∘○○∘∘ ·· ··· ····· ∘· ∘···∘○○∘" +"········ ············ ········" +" " +"········ ············ ········" +"· · · ·· ··· · · · ∘· ∘·· · · " diff --git a/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__sandboxes_80x24.snap b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__sandboxes_80x24.snap new file mode 100644 index 000000000..eb074d0c3 --- /dev/null +++ b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__sandboxes_80x24.snap @@ -0,0 +1,28 @@ +--- +source: tui-components/src/motion/tests.rs +expression: terminal.backend().to_string() +--- +"···· ············ ············ ············ ············ ············ ····" +" " +"···· ············ ············ ············ ············ ············ ····" +"· ·· ··· · · · ∘· ∘·· · · · ·· ··· · · · ∘· ∘·· · · · ·· ··· · · · ∘· ∘·· " +" ··· ·· · · · ··· ·· · · · ··· ·· · ··· ··· ·· · · · ··· ·· · · · ··· ·· ·" +"· ∘· ∘···∘∘○·· ·· ····∘·∘·· ∘· ∘···○○○∘∘ ·· ····∘·∘·· ∘· ∘·· ····· ·· ····" +"···· ·· ··∘∘∘ ··· ·· ··∘·· ··· ·· ·∘○∘∘···· ·· ··∘·· ··· ·· · ··· ··· ·· ·" +"∘··· ··∘···∘···∘· ∘···∘···∘··· ··∘···∘···∘· ∘···∘···∘··· ··∘···∘···∘· ∘···" +" " +"··∘· ∘···∘···∘··· ··∘···∘···∘· ∘···∘···∘··· ··∘···∘···∘· ∘···∘···∘··· ··∘·" +" ··· ·· · · · ··· ·· · · · ··· ·· · · · ··· ·· · · · ··· ·· · · · ··· ·· ·" +"· ·· ··· ··∘·· ∘· ∘·· ····· ·· ··· · · · ∘· ∘·· ····· ·· ··· · · · ∘· ∘·· " +" ··· ·· ·∘○∘∘···· ·· ·∘○○∘···· ·· · ··· ··· ·· ·∘○○∘···· ·· · ··· ··· ·· ·" +"· ∘· ∘···∘∘○∘· ·· ····∘∘○∘· ∘· ∘·· ··· · ·· ····∘∘○∘· ∘· ∘·· ··· · ·· ····" +"···· ············ ············ ············ ············ ············ ····" +" " +"···· ············ ············ ············ ············ ············ ····" +"· ∘· ∘·· · · · ·· ··· · · · ∘· ∘·· · · · ·· ··· · · · ∘· ∘·· · · · ·· ··· " +" ··· ·· · ··· ··· ·· · ··· ··· ·· · · · ··· ·· · ··· ··· ·· · · · ··· ·· ·" +"∘ ·· ····∘∘○∘· ∘· ∘···○○○∘∘ ·· ····∘∘∘·· ∘· ∘···∘∘○∘∘ ·· ··· ··∘·· ∘· ∘·· " +"···· ·· ··∘∘∘···· ·· ··∘∘∘···· ·· ··∘·· ··· ·· ··∘∘∘ ··· ·· · · · ··· ·· ·" +"··∘· ∘···∘···∘··· ··∘···∘···∘· ∘···∘···∘··· ··∘···∘···∘· ∘···∘···∘··· ··∘·" +" " +"∘··· ··∘···∘···∘· ∘···∘···∘··· ··∘···∘···∘· ∘···∘···∘··· ··∘···∘···∘· ∘···" diff --git a/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__zoom.snap b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__zoom.snap new file mode 100644 index 000000000..b96ef03de --- /dev/null +++ b/nori-rs/tui-components/src/motion/snapshots/nori_tui_components__motion__tests__zoom.snap @@ -0,0 +1,22 @@ +--- +source: tui-components/src/motion/tests.rs +expression: terminal.backend().to_string() +--- +" ⠁○⠄ ⠥·⠁ ⠭∘⠅ ⠽ ⠁·⠥·⠅ ⠐∘⠅ ⠈∘⠅ ⠠·⠅● ⠅∘ ⠉ ⠁ ⠉○⠅ ⠅ ⠁ ⠥∘⠅○ ∘⠅ " +" ⠁ ⠁ ⢐ ⢀ ⢀ ⠁ ⢑ ⠁ ⢑ ⠁ ⢑ ⠁ ⠁ ⢐ ⠁ ⢐ ⢑ ⢀ ⠑" +" ⠅∘ ⠥ ⠅ ⠁·⠁·⠅·⠭·⠁ ⠁·⠅· ∘⠅· ·⠅ ·⠅· ⠅· ∘⠅·⠤○⠄ ⠅∘⠅∘⠅○⠅○" +" ⢀ ⢀ ⢐ ⠐ · ⠁· ⠁ · ⠁· ⢑" +" ⠅·⠁ ⠅○⠁ ⠍○⠅·⠅○⠅ ⠉∘⠅○⠁·⠄○⢠ ⠁ ·⠅○ ⠅∘ ⠥· ⠅○⠅·⠅∘⠅ ⠁∘⠅·⠠ ⠁○" +" ·⢀ ⠐ ⠁· ⠁ ⠁·⢀ ⠑·⠁ ⢕ ⢐∘⠄· ⠁ ⢀ · ·⢐ ⠁∘ ⠕·⠐ ⠁" +"⠁ ⢅○⠁ ⠁·⠁ ⠁·⠁ ⠁·⠁· ∘⠅∘⢥∘⠅○ ·⠁ ·⠅● ⠅ ⢅○⠁ ⠅·⠁·⠁○⠅·⠅∘⠄ ⠉∘⠅·" +"∘ · · ·⠐· ·⠐· ∘ · ··⠐ · ·∘· ·· ·· ○ · ·· ⠄ ⠔○· ⠄" +" ○ ⠍○⠅ ⠁·⠁ ⠁·⠁ ⠁ ⠁·⠁∘⠅∘⠁·⠅○ ·⠁∘ ⢅∘⠁ ⠁ ⠁ ⢅∘⠅ ⢅ ⠁·⠉ ⠁·⠁·⠁·" +"·⠄· · ⠐·⠄∘ ⠄·⠐ ⠄ ⠐ ⠔· ⠔∘ ○⠄ ⠴·⠄∘⠐∘⠄· · ·⠄∘⠐ ⠄● ⠔○⠔ ⠄" +"⢁ ⠁∘ ⠁·⠁ ⠁ ⠁ ⠁∘⠅ ⢁ ⠁∘⢉·⠅∘⠁ ⠁·⠁·⠄ ⠅○⠁ ⠉·⠁ ⢅∘⠅ ⠅ ⠁ ⠁· ⢁·⠁○" +"∘ ⠐∘ ·⠐· ∘⠰··○ · ○⠐ ·∘⠄ ○ · ··∘⠄·· · ∘⠄○∘·⠄·∘·⠄· ⠔· ⠔" +"⢁ ⢅·⠁ ⢝ ⠁ ⠁·⠁·⠉·⠅ ⢁·⠅·⠁·⠅∘⢉ ⠁·⢀ ⠅·⢈ ⠅∘⢁ ⠙·⠑ ⢄∘⠅ ⢄∘⠅·⠁·⠁·⠙ ⠁∘" +"·⠅○⠄∘⠄·⠐·⠄∘ ·⠄·⠐ ⠄·⠠ ○⠄ ⠔ · ○⠄ ⠄○⠄∘⠴· ·⠔·⠄·⠰∘⠄○ · ⠠ ⠔●⠄ ⠴" +"⢀ ⠙·⠐ ⠁ ⠑ ⢁ ⢙ ⠁·⠙·⠃·⢁·⠁·⠙ ⠁ ⠁ ⠘ ⠁·⠙ ⢙ ⠁·⠁ ⠁·⠁ ⠙ ⠁ ⢀ ⠁ " +"○ ·⠴· ⠔· ·⠰· ○⠰ ·⠠···⠁ ●⠄ ··⠄·●· · ∘⠄○○∘⠄∘ ·⠅· ·⠄∘∘ ⠄· " +"⠁ ⠁ ⢑ ⠁ ⢁ ⢙ ⠁ ⢁ ⠙ ⠃ ⢀ ⠁ ⢀ ⠁ ⠘ ⠑ ⠙ ⠐ ⠙ ⠁ ⠙ ⠁ ⠁ ⠁ ⠙ " +"· ∘⠤∘⠅·⠄∘⠅●⠠ · ·⠅· ⠄∘ ·⠁ ○⠄·⠄· ⠄· ·⠄∘⠅∘⠠·⠄○ ·⠅ ·⠄ ⠅" diff --git a/nori-rs/tui-components/src/motion/tests.rs b/nori-rs/tui-components/src/motion/tests.rs new file mode 100644 index 000000000..206ddbe1a --- /dev/null +++ b/nori-rs/tui-components/src/motion/tests.rs @@ -0,0 +1,184 @@ +#![allow(clippy::disallowed_methods)] // Verify the explicit RGB art palette. + +use super::*; +use pretty_assertions::assert_eq; +use ratatui::Terminal; +use ratatui::backend::TestBackend; +use unicode_width::UnicodeWidthStr; + +fn render(state: &MotionState, area: Rect, ascii: bool) -> Buffer { + let mut buffer = Buffer::empty(area); + MotionBackground::new(state) + .palette(MotionPalette::nori()) + .ascii(ascii) + .render(area, &mut buffer); + buffer +} + +#[test] +fn every_scene_at_wide_and_narrow_sizes() { + for scene in MotionScene::ALL { + let mut state = MotionState::new(scene); + state.advance(Duration::from_secs(12)); + for (width, height) in [(80, 24), (32, 12)] { + let mut terminal = Terminal::new(TestBackend::new(width, height)).unwrap(); + terminal + .draw(|frame| frame.render_widget(MotionBackground::new(&state), frame.area())) + .unwrap(); + insta::assert_snapshot!( + format!("{}_{}x{}", scene.label().to_lowercase(), width, height), + terminal.backend().to_string() + ); + } + } +} + +#[test] +fn transitions_reverse_from_the_current_frame_and_finish_without_overshoot() { + let mut state = MotionState::default(); + state.set_scene(MotionScene::Blueprint); + state.advance(Duration::from_secs(2)); + assert_eq!(state.position, 2.0 / 3.0); + let before = state.position; + state.set_scene(MotionScene::Dots); + assert_eq!(state.position, before); + state.advance(Duration::from_secs(1)); + assert_eq!(state.position, 1.0 / 3.0); + state.advance(Duration::from_secs(100)); + assert_eq!((state.position, state.scene()), (0.0, MotionScene::Dots)); + state.set_scene(MotionScene::Blueprint); + state.advance(Duration::MAX); + assert_eq!( + (state.position, state.scene()), + (4.0, MotionScene::Blueprint) + ); + // Very long-running clocks remain safe for field hash/index conversions. + render(&state, Rect::new(0, 0, 20, 10), false); +} + +#[test] +fn reduced_motion_freezes_the_entire_field_and_makes_scene_changes_immediate() { + let area = Rect::new(0, 0, 60, 20); + let mut state = MotionState::new(MotionScene::Creatures); + state.advance(Duration::from_secs(12)); + state.set_reduced_motion(true); + let before = render(&state, area, false); + state.advance(Duration::from_secs(50)); + assert_eq!(render(&state, area, false), before); + state.set_scene(MotionScene::Blueprint); + assert_eq!(state.position, 4.0); + state.set_reduced_motion(false); + state.advance(Duration::from_secs(1)); + assert_eq!(state.elapsed, Duration::from_secs(13)); +} + +#[test] +fn frames_are_deterministic_and_advance_for_every_scene() { + let area = Rect::new(0, 0, 80, 24); + for scene in MotionScene::ALL { + let mut state = MotionState::new(scene); + state.advance(Duration::from_secs(12)); + let before = render(&state, area, false); + assert_eq!(render(&state, area, false), before); + state.advance(Duration::from_secs(2)); + assert_ne!( + render(&state, area, false), + before, + "{} must animate", + scene.label() + ); + } +} + +#[test] +fn clips_to_buffer_without_changing_field_coordinates_or_touching_other_cells() { + let state = MotionState::new(MotionScene::Blueprint); + let area = Rect::new(3, 2, 20, 10); + let entire = render(&state, area, false); + let clip = Rect::new(10, 5, 8, 4); + let mut clipped = Buffer::empty(clip); + MotionBackground::new(&state) + .palette(MotionPalette::nori()) + .render(area, &mut clipped); + for y in clip.top()..clip.bottom() { + for x in clip.left()..clip.right() { + assert_eq!(&clipped[(x, y)], &entire[(x, y)]); + } + } + let mut outer = Buffer::filled(Rect::new(0, 0, 30, 16), ratatui::buffer::Cell::new("!")); + MotionBackground::new(&state).render(area, &mut outer); + assert_eq!(outer[(0, 0)].symbol(), "!"); + assert_eq!(outer[(23, 12)].symbol(), "!"); + let original = outer.clone(); + MotionBackground::new(&state).render(Rect::new(3, 3, 0, 0), &mut outer); + assert_eq!(outer, original); + render(&state, Rect::new(5, 7, 1, 1), false); +} + +#[test] +fn quiet_area_clears_old_content_and_styles_and_keeps_foreground_composable() { + let state = MotionState::default(); + let area = Rect::new(3, 2, 60, 24); + let quiet = Rect::new(20, 8, 20, 8); + let mut buffer = Buffer::empty(area); + buffer.set_style( + area, + Style::new().fg(Color::Red).add_modifier(Modifier::BOLD), + ); + MotionBackground::new(&state) + .palette(MotionPalette::nori()) + .quiet_area(quiet) + .render(area, &mut buffer); + for y in quiet.top()..quiet.bottom() { + for x in quiet.left()..quiet.right() { + let cell = &buffer[(x, y)]; + assert_eq!( + (cell.symbol(), cell.fg, cell.bg, cell.modifier), + (" ", Color::Reset, Color::Rgb(10, 15, 12), Modifier::empty()) + ); + } + } + ratatui::widgets::Paragraph::new("Sign in").render(quiet, &mut buffer); + assert_eq!(buffer[(20, 8)].symbol(), "S"); + assert_eq!(buffer[(20, 8)].bg, Color::Rgb(10, 15, 12)); +} + +#[test] +fn default_palette_keeps_terminal_background_and_all_glyphs_are_single_cell() { + let area = Rect::new(0, 0, 40, 20); + for scene in MotionScene::ALL { + let state = MotionState::new(scene); + let mut buffer = Buffer::empty(area); + MotionBackground::new(&state).render(area, &mut buffer); + for cell in &buffer.content { + assert_eq!(cell.bg, Color::Reset); + assert_eq!(UnicodeWidthStr::width(cell.symbol()), 1); + } + let ascii = render(&state, area, true); + assert!(ascii.content.iter().all(|cell| cell.symbol().is_ascii())); + } + let palette = MotionPalette::from_theme(Theme { + muted: Style::new().fg(Color::Magenta), + ..Theme::default() + }); + assert_eq!(palette.style(0.4, false).fg, Some(Color::Magenta)); + assert_eq!(palette.style(0.4, false).bg, None); + assert_eq!( + MotionPalette::nori().style(1.0, false).fg, + Some(Color::Rgb(125, 214, 160)) + ); +} + +#[test] +fn intermediate_zoom_and_fade_have_snapshots() { + for (name, milliseconds) in [("zoom", 2100), ("fade", 4200)] { + let mut state = MotionState::default(); + state.set_scene(MotionScene::Sandboxes); + state.advance(Duration::from_millis(milliseconds)); + let mut terminal = Terminal::new(TestBackend::new(60, 18)).unwrap(); + terminal + .draw(|frame| frame.render_widget(MotionBackground::new(&state), frame.area())) + .unwrap(); + insta::assert_snapshot!(name, terminal.backend().to_string()); + } +} From 549032f392339ee2b65ea07392ccd33935300952 Mon Sep 17 00:00:00 2001 From: Clifford Ressel Date: Thu, 10 Sep 2026 22:19:50 -0400 Subject: [PATCH 2/4] refactor(tui-components): separate motion rendering from playback policy Accept explicit scene, time, and transition progress; retain MotionState as an optional controller returning owned frames. Split palette, sampling, zoom, tile geometry, and state boundaries. Preserve existing visual snapshots and document the API migration and retained profiling evidence. --- .../motion-background/methodology.md | 5 +- docs/performance/motion-background/report.md | 23 ++ docs/reference/motion-background.md | 62 ++++- nori-rs/tui-components/DESIGN.md | 7 +- nori-rs/tui-components/docs.md | 8 +- .../examples/motion_storybook/README.md | 9 +- .../examples/motion_storybook/story.rs | 48 ++-- nori-rs/tui-components/src/motion/fields.rs | 242 +----------------- .../tui-components/src/motion/fields/math.rs | 36 +++ .../tui-components/src/motion/fields/tiles.rs | 105 ++++++++ .../tui-components/src/motion/fields/zoom.rs | 120 +++++++++ nori-rs/tui-components/src/motion/mod.rs | 198 +++++--------- nori-rs/tui-components/src/motion/palette.rs | 63 +++++ nori-rs/tui-components/src/motion/state.rs | 136 ++++++++++ nori-rs/tui-components/src/motion/tests.rs | 125 +++++---- 15 files changed, 727 insertions(+), 460 deletions(-) create mode 100644 docs/performance/motion-background/report.md create mode 100644 nori-rs/tui-components/src/motion/fields/math.rs create mode 100644 nori-rs/tui-components/src/motion/fields/tiles.rs create mode 100644 nori-rs/tui-components/src/motion/fields/zoom.rs create mode 100644 nori-rs/tui-components/src/motion/palette.rs create mode 100644 nori-rs/tui-components/src/motion/state.rs diff --git a/docs/performance/motion-background/methodology.md b/docs/performance/motion-background/methodology.md index e3b5348b5..56ee0713e 100644 --- a/docs/performance/motion-background/methodology.md +++ b/docs/performance/motion-background/methodology.md @@ -19,7 +19,7 @@ component still uses the ambient cycle. No former login/card UI is rendered. size queries, buffer diff, ANSI encoding, write/flush, cursor handling, and buffer reset. Timing is accumulated in memory and saved only after alternate screen restoration. No per-cell timing is added to the renderer. -- **CPU sampling:** optimized build with release optimization/LTO unchanged, +- **Planned CPU sampling (interrupted; no retained profile here):** optimized build with release optimization/LTO unchanged, `debug=line-tables-only`, `strip=none`, using Linux perf userspace cycles and DWARF call stacks. Instruction samples identify hot functions/source lines; they are separate runs, not mixed into the wall-clock timing data. @@ -83,4 +83,5 @@ python3 tui-components/scripts/summarize-motion-profile.py \ /tmp/platoon.csv /tmp/muster.csv /tmp/muster-live.csv --output /tmp/summary ``` -The summary tool also accepts `.csv.gz` inputs in the saved `data/` directory. +The summary tool also accepts `.csv.gz` inputs. See [measurement status](report.md) +for which artifacts survived the interruption. diff --git a/docs/performance/motion-background/report.md b/docs/performance/motion-background/report.md new file mode 100644 index 000000000..75d0cbe45 --- /dev/null +++ b/docs/performance/motion-background/report.md @@ -0,0 +1,23 @@ +# Motion measurement status + +The initial investigation was interrupted. Its broad headless/live runs reported +frame-budget overruns at larger terminal sizes, but their raw traces were stored +in temporary files and are no longer available. The planned CPU sampling for +this checkout did not produce a retained, verified profile. The methodology is +a record of that protocol, not a claim that every listed artifact is present. + +A subsequent small comparison against `codex/animated-onboarding` is retained in +[the comparison directory](../motion-comparison/README.md), including raw frame +CSVs, exact commands, binary hashes, and interpretation limits. That comparison +uses existing release binaries with different visual/sampling policies and no +terminal I/O; it is not a measurement of displayed FPS. + +The comparison describes the implementations before the API cleanup. Its data +files are a historical baseline; rerunning its script replaces those files with +measurements of the binaries currently at the recorded paths. Preserve that +baseline and use a separate output directory for future experiments. + +The cleanup separates the stateless rendering API, optional controller, palette, +and geometry modules. It retains the existing sampling schedule and scene +formulas. No post-cleanup performance improvement is claimed. See the +[integration guide](../../reference/motion-background.md) for the current API. diff --git a/docs/reference/motion-background.md b/docs/reference/motion-background.md index 4fd7406d2..ad0d17f53 100644 --- a/docs/reference/motion-background.md +++ b/docs/reference/motion-background.md @@ -10,20 +10,23 @@ separate consumer integration. ## Compose it +The renderer accepts an explicit scene, ambient time, and transition progress. +It owns no playback state and does not borrow a controller. The caller chooses +transition duration, easing, and any seek/reversal policy: + ```rust use std::time::Duration; -use nori_tui_components::{MotionBackground, MotionPalette, MotionScene, MotionState}; +use nori_tui_components::{MotionBackground, MotionPalette, MotionScene}; use ratatui::layout::Rect; -let mut motion = MotionState::new(MotionScene::Dots); -motion.advance(Duration::from_millis(40)); // elapsed time supplied by your loop -motion.set_scene(MotionScene::Creatures); +let elapsed = Duration::from_secs(12); +let progress = 0.8; // Supply your timeline's progress, optionally already eased. -// In your application's terminal draw call: terminal.draw(|frame| { let form = Rect::new(25, 8, 50, 16); frame.render_widget( - MotionBackground::new(&motion) + MotionBackground::new(MotionScene::Dots, elapsed) + .transition_to(MotionScene::Formations, progress) .palette(MotionPalette::nori()) .quiet_area(form), frame.area(), @@ -32,6 +35,21 @@ terminal.draw(|frame| { }); ``` +For simple linear playback, keep an optional `MotionState` and call +`motion.background()` to get an owned frame snapshot. This replaces the original +`MotionBackground::new(&motion)` API: + +```rust +use std::time::Duration; +use nori_tui_components::{MotionScene, MotionState}; + +let mut motion = MotionState::new(MotionScene::Dots); +motion.set_scene(MotionScene::Creatures); +motion.advance(Duration::from_millis(40)); +let background = motion.background(); +// Render `background`, optionally adding palette, quiet_area, ascii, or formation. +``` + `quiet_area` uses absolute terminal coordinates. It blanks the content rectangle and fades the surrounding scenery over six horizontal or three vertical cells. It clears old content, so render the background first on every frame. The widget @@ -45,16 +63,22 @@ origins, empty areas, and tiny viewports. Foreground layout is entirely caller-o argyle, orbiting paired tiles, and a perspective muster. A fade separates the formation field from sandboxes; those grow into blinking creatures and then braille wireframes. Canvas strokes are approximated with terminal cells. -- `set_scene` starts or reverses a transition at the current position. Each +- `transition_to(target, progress)` clamps progress to `[0, 1]`; NaN means zero. + Both endpoints match their static scenes. It interpolates from the widget's + current position, so a captured controller frame can also be redirected. + Recreate the widget from your chosen origin when seeking an absolute progress. +- On the optional controller, `set_scene` starts or reverses a transition at the current position. Each adjacent phase takes three seconds. Skipping phases traverses intermediate phases; reaching any destination takes at most twelve seconds. -- The caller supplies elapsed `Duration` through `advance`. Render is pure: +- Supply ambient time directly to `new`, or advance the optional controller. Render is pure: repeated state/geometry/palette produces the same frame. There is no RNG or hidden wall clock. The scenery clock wraps after 24 hours to keep numerical inputs bounded; a continuously displayed background can change at that boundary. - Pause by stopping `advance`; discard elapsed paused time when resuming. - `set_reduced_motion(true)` freezes all scenery, including blinking and formation - changes, and makes scene changes immediate. Consumers own preference detection. + The controller's `set_reduced_motion(true)` freezes its existing ambient time + and makes scene changes immediate. The stateless widget's `.reduced_motion(true)` + instead renders its target at time zero, independent of the supplied timeline. + Both stop blinking and formation changes. Consumers own preference detection. - Choose a measured frame budget for the intended terminal size, and redraw only for input or resize when paused/reduced. The example uses a 40 ms frame budget and blocking input polling when idle. Rendering costs O(visible cells), with @@ -67,7 +91,7 @@ origins, empty areas, and tiny viewports. Foreground layout is entirely caller-o it does not invent a background. `MotionPalette::nori()` explicitly opts into the reference's RGB ink `#0a0f0c`, green `#7dd6a0`, and pale highlights. Only use that art palette when true color is suitable; compose foreground copy with - explicit contrasting colors, as the example does. Custom palettes expose + explicit contrasting colors. Custom palettes expose `surface`, `ink`, and `highlight` styles. RGB colors are blended and quantized into sixteen intensity steps; other palettes use their supplied ink and dimming. @@ -104,3 +128,19 @@ ASCII fallback. The example snapshots dots, 80% zoom, and braille endpoints for both fixed variants at 100×34 and 36×20, and tests reversal/overshoot behavior. Its opt-in tmux case checks the actual full-screen frame through the shared [storybook capture workflow](../../nori-rs/tui-components/examples/README.md). + +## Implementation boundaries + +- `motion/mod.rs`: public scenes, frame description, clipping, and Ratatui painting. +- `motion/state.rs`: optional playback controller and its state invariants. +- `motion/palette.rs`: theme integration and scenery intensity styles. +- `motion/fields.rs`: frame context, scene dispatch, and cell/braille sampling. +- `motion/fields/zoom.rs`: dot islands and formation geometry. +- `motion/fields/tiles.rs`: sandbox, creature, and blueprint geometry. +- `motion/fields/math.rs`: shared deterministic noise/hash/interpolation. + +The storybook owns its six-second ping-pong timeline and supplies explicit +progress to the renderer. Profiling instruments the example's draw boundary; +there are no benchmark timers in the reusable renderer. The API cleanup retains +existing field formulas, palette, and sampling schedule so subsequent performance +changes can be measured separately. diff --git a/nori-rs/tui-components/DESIGN.md b/nori-rs/tui-components/DESIGN.md index 01cecfb3e..05a3a0233 100644 --- a/nori-rs/tui-components/DESIGN.md +++ b/nori-rs/tui-components/DESIGN.md @@ -237,14 +237,17 @@ tokens. The opt-in `MotionPalette::nori()` is a bounded exception to the neutral surface and functional-accent rules: it reproduces the Motion Suite reference's dark RGB background and green procedural scenery. It must not change semantic styles in unrelated widgets. Foreground text on that explicit dark surface must -use contrasting colors; the motion storybook supplies them. Keep forms unboxed, +use contrasting colors; the current motion storybook displays background only. Keep forms unboxed, titles left-aligned, key hints left-aligned, and focus accents compact. Reserve a quiet rectangle and soft surrounding falloff for foreground content. Reduced motion must stop every animation, including idle movement and blinking, and switch scenes instantly. Provide ASCII and terminal-theme fallback policies. Terminal ownership, credentials, login actions, and redraw scheduling remain in -the consumer; this component only paints scenery. +the consumer; this component only paints scenery. Its core API accepts explicit +ambient time and transition progress, allowing the consumer to choose easing and +duration. The optional `MotionState` controller provides simple interruptible +linear playback without coupling state ownership to rendering. 25. Snapshot every component at representative wide and narrow widths. 26. Snapshot both densities and loading, empty, error, disabled, and selected diff --git a/nori-rs/tui-components/docs.md b/nori-rs/tui-components/docs.md index 6dc142549..51bfa4703 100644 --- a/nori-rs/tui-components/docs.md +++ b/nori-rs/tui-components/docs.md @@ -75,9 +75,11 @@ consumer application ### Core Implementation - [`MotionBackground`](src/motion/) renders caller-controlled procedural scenery - inside a clipped rectangle. `MotionState` owns deterministic elapsed time and - interruptible scene transitions; reduced motion freezes the field and switches - scenes immediately. `MotionPalette` defaults to terminal-compatible muted + inside a clipped rectangle from explicit scene, time, and transition progress. + Optional `MotionState` owns linear playback and interruptible scene transitions; + `background()` returns an owned render snapshot. Reduced motion freezes the + field and switches scenes immediately. Geometry, palette, and controller live + in separate modules. `MotionPalette` defaults to terminal-compatible muted styles, with an explicit Nori RGB art palette. A quiet area clears space for foreground forms, which callers draw afterward. The focused [`motion_storybook`](examples/motion_storybook.rs) now runs only the bare Dots ↔ Formations transition, with a pinned platoon diff --git a/nori-rs/tui-components/examples/motion_storybook/README.md b/nori-rs/tui-components/examples/motion_storybook/README.md index 8fbb31bd8..3ccf9316f 100644 --- a/nori-rs/tui-components/examples/motion_storybook/README.md +++ b/nori-rs/tui-components/examples/motion_storybook/README.md @@ -56,6 +56,11 @@ production and PTY backpressure, not the graphical terminal's displayed FPS. The summary excludes the first full repaint of each run, reports percentiles and work over the requested frame budget, and separates three zoom-phase bands. -[Measurements and recommendations](../../../../docs/performance/motion-background/report.md) -include the collected data and CPU profile. The component's broader API remains +[Measurement status](../../../../docs/performance/motion-background/report.md) +links the retained comparison data and explains gaps from the interrupted run. The component's broader API remains in the [integration guide](../../../../docs/reference/motion-background.md). + +The example timeline now supplies explicit time/progress to `MotionBackground`. +It does not require `MotionState`; that controller remains available to consumers +that want its default linear transitions. Sampling and art direction are unchanged +by the API cleanup. diff --git a/nori-rs/tui-components/examples/motion_storybook/story.rs b/nori-rs/tui-components/examples/motion_storybook/story.rs index 93361298d..3ddb8e5f5 100644 --- a/nori-rs/tui-components/examples/motion_storybook/story.rs +++ b/nori-rs/tui-components/examples/motion_storybook/story.rs @@ -4,54 +4,36 @@ use nori_tui_components::MotionBackground; use nori_tui_components::MotionFormation; use nori_tui_components::MotionPalette; use nori_tui_components::MotionScene; -use nori_tui_components::MotionState; -/// Only the scene 1 <-> 2 zoom; no foreground widgets or reserved regions. +/// Example-owned timeline. Rendering accepts explicit time and transition progress. pub struct Story { - motion: MotionState, + elapsed: Duration, pub formation: MotionFormation, - leg_elapsed: Duration, pub zooming_in: bool, } impl Story { pub fn new(muster: bool) -> Self { - let mut motion = MotionState::default(); - motion.advance(Duration::from_secs(12)); - motion.set_scene(MotionScene::Formations); Self { - motion, + elapsed: Duration::ZERO, formation: if muster { MotionFormation::Muster } else { MotionFormation::Platoon }, - leg_elapsed: Duration::ZERO, zooming_in: true, } } - pub fn advance(&mut self, mut delta: Duration) { - let leg = Duration::from_secs(3); - while !delta.is_zero() { - let step = delta.min(leg - self.leg_elapsed); - self.motion.advance(step); - self.leg_elapsed += step; - delta -= step; - if self.leg_elapsed == leg { - self.leg_elapsed = Duration::ZERO; - self.zooming_in = !self.zooming_in; - self.motion.set_scene(if self.zooming_in { - MotionScene::Formations - } else { - MotionScene::Dots - }); - } - } + pub fn advance(&mut self, delta: Duration) { + self.elapsed = self.elapsed.saturating_add(delta); + self.zooming_in = self.elapsed.as_secs() % 6 < 3; } pub fn phase(&self) -> f64 { - let progress = self.leg_elapsed.as_secs_f64() / 3.0; + let leg_seconds = + (self.elapsed.as_secs() % 3) as f64 + f64::from(self.elapsed.subsec_nanos()) / 1e9; + let progress = leg_seconds / 3.0; if self.zooming_in { progress } else { @@ -59,9 +41,13 @@ impl Story { } } - pub fn widget(&self) -> MotionBackground<'_> { - MotionBackground::new(&self.motion) - .palette(MotionPalette::nori()) - .formation(self.formation) + pub fn widget(&self) -> MotionBackground { + MotionBackground::new( + MotionScene::Dots, + self.elapsed.saturating_add(Duration::from_secs(12)), + ) + .transition_to(MotionScene::Formations, self.phase()) + .palette(MotionPalette::nori()) + .formation(self.formation) } } diff --git a/nori-rs/tui-components/src/motion/fields.rs b/nori-rs/tui-components/src/motion/fields.rs index 62849cd13..144221665 100644 --- a/nori-rs/tui-components/src/motion/fields.rs +++ b/nori-rs/tui-components/src/motion/fields.rs @@ -1,7 +1,11 @@ //! Cell-space adaptation of the supplied Nori Motion Suite canvas formulas. //! Two horizontal and four vertical samples form one terminal braille cell. -use std::f64::consts::TAU; +mod math; +mod tiles; +mod zoom; + +pub(super) use math::smooth; use ratatui::layout::Rect; @@ -12,41 +16,6 @@ const BITS: [[i32; 2]; 4] = [[1, 8], [2, 16], [4, 32], [64, 128]]; const DOTS: [char; 5] = [' ', '·', '∘', '○', '●']; const ASCII: [char; 5] = [' ', '.', ':', 'o', '*']; -pub(super) fn smooth(value: f64) -> f64 { - let value = value.clamp(0.0, 1.0); - value * value * (3.0 - 2.0 * value) -} - -fn hash(x: i32, y: i32, z: i32) -> f64 { - let mut h = x - .wrapping_mul(374_761_393) - .wrapping_add(y.wrapping_mul(668_265_263)) - .wrapping_add(z.wrapping_mul(1_274_126_177)); - h = (h ^ ((h as u32 >> 13) as i32)).wrapping_mul(1_274_126_177); - f64::from((h ^ ((h as u32 >> 16) as i32)) as u32) / f64::from(u32::MAX) -} - -fn noise(x: f64, y: f64, t: f64) -> f64 { - let mut value = 0.0; - let sx = smooth(x - x.floor()); - let sy = smooth(y - y.floor()); - let st = smooth(t - t.floor()); - for dz in 0..2 { - for dy in 0..2 { - for dx in 0..2 { - value += hash( - x.floor() as i32 + dx, - y.floor() as i32 + dy, - t.floor() as i32 + dz, - ) * if dx == 0 { 1.0 - sx } else { sx } - * if dy == 0 { 1.0 - sy } else { sy } - * if dz == 0 { 1.0 - st } else { st }; - } - } - } - value -} - pub(super) struct Sample { pub glyph: char, pub intensity: f64, @@ -144,206 +113,9 @@ impl Field { fn value(&self, fx: f64, fy: f64) -> f64 { if self.phase < 1.5 { - let z = self.phase.min(1.0); - let scale = if self.phase >= 1.0 { 1.0 } else { self.scale }; - let wx = (fx - self.width / 2.0) / scale + self.time * 0.02; - let wy = (fy - self.height / 2.0) / scale + self.time * 0.008; - let phase = hash(wx.floor() as i32, wy.floor() as i32, 0) * TAU; - let speed = 0.5 + hash(wx.floor() as i32, wy.floor() as i32, 1) * 0.9; - let t = self.time * 0.5; - let u = (wx - wx.floor() - 0.5) * 2.0; - let v = (wy - wy.floor() - 0.5) * 2.0; - let mx = 0.26 * (t * 0.43 * speed + phase).sin(); - let my = 0.26 * (t * 0.31 * speed + phase * 1.7).cos(); - let window = ((1.0 - u.abs().max(v.abs())) * 2.2).clamp(0.0, 1.0); - let dots = (1.0 - (u - mx).hypot(v - my) * 0.85).max(0.0) - * (0.5 + 0.5 * (t * speed + phase).sin()) - * 1.15 - * window; - let mix = smooth((z - 0.75) / 0.25); - // Avoid paying for dense formations until the zoom reaches them. - return if mix == 0.0 { - dots - } else { - dots + (self.formations(fx, fy) - dots) * mix - }; - } - let wx = (fx - self.width / 2.0) / self.scale + 0.5; - let wy = (fy - self.height / 2.0) / self.scale + 0.5; - let i = wx.floor() as i32; - let j = wy.floor() as i32; - let u = (wx - wx.floor() - 0.5) * 2.0; - let v = (wy - wy.floor() - 0.5) * 2.0; - let phase = hash(i, j, 0) * TAU; - let pulse = 0.5 + 0.5 * (self.time * 0.4 + phase).sin(); - let height = if hash(i, j, 4) < 0.18 { - 0.0 - } else { - (0.45 + 0.25 * hash(i, j, 5)) - * (0.5 + 0.5 * pulse).max(self.lines * (0.85 + 0.15 * pulse)) - }; - let edge = u.abs().max(v.abs()); - let blob = (1.0 - u.hypot(v - 0.25) * 1.8).max(0.0) * (0.35 + 0.65 * pulse); - let sandbox = if edge > 0.64 && edge < 0.84 { - blob.max(0.28) - } else if edge < 0.92 { - blob.max(0.12) - } else { - 0.0 - }; - let c = v.clamp(0.18 - height, 0.18); - let body = (0.46 * u).abs() / 0.38 + (v - c).abs() / 0.34; - let top = (0.46 * u).abs() / 0.38 + (v - (0.18 - height)).abs() / 0.34; - let bottom = (0.46 * u).abs() / 0.38 + (v - 0.18).abs() / 0.34; - let creature = if body <= 1.0 { - let glow = (1.0 - u.hypot((v - 0.18 + height * 0.22) * 1.5) * 2.3).max(0.0); - (0.18 + 0.45 * glow * pulse).max(if body > 0.78 || (top - 1.0).abs() < 0.12 { - 0.42 - } else { - 0.0 - }) - } else { - 0.0 - }; - let wire = if (body - 1.0).abs() < 0.085 - || (top - 1.0).abs() < 0.085 - || ((bottom - 1.0).abs() < 0.085 && v >= 0.18) - || (u.abs() < 0.055 && v > 0.18 - height + 0.34 && v < 0.52) - { - 0.9 - } else if top < 0.9 && ((u * 0.6 + v) * 12.0).rem_euclid(1.0) < 0.18 { - 0.22 - } else { - 0.0 - }; - let solid = sandbox + (creature - sandbox) * self.shape; - solid + (wire - solid) * self.lines - } - - fn formations(&self, x: f64, y: f64) -> f64 { - let t = self.time; - let quiet = 0.1 - + 0.3 * (0.5 + 0.5 * (x * 0.01 + y * 0.014 + t * 0.12).sin()) - + 0.2 * noise(x * 0.022, y * 0.013, t * 0.1); - // Four 16-second formations, each separated by eight seconds of quiet. - let segment = match self.formation { - MotionFormation::Cycle => (t / 24.0).floor() as i32, - MotionFormation::Platoon => 0, - MotionFormation::Muster => 3, - }; - let local = t.rem_euclid(24.0) - 8.0; - let fade = match self.formation { - MotionFormation::Cycle => smooth(local / 1.6) * smooth((16.0 - local) / 1.6), - MotionFormation::Platoon | MotionFormation::Muster => 1.0, - }; - if fade == 0.0 { - return quiet; - } - let formation = match segment.rem_euclid(4) { - 0 => { - let lane = (y / 22.0).floor() as i32; - let speed = [-11.0, -5.0, 5.0][lane.rem_euclid(3) as usize]; - let lx = (x - t * speed + f64::from(lane) * 18.0).rem_euclid(36.0); - let ly = y.rem_euclid(22.0); - if (2.0..32.0).contains(&lx) && (2.0..18.0).contains(&ly) { - if ((ly - 2.0) / 4.0) as i32 % 2 == 0 { - 0.66 - } else { - 0.34 - } - } else { - quiet * 0.35 - } - } - 1 => { - let u = (x * 0.55 + y) / 22.0 + t * 0.03; - let v = (x * 0.55 - y) / 22.0 - t * 0.13; - let edge = u - .rem_euclid(1.0) - .min(1.0 - u.rem_euclid(1.0)) - .min(v.rem_euclid(1.0).min(1.0 - v.rem_euclid(1.0))); - if edge < 0.06 { - 0.66 - } else if (u.floor() as i32 + v.floor() as i32) % 2 == 0 { - 0.12 - } else { - 0.46 - } - } - 2 => { - let mut value = quiet; - for k in 0..6 { - let angle = f64::from(k) * TAU / 6.0 + t * 0.11; - let px = x - self.width * (0.5 + angle.cos() * 0.32); - let py = y - self.height * (0.5 + angle.sin() * 0.32); - let size = self.width.min(self.height) * 0.06; - if (px - size * 0.4).abs().max((py + size * 0.4).abs()) < size - || (px + size * 0.4).abs().max((py - size * 0.4).abs()) < size - { - value = 0.65; - } - } - value - } - _ => { - let depth = 50.0 + y; - let row = 14.0 * depth.ln() - t * 0.9; - let col = (x - self.width / 2.0) * 22.0 / depth; - if (col.floor() as i32).rem_euclid(7) == 0 - || (row.floor() as i32).rem_euclid(8) == 0 - { - 0.05 - } else { - 0.28 + 0.3 - * smooth(row.rem_euclid(1.0) * 3.0) - * smooth(col.rem_euclid(1.0) * 3.0) - } - } - }; - quiet + (formation - quiet) * fade - } - - fn eye(&self, x: i32, y: i32) -> Option { - if self.shape < 0.8 { - return None; - } - let wx = (f64::from(x * 2 + 1) - self.width / 2.0) / self.scale + 0.5; - let wy = (f64::from(y * 4 + 2) - self.height / 2.0) / self.scale + 0.5; - let i = wx.floor() as i32; - let j = wy.floor() as i32; - if hash(i, j, 4) < 0.18 { - return None; - } - let phase = hash(i, j, 0) * TAU; - let pulse = 0.5 + 0.5 * (self.time * 0.4 + phase).sin(); - let height = (0.45 + 0.25 * hash(i, j, 5)) * (0.5 + 0.5 * pulse); - let ey = ((f64::from(j) * self.scale - + (0.1 - height * 0.22) * self.scale / 2.0 - + self.height / 2.0 - - 2.0) - / 4.0) - .round() as i32; - let look = (self.time * 0.25 + phase).sin().round() * 0.1; - let left = - ((f64::from(i) * self.scale + (-0.17 + look) * self.scale / 2.0 + self.width / 2.0 - - 1.0) - / 2.0) - .round() as i32; - let right = - ((f64::from(i) * self.scale + (0.17 + look) * self.scale / 2.0 + self.width / 2.0 - - 1.0) - / 2.0) - .round() as i32; - if y == ey && (x == left || x == right) { - Some( - if (self.time * 0.25 + hash(i, j, 7)).rem_euclid(1.0) < 0.07 { - '-' - } else { - 'o' - }, - ) + self.zoom(fx, fy) } else { - None + self.tiles(fx, fy) } } } diff --git a/nori-rs/tui-components/src/motion/fields/math.rs b/nori-rs/tui-components/src/motion/fields/math.rs new file mode 100644 index 000000000..7c6b73406 --- /dev/null +++ b/nori-rs/tui-components/src/motion/fields/math.rs @@ -0,0 +1,36 @@ +//! Shared deterministic field math. + +pub(in super::super) fn smooth(value: f64) -> f64 { + let value = value.clamp(0.0, 1.0); + value * value * (3.0 - 2.0 * value) +} + +pub(super) fn hash(x: i32, y: i32, z: i32) -> f64 { + let mut h = x + .wrapping_mul(374_761_393) + .wrapping_add(y.wrapping_mul(668_265_263)) + .wrapping_add(z.wrapping_mul(1_274_126_177)); + h = (h ^ ((h as u32 >> 13) as i32)).wrapping_mul(1_274_126_177); + f64::from((h ^ ((h as u32 >> 16) as i32)) as u32) / f64::from(u32::MAX) +} + +pub(super) fn noise(x: f64, y: f64, t: f64) -> f64 { + let mut value = 0.0; + let sx = smooth(x - x.floor()); + let sy = smooth(y - y.floor()); + let st = smooth(t - t.floor()); + for dz in 0..2 { + for dy in 0..2 { + for dx in 0..2 { + value += hash( + x.floor() as i32 + dx, + y.floor() as i32 + dy, + t.floor() as i32 + dz, + ) * if dx == 0 { 1.0 - sx } else { sx } + * if dy == 0 { 1.0 - sy } else { sy } + * if dz == 0 { 1.0 - st } else { st }; + } + } + } + value +} diff --git a/nori-rs/tui-components/src/motion/fields/tiles.rs b/nori-rs/tui-components/src/motion/fields/tiles.rs new file mode 100644 index 000000000..733422704 --- /dev/null +++ b/nori-rs/tui-components/src/motion/fields/tiles.rs @@ -0,0 +1,105 @@ +//! Sandbox, creature, and blueprint geometry. + +use std::f64::consts::TAU; + +use super::Field; +use super::math::hash; + +impl Field { + pub(super) fn tiles(&self, fx: f64, fy: f64) -> f64 { + let wx = (fx - self.width / 2.0) / self.scale + 0.5; + let wy = (fy - self.height / 2.0) / self.scale + 0.5; + let i = wx.floor() as i32; + let j = wy.floor() as i32; + let u = (wx - wx.floor() - 0.5) * 2.0; + let v = (wy - wy.floor() - 0.5) * 2.0; + let phase = hash(i, j, 0) * TAU; + let pulse = 0.5 + 0.5 * (self.time * 0.4 + phase).sin(); + let height = if hash(i, j, 4) < 0.18 { + 0.0 + } else { + (0.45 + 0.25 * hash(i, j, 5)) + * (0.5 + 0.5 * pulse).max(self.lines * (0.85 + 0.15 * pulse)) + }; + let edge = u.abs().max(v.abs()); + let blob = (1.0 - u.hypot(v - 0.25) * 1.8).max(0.0) * (0.35 + 0.65 * pulse); + let sandbox = if edge > 0.64 && edge < 0.84 { + blob.max(0.28) + } else if edge < 0.92 { + blob.max(0.12) + } else { + 0.0 + }; + let c = v.clamp(0.18 - height, 0.18); + let body = (0.46 * u).abs() / 0.38 + (v - c).abs() / 0.34; + let top = (0.46 * u).abs() / 0.38 + (v - (0.18 - height)).abs() / 0.34; + let bottom = (0.46 * u).abs() / 0.38 + (v - 0.18).abs() / 0.34; + let creature = if body <= 1.0 { + let glow = (1.0 - u.hypot((v - 0.18 + height * 0.22) * 1.5) * 2.3).max(0.0); + (0.18 + 0.45 * glow * pulse).max(if body > 0.78 || (top - 1.0).abs() < 0.12 { + 0.42 + } else { + 0.0 + }) + } else { + 0.0 + }; + let wire = if (body - 1.0).abs() < 0.085 + || (top - 1.0).abs() < 0.085 + || ((bottom - 1.0).abs() < 0.085 && v >= 0.18) + || (u.abs() < 0.055 && v > 0.18 - height + 0.34 && v < 0.52) + { + 0.9 + } else if top < 0.9 && ((u * 0.6 + v) * 12.0).rem_euclid(1.0) < 0.18 { + 0.22 + } else { + 0.0 + }; + let solid = sandbox + (creature - sandbox) * self.shape; + solid + (wire - solid) * self.lines + } + + pub(super) fn eye(&self, x: i32, y: i32) -> Option { + if self.shape < 0.8 { + return None; + } + let wx = (f64::from(x * 2 + 1) - self.width / 2.0) / self.scale + 0.5; + let wy = (f64::from(y * 4 + 2) - self.height / 2.0) / self.scale + 0.5; + let i = wx.floor() as i32; + let j = wy.floor() as i32; + if hash(i, j, 4) < 0.18 { + return None; + } + let phase = hash(i, j, 0) * TAU; + let pulse = 0.5 + 0.5 * (self.time * 0.4 + phase).sin(); + let height = (0.45 + 0.25 * hash(i, j, 5)) * (0.5 + 0.5 * pulse); + let ey = ((f64::from(j) * self.scale + + (0.1 - height * 0.22) * self.scale / 2.0 + + self.height / 2.0 + - 2.0) + / 4.0) + .round() as i32; + let look = (self.time * 0.25 + phase).sin().round() * 0.1; + let left = + ((f64::from(i) * self.scale + (-0.17 + look) * self.scale / 2.0 + self.width / 2.0 + - 1.0) + / 2.0) + .round() as i32; + let right = + ((f64::from(i) * self.scale + (0.17 + look) * self.scale / 2.0 + self.width / 2.0 + - 1.0) + / 2.0) + .round() as i32; + if y == ey && (x == left || x == right) { + Some( + if (self.time * 0.25 + hash(i, j, 7)).rem_euclid(1.0) < 0.07 { + '-' + } else { + 'o' + }, + ) + } else { + None + } + } +} diff --git a/nori-rs/tui-components/src/motion/fields/zoom.rs b/nori-rs/tui-components/src/motion/fields/zoom.rs new file mode 100644 index 000000000..e08a8b0c1 --- /dev/null +++ b/nori-rs/tui-components/src/motion/fields/zoom.rs @@ -0,0 +1,120 @@ +//! Dot islands and formation fields for the zoom. + +use std::f64::consts::TAU; + +use super::super::MotionFormation; +use super::Field; +use super::math::hash; +use super::math::noise; +use super::math::smooth; + +impl Field { + pub(super) fn zoom(&self, fx: f64, fy: f64) -> f64 { + let z = self.phase.min(1.0); + let scale = if self.phase >= 1.0 { 1.0 } else { self.scale }; + let wx = (fx - self.width / 2.0) / scale + self.time * 0.02; + let wy = (fy - self.height / 2.0) / scale + self.time * 0.008; + let phase = hash(wx.floor() as i32, wy.floor() as i32, 0) * TAU; + let speed = 0.5 + hash(wx.floor() as i32, wy.floor() as i32, 1) * 0.9; + let t = self.time * 0.5; + let u = (wx - wx.floor() - 0.5) * 2.0; + let v = (wy - wy.floor() - 0.5) * 2.0; + let mx = 0.26 * (t * 0.43 * speed + phase).sin(); + let my = 0.26 * (t * 0.31 * speed + phase * 1.7).cos(); + let window = ((1.0 - u.abs().max(v.abs())) * 2.2).clamp(0.0, 1.0); + let dots = (1.0 - (u - mx).hypot(v - my) * 0.85).max(0.0) + * (0.5 + 0.5 * (t * speed + phase).sin()) + * 1.15 + * window; + let mix = smooth((z - 0.75) / 0.25); + // Avoid paying for dense formations until the zoom reaches them. + if mix == 0.0 { + dots + } else { + dots + (self.formations(fx, fy) - dots) * mix + } + } + + fn formations(&self, x: f64, y: f64) -> f64 { + let t = self.time; + let quiet = 0.1 + + 0.3 * (0.5 + 0.5 * (x * 0.01 + y * 0.014 + t * 0.12).sin()) + + 0.2 * noise(x * 0.022, y * 0.013, t * 0.1); + // Four 16-second formations, each separated by eight seconds of quiet. + let segment = match self.formation { + MotionFormation::Cycle => (t / 24.0).floor() as i32, + MotionFormation::Platoon => 0, + MotionFormation::Muster => 3, + }; + let local = t.rem_euclid(24.0) - 8.0; + let fade = match self.formation { + MotionFormation::Cycle => smooth(local / 1.6) * smooth((16.0 - local) / 1.6), + MotionFormation::Platoon | MotionFormation::Muster => 1.0, + }; + if fade == 0.0 { + return quiet; + } + let formation = match segment.rem_euclid(4) { + 0 => { + let lane = (y / 22.0).floor() as i32; + let speed = [-11.0, -5.0, 5.0][lane.rem_euclid(3) as usize]; + let lx = (x - t * speed + f64::from(lane) * 18.0).rem_euclid(36.0); + let ly = y.rem_euclid(22.0); + if (2.0..32.0).contains(&lx) && (2.0..18.0).contains(&ly) { + if ((ly - 2.0) / 4.0) as i32 % 2 == 0 { + 0.66 + } else { + 0.34 + } + } else { + quiet * 0.35 + } + } + 1 => { + let u = (x * 0.55 + y) / 22.0 + t * 0.03; + let v = (x * 0.55 - y) / 22.0 - t * 0.13; + let edge = u + .rem_euclid(1.0) + .min(1.0 - u.rem_euclid(1.0)) + .min(v.rem_euclid(1.0).min(1.0 - v.rem_euclid(1.0))); + if edge < 0.06 { + 0.66 + } else if (u.floor() as i32 + v.floor() as i32) % 2 == 0 { + 0.12 + } else { + 0.46 + } + } + 2 => { + let mut value = quiet; + for k in 0..6 { + let angle = f64::from(k) * TAU / 6.0 + t * 0.11; + let px = x - self.width * (0.5 + angle.cos() * 0.32); + let py = y - self.height * (0.5 + angle.sin() * 0.32); + let size = self.width.min(self.height) * 0.06; + if (px - size * 0.4).abs().max((py + size * 0.4).abs()) < size + || (px + size * 0.4).abs().max((py - size * 0.4).abs()) < size + { + value = 0.65; + } + } + value + } + _ => { + let depth = 50.0 + y; + let row = 14.0 * depth.ln() - t * 0.9; + let col = (x - self.width / 2.0) * 22.0 / depth; + if (col.floor() as i32).rem_euclid(7) == 0 + || (row.floor() as i32).rem_euclid(8) == 0 + { + 0.05 + } else { + 0.28 + 0.3 + * smooth(row.rem_euclid(1.0) * 3.0) + * smooth(col.rem_euclid(1.0) * 3.0) + } + } + }; + quiet + (formation - quiet) * fade + } +} diff --git a/nori-rs/tui-components/src/motion/mod.rs b/nori-rs/tui-components/src/motion/mod.rs index e24a9783f..79725769e 100644 --- a/nori-rs/tui-components/src/motion/mod.rs +++ b/nori-rs/tui-components/src/motion/mod.rs @@ -5,18 +5,18 @@ //! clock, redraw scheduling, input, and all authentication behavior. mod fields; +mod palette; +mod state; + +pub use palette::MotionPalette; +pub use state::MotionState; use std::time::Duration; use ratatui::buffer::Buffer; use ratatui::layout::Rect; -use ratatui::style::Color; -use ratatui::style::Modifier; -use ratatui::style::Style; use ratatui::widgets::Widget; -use crate::Theme; - /// Optional fixed destination for the dot-to-braille zoom. /// `Cycle` retains the original time-driven formation sequence. #[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] @@ -68,135 +68,50 @@ impl MotionScene { } } -/// Caller-held animation clock and interruptible scene transition. -/// -/// Adjacent scenes take three seconds to morph. No wall clock, background task, -/// random source, or input handling is hidden in this state. Pause by not calling -/// [`Self::advance`]. Reduced motion freezes scenery and switches scenes instantly. -#[derive(Clone, Debug, Default)] -pub struct MotionState { - scene: MotionScene, - position: f64, - elapsed: Duration, - reduced_motion: bool, -} - -impl MotionState { - pub fn new(scene: MotionScene) -> Self { - Self { - scene, - position: scene.position(), - ..Self::default() - } - } - - /// The requested destination, including while a transition is in progress. - pub fn scene(&self) -> MotionScene { - self.scene - } - - pub fn set_scene(&mut self, scene: MotionScene) { - self.scene = scene; - if self.reduced_motion { - self.position = scene.position(); - } - } - - pub fn set_reduced_motion(&mut self, reduced: bool) { - self.reduced_motion = reduced; - if reduced { - self.position = self.scene.position(); - } - } - - pub fn reduced_motion(&self) -> bool { - self.reduced_motion - } - - pub fn advance(&mut self, delta: Duration) { - if self.reduced_motion { - return; - } - self.elapsed = self.elapsed.saturating_add(delta); - let distance = self.scene.position() - self.position; - self.position += distance.signum() * distance.abs().min(delta.as_secs_f64() / 3.0); - } -} - -/// Explicit scenery styles, separate from the semantic colors of foreground UI. -#[derive(Clone, Copy, Debug)] -pub struct MotionPalette { - pub surface: Style, - pub ink: Style, - pub highlight: Style, -} - -impl MotionPalette { - /// Terminal-compatible default; never invents a background color. - pub fn from_theme(theme: Theme) -> Self { - Self { - surface: theme.surface, - ink: theme.muted, - highlight: theme.muted, - } - } - - /// Opt-in, true-color art direction from the Nori Motion Suite mockup. - /// The caller must also give foreground content suitable contrasting colors. - #[allow(clippy::disallowed_methods)] - pub fn nori() -> Self { - Self { - surface: Style::new().bg(Color::Rgb(10, 15, 12)), - ink: Style::new().fg(Color::Rgb(125, 214, 160)), - highlight: Style::new().fg(Color::Rgb(214, 255, 224)), - } - } - - #[allow(clippy::disallowed_methods)] - fn style(self, intensity: f64, highlight: bool) -> Style { - let ink = if highlight { self.highlight } else { self.ink }; - let mut style = self.surface.patch(ink); - if let (Some(Color::Rgb(r, g, b)), Some(Color::Rgb(br, bg, bb))) = (ink.fg, self.surface.bg) - { - // Quantization keeps subtle field changes from repainting every cell. - let amount = (intensity.clamp(0.0, 1.0) * 16.0).round() / 16.0; - let mix = |base, top| (f64::from(base) + f64::from(top - base) * amount) as u8; - style = style.fg(Color::Rgb( - mix(i32::from(br), i32::from(r)), - mix(i32::from(bg), i32::from(g)), - mix(i32::from(bb), i32::from(b)), - )); - } else if intensity < 0.3 { - style = style.add_modifier(Modifier::DIM); - } - style - } -} - -impl Default for MotionPalette { - fn default() -> Self { - Self::from_theme(Theme::default()) - } -} - /// Background widget with an optional blank content region and soft outer falloff. /// /// Work is bounded by the visible cell count, with at most eight field samples per -/// cell. Choose a cadence using measurements at the intended viewport. Unicode assumes a font with -/// single-cell braille and geometric symbols; use [`Self::ascii`] for a fallback. +/// cell. Choose a cadence using measurements at the intended viewport. Unicode +/// assumes single-cell braille and geometric symbols; use [`Self::ascii`] for a +/// fallback. Timing and transition progress belong to the caller. [`MotionState`] +/// is an optional controller for simple linear transitions. +/// +/// ``` +/// use std::time::Duration; +/// use nori_tui_components::{MotionBackground, MotionScene, MotionState}; +/// use ratatui::{buffer::Buffer, layout::Rect, widgets::Widget}; +/// +/// let area = Rect::new(0, 0, 80, 24); +/// let mut buffer = Buffer::empty(area); +/// MotionBackground::new(MotionScene::Dots, Duration::from_secs(12)) +/// .transition_to(MotionScene::Formations, 0.8) +/// .render(area, &mut buffer); +/// +/// let mut controller = MotionState::new(MotionScene::Dots); +/// controller.set_scene(MotionScene::Formations); +/// controller.advance(Duration::from_millis(40)); +/// controller.background().render(area, &mut buffer); +/// ``` #[derive(Clone, Debug)] -pub struct MotionBackground<'a> { - state: &'a MotionState, +pub struct MotionBackground { + scene: MotionScene, + elapsed: Duration, + position: f64, + reduced_motion: bool, palette: MotionPalette, quiet_area: Option, ascii: bool, formation: MotionFormation, } -impl<'a> MotionBackground<'a> { - pub fn new(state: &'a MotionState) -> Self { +impl MotionBackground { + /// Render a scene at explicit ambient time, without a transition controller. + pub fn new(scene: MotionScene, elapsed: Duration) -> Self { Self { - state, + scene, + elapsed, + position: scene.position(), + reduced_motion: false, palette: MotionPalette::default(), quiet_area: None, ascii: false, @@ -204,6 +119,28 @@ impl<'a> MotionBackground<'a> { } } + /// Interpolate from this frame's position to a target scene. The caller owns + /// duration and easing. Progress is clamped to 0..=1; NaN means zero. + /// Intermediate scenes follow suite order; endpoints match their static scene. + pub fn transition_to(mut self, target: MotionScene, progress: f64) -> Self { + let progress = if progress.is_nan() { + 0.0 + } else { + progress.clamp(0.0, 1.0) + }; + self.position += (target.position() - self.position) * progress; + self.scene = target; + self + } + + /// Freeze ambient time at zero and show the requested destination immediately. + /// For freezing an already-playing frame, hold time/progress constant or use + /// [`MotionState::set_reduced_motion`]. + pub fn reduced_motion(mut self, reduced: bool) -> Self { + self.reduced_motion = reduced; + self + } + pub fn palette(mut self, palette: MotionPalette) -> Self { self.palette = palette; self @@ -228,14 +165,21 @@ impl<'a> MotionBackground<'a> { } } -impl Widget for MotionBackground<'_> { +impl Widget for MotionBackground { fn render(self, area: Rect, buf: &mut Buffer) { // Keep coordinates relative to the original area when the buffer clips it. let visible = area.intersection(buf.area); // Bound the floating-point clock even for a caller supplying Duration::MAX. - let time = (self.state.elapsed.as_secs() % 86_400) as f64 - + f64::from(self.state.elapsed.subsec_nanos()) / 1e9; - let field = fields::Field::new(area, time, self.state.position, self.formation); + let (position, time) = if self.reduced_motion { + (self.scene.position(), 0.0) + } else { + ( + self.position, + (self.elapsed.as_secs() % 86_400) as f64 + + f64::from(self.elapsed.subsec_nanos()) / 1e9, + ) + }; + let field = fields::Field::new(area, time, position, self.formation); let quiet = self.quiet_area.filter(|rect| !rect.is_empty()); for y in visible.top()..visible.bottom() { for x in visible.left()..visible.right() { diff --git a/nori-rs/tui-components/src/motion/palette.rs b/nori-rs/tui-components/src/motion/palette.rs new file mode 100644 index 000000000..97bea0524 --- /dev/null +++ b/nori-rs/tui-components/src/motion/palette.rs @@ -0,0 +1,63 @@ +//! Scenery colors independent of animation timing and field geometry. + +use ratatui::style::Color; +use ratatui::style::Modifier; +use ratatui::style::Style; + +use crate::Theme; + +/// Explicit scenery styles, separate from the semantic colors of foreground UI. +#[derive(Clone, Copy, Debug)] +pub struct MotionPalette { + pub surface: Style, + pub ink: Style, + pub highlight: Style, +} + +impl MotionPalette { + /// Terminal-compatible default; never invents a background color. + pub fn from_theme(theme: Theme) -> Self { + Self { + surface: theme.surface, + ink: theme.muted, + highlight: theme.muted, + } + } + + /// Opt-in, true-color art direction from the Nori Motion Suite mockup. + /// The caller must also give foreground content suitable contrasting colors. + #[allow(clippy::disallowed_methods)] + pub fn nori() -> Self { + Self { + surface: Style::new().bg(Color::Rgb(10, 15, 12)), + ink: Style::new().fg(Color::Rgb(125, 214, 160)), + highlight: Style::new().fg(Color::Rgb(214, 255, 224)), + } + } + + #[allow(clippy::disallowed_methods)] + pub(super) fn style(self, intensity: f64, highlight: bool) -> Style { + let ink = if highlight { self.highlight } else { self.ink }; + let mut style = self.surface.patch(ink); + if let (Some(Color::Rgb(r, g, b)), Some(Color::Rgb(br, bg, bb))) = (ink.fg, self.surface.bg) + { + // Quantization keeps subtle field changes from repainting every cell. + let amount = (intensity.clamp(0.0, 1.0) * 16.0).round() / 16.0; + let mix = |base, top| (f64::from(base) + f64::from(top - base) * amount) as u8; + style = style.fg(Color::Rgb( + mix(i32::from(br), i32::from(r)), + mix(i32::from(bg), i32::from(g)), + mix(i32::from(bb), i32::from(b)), + )); + } else if intensity < 0.3 { + style = style.add_modifier(Modifier::DIM); + } + style + } +} + +impl Default for MotionPalette { + fn default() -> Self { + Self::from_theme(Theme::default()) + } +} diff --git a/nori-rs/tui-components/src/motion/state.rs b/nori-rs/tui-components/src/motion/state.rs new file mode 100644 index 000000000..8a620a5e3 --- /dev/null +++ b/nori-rs/tui-components/src/motion/state.rs @@ -0,0 +1,136 @@ +//! Optional linear transition controller; rendering also accepts explicit time and progress. + +use std::time::Duration; + +use super::MotionBackground; +use super::MotionScene; + +/// Optional caller-held animation clock and interruptible scene transition. +/// +/// Adjacent scenes take three seconds to morph. No wall clock, background task, +/// random source, or input handling is hidden in this state. Pause by not calling +/// [`Self::advance`]. Reduced motion freezes scenery and switches scenes instantly. +#[derive(Clone, Debug, Default)] +pub struct MotionState { + scene: MotionScene, + position: f64, + elapsed: Duration, + reduced_motion: bool, +} + +impl MotionState { + pub fn new(scene: MotionScene) -> Self { + Self { + scene, + position: scene.position(), + ..Self::default() + } + } + + /// The requested destination, including while a transition is in progress. + pub fn scene(&self) -> MotionScene { + self.scene + } + + pub fn set_scene(&mut self, scene: MotionScene) { + self.scene = scene; + if self.reduced_motion { + self.position = scene.position(); + } + } + + pub fn set_reduced_motion(&mut self, reduced: bool) { + self.reduced_motion = reduced; + if reduced { + self.position = self.scene.position(); + } + } + + pub fn reduced_motion(&self) -> bool { + self.reduced_motion + } + + /// Snapshot the current frame. Subsequent state changes do not affect it. + /// Reduced motion preserves the controller's frozen ambient time. + pub fn background(&self) -> MotionBackground { + MotionBackground { + position: self.position, + ..MotionBackground::new(self.scene, self.elapsed) + } + } + + pub fn advance(&mut self, delta: Duration) { + if self.reduced_motion { + return; + } + self.elapsed = self.elapsed.saturating_add(delta); + let distance = self.scene.position() - self.position; + self.position += distance.signum() * distance.abs().min(delta.as_secs_f64() / 3.0); + } +} + +#[cfg(test)] +mod tests { + use super::*; + use pretty_assertions::assert_eq; + use ratatui::buffer::Buffer; + use ratatui::layout::Rect; + use ratatui::widgets::Widget; + + fn render(state: &MotionState, area: Rect) -> Buffer { + let mut buffer = Buffer::empty(area); + state.background().render(area, &mut buffer); + buffer + } + #[test] + fn transitions_reverse_from_the_current_frame_and_finish_without_overshoot() { + let mut state = MotionState::default(); + state.set_scene(MotionScene::Blueprint); + state.advance(Duration::from_secs(2)); + assert_eq!(state.position, 2.0 / 3.0); + let before = state.position; + state.set_scene(MotionScene::Dots); + assert_eq!(state.position, before); + state.advance(Duration::from_secs(1)); + assert_eq!(state.position, 1.0 / 3.0); + state.advance(Duration::from_secs(100)); + assert_eq!((state.position, state.scene()), (0.0, MotionScene::Dots)); + state.set_scene(MotionScene::Blueprint); + state.advance(Duration::MAX); + assert_eq!( + (state.position, state.scene()), + (4.0, MotionScene::Blueprint) + ); + // Very long-running clocks remain safe for field hash/index conversions. + render(&state, Rect::new(0, 0, 20, 10)); + } + + #[test] + fn reduced_motion_freezes_the_entire_field_and_makes_scene_changes_immediate() { + let area = Rect::new(0, 0, 60, 20); + let mut state = MotionState::new(MotionScene::Creatures); + state.advance(Duration::from_secs(12)); + state.set_reduced_motion(true); + let before = render(&state, area); + state.advance(Duration::from_secs(50)); + assert_eq!(render(&state, area), before); + state.set_scene(MotionScene::Blueprint); + assert_eq!(state.position, 4.0); + state.set_reduced_motion(false); + state.advance(Duration::from_secs(1)); + assert_eq!(state.elapsed, Duration::from_secs(13)); + } + + #[test] + fn background_is_an_owned_snapshot_of_the_controller() { + let mut state = MotionState::default(); + let widget = state.background(); + let before = render(&state, Rect::new(0, 0, 24, 12)); + state.set_scene(MotionScene::Blueprint); + state.advance(Duration::from_secs(20)); + let mut actual = Buffer::empty(before.area); + widget.render(actual.area, &mut actual); + assert_eq!(actual, before); + assert_ne!(render(&state, before.area), before); + } +} diff --git a/nori-rs/tui-components/src/motion/tests.rs b/nori-rs/tui-components/src/motion/tests.rs index 206ddbe1a..8d2a138f7 100644 --- a/nori-rs/tui-components/src/motion/tests.rs +++ b/nori-rs/tui-components/src/motion/tests.rs @@ -1,14 +1,19 @@ #![allow(clippy::disallowed_methods)] // Verify the explicit RGB art palette. use super::*; +use crate::Theme; use pretty_assertions::assert_eq; use ratatui::Terminal; use ratatui::backend::TestBackend; +use ratatui::style::Color; +use ratatui::style::Modifier; +use ratatui::style::Style; use unicode_width::UnicodeWidthStr; fn render(state: &MotionState, area: Rect, ascii: bool) -> Buffer { let mut buffer = Buffer::empty(area); - MotionBackground::new(state) + state + .background() .palette(MotionPalette::nori()) .ascii(ascii) .render(area, &mut buffer); @@ -23,7 +28,7 @@ fn every_scene_at_wide_and_narrow_sizes() { for (width, height) in [(80, 24), (32, 12)] { let mut terminal = Terminal::new(TestBackend::new(width, height)).unwrap(); terminal - .draw(|frame| frame.render_widget(MotionBackground::new(&state), frame.area())) + .draw(|frame| frame.render_widget(state.background(), frame.area())) .unwrap(); insta::assert_snapshot!( format!("{}_{}x{}", scene.label().to_lowercase(), width, height), @@ -33,45 +38,6 @@ fn every_scene_at_wide_and_narrow_sizes() { } } -#[test] -fn transitions_reverse_from_the_current_frame_and_finish_without_overshoot() { - let mut state = MotionState::default(); - state.set_scene(MotionScene::Blueprint); - state.advance(Duration::from_secs(2)); - assert_eq!(state.position, 2.0 / 3.0); - let before = state.position; - state.set_scene(MotionScene::Dots); - assert_eq!(state.position, before); - state.advance(Duration::from_secs(1)); - assert_eq!(state.position, 1.0 / 3.0); - state.advance(Duration::from_secs(100)); - assert_eq!((state.position, state.scene()), (0.0, MotionScene::Dots)); - state.set_scene(MotionScene::Blueprint); - state.advance(Duration::MAX); - assert_eq!( - (state.position, state.scene()), - (4.0, MotionScene::Blueprint) - ); - // Very long-running clocks remain safe for field hash/index conversions. - render(&state, Rect::new(0, 0, 20, 10), false); -} - -#[test] -fn reduced_motion_freezes_the_entire_field_and_makes_scene_changes_immediate() { - let area = Rect::new(0, 0, 60, 20); - let mut state = MotionState::new(MotionScene::Creatures); - state.advance(Duration::from_secs(12)); - state.set_reduced_motion(true); - let before = render(&state, area, false); - state.advance(Duration::from_secs(50)); - assert_eq!(render(&state, area, false), before); - state.set_scene(MotionScene::Blueprint); - assert_eq!(state.position, 4.0); - state.set_reduced_motion(false); - state.advance(Duration::from_secs(1)); - assert_eq!(state.elapsed, Duration::from_secs(13)); -} - #[test] fn frames_are_deterministic_and_advance_for_every_scene() { let area = Rect::new(0, 0, 80, 24); @@ -97,7 +63,8 @@ fn clips_to_buffer_without_changing_field_coordinates_or_touching_other_cells() let entire = render(&state, area, false); let clip = Rect::new(10, 5, 8, 4); let mut clipped = Buffer::empty(clip); - MotionBackground::new(&state) + state + .background() .palette(MotionPalette::nori()) .render(area, &mut clipped); for y in clip.top()..clip.bottom() { @@ -106,11 +73,11 @@ fn clips_to_buffer_without_changing_field_coordinates_or_touching_other_cells() } } let mut outer = Buffer::filled(Rect::new(0, 0, 30, 16), ratatui::buffer::Cell::new("!")); - MotionBackground::new(&state).render(area, &mut outer); + state.background().render(area, &mut outer); assert_eq!(outer[(0, 0)].symbol(), "!"); assert_eq!(outer[(23, 12)].symbol(), "!"); let original = outer.clone(); - MotionBackground::new(&state).render(Rect::new(3, 3, 0, 0), &mut outer); + state.background().render(Rect::new(3, 3, 0, 0), &mut outer); assert_eq!(outer, original); render(&state, Rect::new(5, 7, 1, 1), false); } @@ -125,7 +92,8 @@ fn quiet_area_clears_old_content_and_styles_and_keeps_foreground_composable() { area, Style::new().fg(Color::Red).add_modifier(Modifier::BOLD), ); - MotionBackground::new(&state) + state + .background() .palette(MotionPalette::nori()) .quiet_area(quiet) .render(area, &mut buffer); @@ -149,7 +117,7 @@ fn default_palette_keeps_terminal_background_and_all_glyphs_are_single_cell() { for scene in MotionScene::ALL { let state = MotionState::new(scene); let mut buffer = Buffer::empty(area); - MotionBackground::new(&state).render(area, &mut buffer); + state.background().render(area, &mut buffer); for cell in &buffer.content { assert_eq!(cell.bg, Color::Reset); assert_eq!(UnicodeWidthStr::width(cell.symbol()), 1); @@ -177,8 +145,71 @@ fn intermediate_zoom_and_fade_have_snapshots() { state.advance(Duration::from_millis(milliseconds)); let mut terminal = Terminal::new(TestBackend::new(60, 18)).unwrap(); terminal - .draw(|frame| frame.render_widget(MotionBackground::new(&state), frame.area())) + .draw(|frame| frame.render_widget(state.background(), frame.area())) .unwrap(); insta::assert_snapshot!(name, terminal.backend().to_string()); } } + +#[test] +fn explicit_transition_endpoints_clamp_and_match_static_scenes() { + let area = Rect::new(0, 0, 24, 12); + let draw = |widget: MotionBackground| { + let mut buffer = Buffer::empty(area); + widget.render(area, &mut buffer); + buffer + }; + for from in MotionScene::ALL { + for to in MotionScene::ALL { + let start = MotionBackground::new(from, Duration::from_secs(12)); + let end = MotionBackground::new(to, Duration::from_secs(12)); + for progress in [f64::NEG_INFINITY, -1.0, f64::NAN, 0.0] { + assert_eq!( + draw(start.clone().transition_to(to, progress)), + draw(start.clone()) + ); + } + for progress in [1.0, 2.0, f64::INFINITY] { + assert_eq!( + draw(start.clone().transition_to(to, progress)), + draw(end.clone()) + ); + } + assert_eq!( + draw(start.transition_to(to, 0.4).reduced_motion(true)), + draw(MotionBackground::new(to, Duration::ZERO)), + ); + } + } +} + +#[test] +fn explicit_time_can_seek_and_matches_controller_frames() { + let area = Rect::new(3, 2, 36, 20); + // Nonchronological input demonstrates that rendering retains no playback state. + for millis in [2400, 0, 3000, 900, 1500, 2400] { + for formation in [ + MotionFormation::Cycle, + MotionFormation::Platoon, + MotionFormation::Muster, + ] { + let mut state = MotionState::new(MotionScene::Dots); + state.advance(Duration::from_secs(12)); + state.set_scene(MotionScene::Formations); + state.advance(Duration::from_millis(millis)); + let mut controlled = Buffer::empty(area); + state + .background() + .formation(formation) + .palette(MotionPalette::nori()) + .render(area, &mut controlled); + let mut explicit = Buffer::empty(area); + MotionBackground::new(MotionScene::Dots, Duration::from_millis(12000 + millis)) + .transition_to(MotionScene::Formations, millis as f64 / 3000.0) + .formation(formation) + .palette(MotionPalette::nori()) + .render(area, &mut explicit); + assert_eq!(explicit, controlled); + } + } +} From 51ff281a886180fca8f77de8d0a03c9b8fe63b74 Mon Sep 17 00:00:00 2001 From: Clifford Ressel Date: Fri, 11 Sep 2026 15:54:17 -0400 Subject: [PATCH 3/4] perf(tui-components): cache motion geometry and batch terminal writes Prepare styles and bounded per-frame geometry caches, skip invisible fields, and buffer the existing Ratatui incremental output. Preserve sampled glyph/style output. Save baseline, interleaved release measurements, live terminal traces, syscall counts, and reproduction tools. --- docs/performance/motion-background/report.md | 4 + docs/performance/motion-low-hanging/README.md | 153 +++ .../bench-120x40-muster-0.csv.gz | Bin 0 -> 5552 bytes .../bench-120x40-platoon-0.csv.gz | Bin 0 -> 5518 bytes .../bench-240x80-muster-0.csv.gz | Bin 0 -> 5995 bytes .../bench-240x80-platoon-0.csv.gz | Bin 0 -> 5992 bytes .../bench-320x100-muster-0.csv.gz | Bin 0 -> 6168 bytes .../bench-320x100-platoon-0.csv.gz | Bin 0 -> 6149 bytes .../baseline-check/bench-metadata.json | 106 ++ .../motion-low-hanging/baseline-frames.txt | 1160 +++++++++++++++++ .../live-320x100-muster-0.csv.gz | Bin 0 -> 4799 bytes .../live-320x100-platoon-0.csv.gz | Bin 0 -> 4806 bytes .../baseline-large/live-metadata.json | 34 + .../baseline/bench-120x40-muster-0.csv.gz | Bin 0 -> 5588 bytes .../baseline/bench-120x40-muster-1.csv.gz | Bin 0 -> 5625 bytes .../baseline/bench-120x40-muster-2.csv.gz | Bin 0 -> 5635 bytes .../baseline/bench-120x40-platoon-0.csv.gz | Bin 0 -> 5596 bytes .../baseline/bench-120x40-platoon-1.csv.gz | Bin 0 -> 5645 bytes .../baseline/bench-120x40-platoon-2.csv.gz | Bin 0 -> 5592 bytes .../baseline/bench-240x80-muster-0.csv.gz | Bin 0 -> 6046 bytes .../baseline/bench-240x80-muster-1.csv.gz | Bin 0 -> 6097 bytes .../baseline/bench-240x80-muster-2.csv.gz | Bin 0 -> 6084 bytes .../baseline/bench-240x80-platoon-0.csv.gz | Bin 0 -> 6109 bytes .../baseline/bench-240x80-platoon-1.csv.gz | Bin 0 -> 6046 bytes .../baseline/bench-240x80-platoon-2.csv.gz | Bin 0 -> 6046 bytes .../baseline/bench-320x100-muster-0.csv.gz | Bin 0 -> 6258 bytes .../baseline/bench-320x100-muster-1.csv.gz | Bin 0 -> 6279 bytes .../baseline/bench-320x100-muster-2.csv.gz | Bin 0 -> 6254 bytes .../baseline/bench-320x100-platoon-0.csv.gz | Bin 0 -> 6261 bytes .../baseline/bench-320x100-platoon-1.csv.gz | Bin 0 -> 6259 bytes .../baseline/bench-320x100-platoon-2.csv.gz | Bin 0 -> 6247 bytes .../baseline/bench-metadata.json | 304 +++++ .../baseline/live-120x40-muster-0.csv.gz | Bin 0 -> 4573 bytes .../baseline/live-120x40-muster-1.csv.gz | Bin 0 -> 4569 bytes .../baseline/live-120x40-platoon-0.csv.gz | Bin 0 -> 4573 bytes .../baseline/live-120x40-platoon-1.csv.gz | Bin 0 -> 4572 bytes .../baseline/live-240x80-muster-0.csv.gz | Bin 0 -> 4694 bytes .../baseline/live-240x80-muster-1.csv.gz | Bin 0 -> 4701 bytes .../baseline/live-240x80-platoon-0.csv.gz | Bin 0 -> 4762 bytes .../baseline/live-240x80-platoon-1.csv.gz | Bin 0 -> 4719 bytes .../baseline/live-metadata.json | 115 ++ .../motion-low-hanging/candidate-frames.txt | 1160 +++++++++++++++++ .../candidate/bench-120x40-muster-0.csv.gz | Bin 0 -> 5514 bytes .../candidate/bench-120x40-muster-1.csv.gz | Bin 0 -> 5580 bytes .../candidate/bench-120x40-muster-2.csv.gz | Bin 0 -> 5613 bytes .../candidate/bench-120x40-platoon-0.csv.gz | Bin 0 -> 5513 bytes .../candidate/bench-120x40-platoon-1.csv.gz | Bin 0 -> 5486 bytes .../candidate/bench-120x40-platoon-2.csv.gz | Bin 0 -> 5501 bytes .../candidate/bench-240x80-muster-0.csv.gz | Bin 0 -> 6056 bytes .../candidate/bench-240x80-muster-1.csv.gz | Bin 0 -> 6021 bytes .../candidate/bench-240x80-muster-2.csv.gz | Bin 0 -> 5994 bytes .../candidate/bench-240x80-platoon-0.csv.gz | Bin 0 -> 5964 bytes .../candidate/bench-240x80-platoon-1.csv.gz | Bin 0 -> 5940 bytes .../candidate/bench-240x80-platoon-2.csv.gz | Bin 0 -> 5975 bytes .../candidate/bench-320x100-muster-0.csv.gz | Bin 0 -> 6168 bytes .../candidate/bench-320x100-muster-1.csv.gz | Bin 0 -> 6152 bytes .../candidate/bench-320x100-muster-2.csv.gz | Bin 0 -> 6155 bytes .../candidate/bench-320x100-platoon-0.csv.gz | Bin 0 -> 6140 bytes .../candidate/bench-320x100-platoon-1.csv.gz | Bin 0 -> 6160 bytes .../candidate/bench-320x100-platoon-2.csv.gz | Bin 0 -> 6175 bytes .../candidate/bench-metadata.json | 304 +++++ .../motion-low-hanging/environment.json | 20 + .../motion-low-hanging/final-frames.txt | 1160 +++++++++++++++++ .../motion-low-hanging/optimized-frames.txt | 1160 +++++++++++++++++ .../live-320x100-muster-0.csv.gz | Bin 0 -> 4770 bytes .../live-320x100-platoon-0.csv.gz | Bin 0 -> 4794 bytes .../optimized-large/live-metadata.json | 34 + .../optimized/bench-120x40-muster-0.csv.gz | Bin 0 -> 5530 bytes .../optimized/bench-120x40-muster-1.csv.gz | Bin 0 -> 5532 bytes .../optimized/bench-120x40-muster-2.csv.gz | Bin 0 -> 5513 bytes .../optimized/bench-120x40-platoon-0.csv.gz | Bin 0 -> 5517 bytes .../optimized/bench-120x40-platoon-1.csv.gz | Bin 0 -> 5478 bytes .../optimized/bench-120x40-platoon-2.csv.gz | Bin 0 -> 5506 bytes .../optimized/bench-240x80-muster-0.csv.gz | Bin 0 -> 5978 bytes .../optimized/bench-240x80-muster-1.csv.gz | Bin 0 -> 6048 bytes .../optimized/bench-240x80-muster-2.csv.gz | Bin 0 -> 5969 bytes .../optimized/bench-240x80-platoon-0.csv.gz | Bin 0 -> 5982 bytes .../optimized/bench-240x80-platoon-1.csv.gz | Bin 0 -> 5973 bytes .../optimized/bench-240x80-platoon-2.csv.gz | Bin 0 -> 5965 bytes .../optimized/bench-320x100-muster-0.csv.gz | Bin 0 -> 6156 bytes .../optimized/bench-320x100-muster-1.csv.gz | Bin 0 -> 6211 bytes .../optimized/bench-320x100-muster-2.csv.gz | Bin 0 -> 6213 bytes .../optimized/bench-320x100-platoon-0.csv.gz | Bin 0 -> 6206 bytes .../optimized/bench-320x100-platoon-1.csv.gz | Bin 0 -> 6207 bytes .../optimized/bench-320x100-platoon-2.csv.gz | Bin 0 -> 6164 bytes .../optimized/bench-metadata.json | 304 +++++ .../optimized/live-120x40-muster-0.csv.gz | Bin 0 -> 4552 bytes .../optimized/live-120x40-muster-1.csv.gz | Bin 0 -> 4553 bytes .../optimized/live-120x40-platoon-0.csv.gz | Bin 0 -> 4555 bytes .../optimized/live-120x40-platoon-1.csv.gz | Bin 0 -> 4591 bytes .../optimized/live-240x80-muster-0.csv.gz | Bin 0 -> 4690 bytes .../optimized/live-240x80-muster-1.csv.gz | Bin 0 -> 4687 bytes .../optimized/live-240x80-platoon-0.csv.gz | Bin 0 -> 4718 bytes .../optimized/live-240x80-platoon-1.csv.gz | Bin 0 -> 4749 bytes .../optimized/live-metadata.json | 115 ++ .../bench-120x40-muster-0.csv.gz | Bin 0 -> 5554 bytes .../bench-120x40-muster-1.csv.gz | Bin 0 -> 5532 bytes .../bench-120x40-platoon-0.csv.gz | Bin 0 -> 5512 bytes .../bench-120x40-platoon-1.csv.gz | Bin 0 -> 5540 bytes .../bench-240x80-muster-0.csv.gz | Bin 0 -> 5997 bytes .../bench-240x80-muster-1.csv.gz | Bin 0 -> 5955 bytes .../bench-240x80-platoon-0.csv.gz | Bin 0 -> 5978 bytes .../bench-240x80-platoon-1.csv.gz | Bin 0 -> 5982 bytes .../bench-320x100-muster-0.csv.gz | Bin 0 -> 6198 bytes .../bench-320x100-muster-1.csv.gz | Bin 0 -> 6195 bytes .../bench-320x100-platoon-0.csv.gz | Bin 0 -> 6207 bytes .../bench-320x100-platoon-1.csv.gz | Bin 0 -> 6183 bytes .../paired-baseline/metadata.json | 132 ++ .../bench-120x40-muster-0.csv.gz | Bin 0 -> 5519 bytes .../bench-120x40-muster-1.csv.gz | Bin 0 -> 5504 bytes .../bench-120x40-platoon-0.csv.gz | Bin 0 -> 5493 bytes .../bench-120x40-platoon-1.csv.gz | Bin 0 -> 5528 bytes .../bench-240x80-muster-0.csv.gz | Bin 0 -> 5986 bytes .../bench-240x80-muster-1.csv.gz | Bin 0 -> 6016 bytes .../bench-240x80-platoon-0.csv.gz | Bin 0 -> 5978 bytes .../bench-240x80-platoon-1.csv.gz | Bin 0 -> 5996 bytes .../bench-320x100-muster-0.csv.gz | Bin 0 -> 6236 bytes .../bench-320x100-muster-1.csv.gz | Bin 0 -> 6198 bytes .../bench-320x100-platoon-0.csv.gz | Bin 0 -> 6142 bytes .../bench-320x100-platoon-1.csv.gz | Bin 0 -> 6150 bytes .../paired-optimized/metadata.json | 132 ++ docs/performance/motion-low-hanging/paired.py | 22 + .../performance/motion-low-hanging/phases.csv | 181 +++ .../bench-120x40-muster-0.csv.gz | Bin 0 -> 5534 bytes .../bench-120x40-muster-1.csv.gz | Bin 0 -> 5572 bytes .../bench-120x40-platoon-0.csv.gz | Bin 0 -> 5547 bytes .../bench-120x40-platoon-1.csv.gz | Bin 0 -> 5536 bytes .../bench-240x80-muster-0.csv.gz | Bin 0 -> 5987 bytes .../bench-240x80-muster-1.csv.gz | Bin 0 -> 5998 bytes .../bench-240x80-platoon-0.csv.gz | Bin 0 -> 5994 bytes .../bench-240x80-platoon-1.csv.gz | Bin 0 -> 5977 bytes .../bench-320x100-muster-0.csv.gz | Bin 0 -> 6219 bytes .../bench-320x100-muster-1.csv.gz | Bin 0 -> 6189 bytes .../bench-320x100-platoon-0.csv.gz | Bin 0 -> 6177 bytes .../bench-320x100-platoon-1.csv.gz | Bin 0 -> 6134 bytes .../preformat-baseline/metadata.json | 132 ++ .../bench-120x40-muster-0.csv.gz | Bin 0 -> 5546 bytes .../bench-120x40-muster-1.csv.gz | Bin 0 -> 5558 bytes .../bench-120x40-platoon-0.csv.gz | Bin 0 -> 5527 bytes .../bench-120x40-platoon-1.csv.gz | Bin 0 -> 5514 bytes .../bench-240x80-muster-0.csv.gz | Bin 0 -> 5991 bytes .../bench-240x80-muster-1.csv.gz | Bin 0 -> 5978 bytes .../bench-240x80-platoon-0.csv.gz | Bin 0 -> 5982 bytes .../bench-240x80-platoon-1.csv.gz | Bin 0 -> 5986 bytes .../bench-320x100-muster-0.csv.gz | Bin 0 -> 6199 bytes .../bench-320x100-muster-1.csv.gz | Bin 0 -> 6167 bytes .../bench-320x100-platoon-0.csv.gz | Bin 0 -> 6190 bytes .../bench-320x100-platoon-1.csv.gz | Bin 0 -> 6182 bytes .../preformat-optimized/metadata.json | 132 ++ docs/performance/motion-low-hanging/run.py | 48 + .../motion-low-hanging/summarize.py | 29 + .../motion-low-hanging/summary.csv | 61 + .../live-240x80-muster-0.csv.gz | Bin 0 -> 4734 bytes .../live-240x80-muster-0.strace.txt | 5 + .../live-240x80-platoon-0.csv.gz | Bin 0 -> 4747 bytes .../live-240x80-platoon-0.strace.txt | 5 + .../trace-baseline/live-metadata.json | 46 + .../live-240x80-muster-0.csv.gz | Bin 0 -> 4716 bytes .../live-240x80-muster-0.strace.txt | 5 + .../live-240x80-platoon-0.csv.gz | Bin 0 -> 4754 bytes .../live-240x80-platoon-0.strace.txt | 5 + .../trace-optimized/live-metadata.json | 46 + docs/reference/motion-background.md | 12 + .../examples/motion_equivalence.rs | 81 ++ .../examples/motion_storybook/README.md | 7 + .../tui-components/examples/support/mod.rs | 9 +- nori-rs/tui-components/src/motion/fields.rs | 46 +- .../tui-components/src/motion/fields/math.rs | 115 +- .../tui-components/src/motion/fields/zoom.rs | 124 +- nori-rs/tui-components/src/motion/mod.rs | 11 +- nori-rs/tui-components/src/motion/palette.rs | 69 + nori-rs/tui-components/src/motion/tests.rs | 29 + 172 files changed, 7545 insertions(+), 72 deletions(-) create mode 100644 docs/performance/motion-low-hanging/README.md create mode 100644 docs/performance/motion-low-hanging/baseline-check/bench-120x40-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline-check/bench-120x40-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline-check/bench-240x80-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline-check/bench-240x80-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline-check/bench-320x100-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline-check/bench-320x100-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline-check/bench-metadata.json create mode 100644 docs/performance/motion-low-hanging/baseline-frames.txt create mode 100644 docs/performance/motion-low-hanging/baseline-large/live-320x100-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline-large/live-320x100-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline-large/live-metadata.json create mode 100644 docs/performance/motion-low-hanging/baseline/bench-120x40-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-120x40-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-120x40-muster-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-120x40-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-120x40-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-120x40-platoon-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-240x80-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-240x80-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-240x80-muster-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-240x80-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-240x80-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-240x80-platoon-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-320x100-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-320x100-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-320x100-muster-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-320x100-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-320x100-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-320x100-platoon-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/bench-metadata.json create mode 100644 docs/performance/motion-low-hanging/baseline/live-120x40-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/live-120x40-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/live-120x40-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/live-120x40-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/live-240x80-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/live-240x80-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/live-240x80-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/live-240x80-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/baseline/live-metadata.json create mode 100644 docs/performance/motion-low-hanging/candidate-frames.txt create mode 100644 docs/performance/motion-low-hanging/candidate/bench-120x40-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-120x40-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-120x40-muster-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-120x40-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-120x40-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-120x40-platoon-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-240x80-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-240x80-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-240x80-muster-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-240x80-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-240x80-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-240x80-platoon-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-320x100-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-320x100-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-320x100-muster-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-320x100-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-320x100-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-320x100-platoon-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/candidate/bench-metadata.json create mode 100644 docs/performance/motion-low-hanging/environment.json create mode 100644 docs/performance/motion-low-hanging/final-frames.txt create mode 100644 docs/performance/motion-low-hanging/optimized-frames.txt create mode 100644 docs/performance/motion-low-hanging/optimized-large/live-320x100-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized-large/live-320x100-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized-large/live-metadata.json create mode 100644 docs/performance/motion-low-hanging/optimized/bench-120x40-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-120x40-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-120x40-muster-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-120x40-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-120x40-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-120x40-platoon-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-240x80-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-240x80-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-240x80-muster-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-240x80-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-240x80-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-240x80-platoon-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-320x100-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-320x100-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-320x100-muster-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-320x100-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-320x100-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-320x100-platoon-2.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/bench-metadata.json create mode 100644 docs/performance/motion-low-hanging/optimized/live-120x40-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/live-120x40-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/live-120x40-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/live-120x40-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/live-240x80-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/live-240x80-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/live-240x80-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/live-240x80-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/optimized/live-metadata.json create mode 100644 docs/performance/motion-low-hanging/paired-baseline/bench-120x40-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-baseline/bench-120x40-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-baseline/bench-120x40-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-baseline/bench-120x40-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-baseline/bench-240x80-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-baseline/bench-240x80-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-baseline/bench-240x80-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-baseline/bench-240x80-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-baseline/bench-320x100-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-baseline/bench-320x100-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-baseline/bench-320x100-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-baseline/bench-320x100-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-baseline/metadata.json create mode 100644 docs/performance/motion-low-hanging/paired-optimized/bench-120x40-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-optimized/bench-120x40-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-optimized/bench-120x40-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-optimized/bench-120x40-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-optimized/bench-240x80-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-optimized/bench-240x80-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-optimized/bench-240x80-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-optimized/bench-240x80-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-optimized/bench-320x100-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-optimized/bench-320x100-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-optimized/bench-320x100-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-optimized/bench-320x100-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/paired-optimized/metadata.json create mode 100644 docs/performance/motion-low-hanging/paired.py create mode 100644 docs/performance/motion-low-hanging/phases.csv create mode 100644 docs/performance/motion-low-hanging/preformat-baseline/bench-120x40-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-baseline/bench-120x40-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-baseline/bench-120x40-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-baseline/bench-120x40-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-baseline/bench-240x80-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-baseline/bench-240x80-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-baseline/bench-240x80-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-baseline/bench-240x80-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-baseline/bench-320x100-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-baseline/bench-320x100-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-baseline/bench-320x100-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-baseline/bench-320x100-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-baseline/metadata.json create mode 100644 docs/performance/motion-low-hanging/preformat-optimized/bench-120x40-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-optimized/bench-120x40-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-optimized/bench-120x40-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-optimized/bench-120x40-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-optimized/bench-240x80-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-optimized/bench-240x80-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-optimized/bench-240x80-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-optimized/bench-240x80-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-optimized/bench-320x100-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-optimized/bench-320x100-muster-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-optimized/bench-320x100-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-optimized/bench-320x100-platoon-1.csv.gz create mode 100644 docs/performance/motion-low-hanging/preformat-optimized/metadata.json create mode 100644 docs/performance/motion-low-hanging/run.py create mode 100644 docs/performance/motion-low-hanging/summarize.py create mode 100644 docs/performance/motion-low-hanging/summary.csv create mode 100644 docs/performance/motion-low-hanging/trace-baseline/live-240x80-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/trace-baseline/live-240x80-muster-0.strace.txt create mode 100644 docs/performance/motion-low-hanging/trace-baseline/live-240x80-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/trace-baseline/live-240x80-platoon-0.strace.txt create mode 100644 docs/performance/motion-low-hanging/trace-baseline/live-metadata.json create mode 100644 docs/performance/motion-low-hanging/trace-optimized/live-240x80-muster-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/trace-optimized/live-240x80-muster-0.strace.txt create mode 100644 docs/performance/motion-low-hanging/trace-optimized/live-240x80-platoon-0.csv.gz create mode 100644 docs/performance/motion-low-hanging/trace-optimized/live-240x80-platoon-0.strace.txt create mode 100644 docs/performance/motion-low-hanging/trace-optimized/live-metadata.json create mode 100644 nori-rs/tui-components/examples/motion_equivalence.rs diff --git a/docs/performance/motion-background/report.md b/docs/performance/motion-background/report.md index 75d0cbe45..107e516e4 100644 --- a/docs/performance/motion-background/report.md +++ b/docs/performance/motion-background/report.md @@ -1,5 +1,9 @@ # Motion measurement status +A new durable baseline and completed optimization pass are available in the +[September 11 report](../motion-low-hanging/README.md). The notes below describe +the earlier interrupted investigation. + The initial investigation was interrupted. Its broad headless/live runs reported frame-budget overruns at larger terminal sizes, but their raw traces were stored in temporary files and are no longer available. The planned CPU sampling for diff --git a/docs/performance/motion-low-hanging/README.md b/docs/performance/motion-low-hanging/README.md new file mode 100644 index 000000000..f40d317e1 --- /dev/null +++ b/docs/performance/motion-low-hanging/README.md @@ -0,0 +1,153 @@ +# Motion: baseline and straightforward optimizations + +Measured September 11, 2026, against commit `549032f3`. The final headless +comparison interleaves the preserved baseline and optimized release binaries. +P95 frame work fell **21–26%**, with the same sampling density, animation timing, +colors, and geometry. The measured frame/style fingerprints and ANSI byte counts +match. Large live terminal frames still sometimes exceed the 25 FPS budget. + +## Headless results + +Real widget → Ratatui lazy diff → Crossterm ANSI encoder → buffer reset. No +terminal I/O or sleeping. The sink's writes are method calls, not syscalls. + +| Viewport / variant | Baseline p95 | Optimized p95 | Reduction | +|---|---:|---:|---:| +| 120x40 platoon | 5.65 ms | 4.47 ms | 20.9% | +| 120x40 muster | 5.89 ms | 4.41 ms | 25.2% | +| 240x80 platoon | 22.73 ms | 17.89 ms | 21.3% | +| 240x80 muster | 23.48 ms | 17.60 ms | 25.0% | +| 320x100 platoon | 37.92 ms | 29.88 ms | 21.2% | +| 320x100 muster | 38.90 ms | 28.80 ms | 26.0% | + +Use these interleaved results for the primary comparison. Each entry contains +298 measured frames (two repetitions of a six-second loop, excluding the first +full repaint of each repetition). P95/p99, stage timings, maxima, and budget +counts are in [summary.csv](summary.csv); phase-specific timings are in +[phases.csv](phases.csv). Do not add individual stage percentiles together. + +The earlier sequential baseline had 320x100 p95 of 41.78/44.10 ms, with 9.4/14.3% +of frames above 40 ms. A later unchanged-binary check ran faster. That host drift +is why the more conservative interleaved comparison above is the headline, +rather than attributing all of the initial 28–36% difference to code changes. + +## Actual terminal production + +Finite runs through a PTY into detached tmux, target 25 FPS. Two repetitions per +120x40/240x80 case; one per 320x100 case. These are different elapsed-time sample +populations: overloaded live runs advance their animation by real time. They do +not present the same fixed sequence as the headless test, and fewer heavy frames +are produced when deadlines are missed. + +| Viewport / variant | Baseline p95 draw | Optimized p95 draw | Produced FPS before → after | +|---|---:|---:|---:| +| 120x40 platoon | 20.79 ms | 18.34 ms | 24.63 → 24.63 | +| 120x40 muster | 23.41 ms | 18.88 ms | 24.65 → 24.63 | +| 240x80 platoon | 42.48 ms | 37.54 ms | 24.27 → 24.52 | +| 240x80 muster | 39.33 ms | 37.57 ms | 24.55 → 24.56 | +| 320x100 platoon | 51.23 ms | 47.58 ms | 23.62 → 24.25 | +| 320x100 muster | 58.61 ms | 45.66 ms | 22.95 → 24.02 | + +At 320x100, work above 40 ms fell from 26.8% to 13.4% for platoon and 24.2% to +15.4% for muster in these limited live samples. This is useful improvement, but +**not a complete stutter fix or a 60 FPS result**. Producer throughput is not +monitor/compositor presentation; no graphical-terminal displayed FPS was measured. + +The output residual did not get uniformly faster: its p95 rose in these live +runs, despite substantially fewer write calls. Buffer bursts, PTY backpressure, +CPU power behavior, and changed wall-clock trajectories can affect that number; +this experiment does not isolate their contributions. In particular, fewer +syscalls must not be reported as an equivalent FPS gain. + +Separate strace runs at 240x80 measured `write` calls across the finite process: + +| Variant | Baseline calls | Optimized calls | Reduction | +|---|---:|---:|---:| +| Platoon | 34,119 | 626 | 98.2% | +| Muster | 33,957 | 629 | 98.1% | + +Live and strace runs used the same optimized logic before final formatting; +their binary hashes are recorded separately from the final headless run. +Counts include setup, restoration, and CSV saving. Traced runs are excluded +from wall-clock summaries; tracing perturbs scheduling and syscall costs. +Their timing CSVs are retained for provenance, not performance conclusions. + +## Changes kept + +- Prepare the existing quantized palette once per frame; preserve custom RGB, + terminal colors, modifiers, and the exact non-RGB dimming threshold. +- Cache island drift/pulse by tile within a frame (64 direct-mapped entries). +- Cache noise lattice corners (16 entries) and time interpolation weight; + retain multiply/add order for interpolated noise. +- Cache four muster rows, including their logarithmic depth coordinate. +- Calculate zoom blend, braille blend, formation selection/fade, and scene fade + once per frame. +- Skip invisible dot geometry at the formation endpoint and ambient noise under + an opaque pattern. Soft formation fades still compute both contributing fields. +- Hold stdout's lock and use a 64 KiB BufWriter in the shared storybook terminal. + Ratatui already performed incremental updates; it still owns the previous/current + buffers, diffing, and Crossterm encoding. No custom ANSI renderer was added. + +Caches are bounded and frame-local, with coordinate-checked entries. Collisions +recompute values; no cross-frame invalidation, persistent scene graph, or caller +cache API is needed. Rendering a clipped region cannot change its field origin. +The reusable widget remains terminal-independent. Applications adopting it must +choose their own backend writer; the buffering change currently serves storybooks. + +## Verification + +All 1,160 cell/style fingerprints match the baseline. The equivalence utility +covers every sampled frame of both zoom directions at 36x20 and 120x40, all five +scenes at several ambient times and transition positions, ASCII and RGB/terminal +policies, clipping, and quiet regions. This is finite regression coverage, not a +proof for every floating-point coordinate or font. + +All existing snapshots match without updates. Additional tests cover noise-cache +collisions/negative coordinates, prepared custom palettes, and clipped/cold-cache +zoom equivalence. The crate suite and all opt-in storybook terminal tests pass, +including the other examples affected by buffered terminal support. + +## Artifacts and reproduction + +- `baseline/`: initial headless matrix (three repetitions) and live baseline. +- `candidate/`: intermediate caching pass, before skipping hidden ambient work. +- `optimized/`: combined headless/live run. +- `baseline-check/`: later unchanged-binary headless check for host drift. +- `paired-baseline/`, `paired-optimized/`: primary interleaved comparison of the + final formatted release binary. `preformat-*` retains the earlier check; + formatting changed debug metadata, and the final comparison was rerun. +- `baseline-large/`, `optimized-large/`: 320x100 terminal runs. +- `trace-baseline/`, `trace-optimized/`: separate syscall runs. +- `*-frames.txt`: fingerprints before/after; metadata JSONs contain exact commands + and binary SHA256 hashes. `environment.json` records build/host information. +- Raw per-frame CSVs are gzip-compressed after measurement. Each finite run saved + its data immediately to this directory; nothing depends on temporary storage. + +Build the baseline commit and candidate in separate checkouts. Use Rust 1.90.0, +release optimization with fat LTO and one codegen unit, debug line tables, no +stripping, and the same linker/flags. Build before measuring. On this host: + +```sh +CARGO_BUILD_JOBS=2 CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=cc RUSTFLAGS='' \ +CARGO_PROFILE_RELEASE_DEBUG=line-tables-only CARGO_PROFILE_RELEASE_STRIP=none \ +cargo build --release -p nori-tui-components --example motion_storybook --example motion_equivalence +``` + +`motion_equivalence` is introduced by this change: copy its unchanged example +source into the baseline checkout before building that utility. Run it from each build and compare its stdout with `cmp`. +For interleaved timings, supply the two built binaries and a fresh output path: + +```sh +python3 docs/performance/motion-low-hanging/paired.py BASELINE_BINARY OPTIMIZED_BINARY /tmp/new-motion-pair +``` + +`run.py BINARY NEW_LABEL` records the sequential matrix; add `--live --repeats 2` +for finite terminal tests, `--sizes 320x100` to select a size, or `--trace` with +`--live` for syscall counts. Live mode uses only the isolated TUI skill scripts; +`TUI_PUPPETEERING_DIR` can override their location. Existing artifacts are never +overwritten. `summarize.py` reads raw or compressed CSVs in this report directory. + +All runs are sequential on a shared host with NO_COLOR unset and true-color +terminal settings. No CPU affinity, power policy, security settings, or frame +quality was changed. The sample size and shared host limit precision; repeated +per-run values and raw traces are retained for reassessment. diff --git a/docs/performance/motion-low-hanging/baseline-check/bench-120x40-muster-0.csv.gz b/docs/performance/motion-low-hanging/baseline-check/bench-120x40-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..64ce6e1333db992862bc2a51f2c9e1dd5eaf732d GIT binary patch literal 5552 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline-check/bench-120x40-platoon-0.csv.gz b/docs/performance/motion-low-hanging/baseline-check/bench-120x40-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..7dad7e6f616809e391b7c1a5797ac26524f51e9e GIT binary patch literal 5518 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 QDfX}b0>(A_oNYh=0J|M--2eap literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline-check/bench-240x80-muster-0.csv.gz b/docs/performance/motion-low-hanging/baseline-check/bench-240x80-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..0384b337883cc568f7eac1c9fc0f2a2641eb894c GIT binary patch literal 5995 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 WQw^HQHAv?8*M9-}Zl={5L;wJN_`5~` literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline-check/bench-320x100-muster-0.csv.gz b/docs/performance/motion-low-hanging/baseline-check/bench-320x100-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..fb330602c9fd5dd64cceb4518ed945569f153a4d GIT binary patch literal 6168 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 q4K`GO|NK8mroti3L;wJ=)F6WZ literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline-check/bench-320x100-platoon-0.csv.gz b/docs/performance/motion-low-hanging/baseline-check/bench-320x100-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..762bccaf215fd0d1b690e8a5b12f1d676fc400bc GIT binary patch literal 6149 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 XyyK*?#HO`SZvN~4ID0r!T15Z=5x*Ud literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline-check/bench-metadata.json b/docs/performance/motion-low-hanging/baseline-check/bench-metadata.json new file mode 100644 index 000000000..f6130725e --- /dev/null +++ b/docs/performance/motion-low-hanging/baseline-check/bench-metadata.json @@ -0,0 +1,106 @@ +{ + "binary": "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "sha256": "6af8b0db3173a9fadd6393edfdd3b30e8dbf166dd8abf998d21598f81e3bfdc4", + "mode": "bench", + "runs": [ + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline-check/bench-120x40-muster-0.csv", + "--muster", + "--bench", + "--size", + "120x40" + ], + "size": "120x40", + "muster": true, + "repeat": 0, + "wall_seconds": 0.664231024999026 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline-check/bench-240x80-platoon-0.csv", + "--bench", + "--size", + "240x80" + ], + "size": "240x80", + "muster": false, + "repeat": 0, + "wall_seconds": 2.598454021001089 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline-check/bench-120x40-platoon-0.csv", + "--bench", + "--size", + "120x40" + ], + "size": "120x40", + "muster": false, + "repeat": 0, + "wall_seconds": 0.6407288449991029 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline-check/bench-320x100-platoon-0.csv", + "--bench", + "--size", + "320x100" + ], + "size": "320x100", + "muster": false, + "repeat": 0, + "wall_seconds": 4.365079515002435 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline-check/bench-320x100-muster-0.csv", + "--muster", + "--bench", + "--size", + "320x100" + ], + "size": "320x100", + "muster": true, + "repeat": 0, + "wall_seconds": 4.305430415999581 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline-check/bench-240x80-muster-0.csv", + "--muster", + "--bench", + "--size", + "240x80" + ], + "size": "240x80", + "muster": true, + "repeat": 0, + "wall_seconds": 2.6039201579988003 + } + ] +} diff --git a/docs/performance/motion-low-hanging/baseline-frames.txt b/docs/performance/motion-low-hanging/baseline-frames.txt new file mode 100644 index 000000000..df5bae431 --- /dev/null +++ b/docs/performance/motion-low-hanging/baseline-frames.txt @@ -0,0 +1,1160 @@ +zoom 36x20 Platoon 0 2ab363c9d935311c +zoom 36x20 Platoon 1 31792fd340e91869 +zoom 36x20 Platoon 2 dcfe66c1a463e5a6 +zoom 36x20 Platoon 3 3f28f03d0e942e56 +zoom 36x20 Platoon 4 da87e29b144b8377 +zoom 36x20 Platoon 5 5dba152ac12b1d74 +zoom 36x20 Platoon 6 85128265b4ba5c41 +zoom 36x20 Platoon 7 45e836c33945b3f2 +zoom 36x20 Platoon 8 65e4c6c1cf113838 +zoom 36x20 Platoon 9 6237b783dfc727d6 +zoom 36x20 Platoon 10 265df3f33b870feb +zoom 36x20 Platoon 11 72eca53d3d3e4453 +zoom 36x20 Platoon 12 aa6d36945a1cc01a +zoom 36x20 Platoon 13 3b044be18d62f048 +zoom 36x20 Platoon 14 715fa41390ecc13e +zoom 36x20 Platoon 15 1c81cf3c9c609728 +zoom 36x20 Platoon 16 877b58025bd57213 +zoom 36x20 Platoon 17 2f776aa78307feda +zoom 36x20 Platoon 18 b38416220230d983 +zoom 36x20 Platoon 19 2eeb7d0fdd5fca86 +zoom 36x20 Platoon 20 b8bcfd9d7f94bb93 +zoom 36x20 Platoon 21 15ee8bcd74c07c14 +zoom 36x20 Platoon 22 b61068362432ced4 +zoom 36x20 Platoon 23 47a33ca7487ac82d +zoom 36x20 Platoon 24 072ca673bc244b4b +zoom 36x20 Platoon 25 df8ffb8df5bae225 +zoom 36x20 Platoon 26 26706028cfd58465 +zoom 36x20 Platoon 27 228c3af1daee3462 +zoom 36x20 Platoon 28 d66e8a3a3cccde6c +zoom 36x20 Platoon 29 4cd57cd839c1d43a +zoom 36x20 Platoon 30 6f33575228ecf783 +zoom 36x20 Platoon 31 09775bdbae830bb4 +zoom 36x20 Platoon 32 6f0dca31eb15aab9 +zoom 36x20 Platoon 33 5db3c4d0478c69f5 +zoom 36x20 Platoon 34 0e3d0287958796ad +zoom 36x20 Platoon 35 4deb5d3432be6d9d +zoom 36x20 Platoon 36 1f23311535d94387 +zoom 36x20 Platoon 37 ba1e210040df5a8f +zoom 36x20 Platoon 38 e753b86ed02c1aa5 +zoom 36x20 Platoon 39 aeecad77b3e8a63d +zoom 36x20 Platoon 40 6c8dae8b368dbae0 +zoom 36x20 Platoon 41 18419772d506f782 +zoom 36x20 Platoon 42 f6d2b03fc1e7618c +zoom 36x20 Platoon 43 c1b99ec49e4e9933 +zoom 36x20 Platoon 44 7d129fc37bb8b56c +zoom 36x20 Platoon 45 e5ca118c8190d3b7 +zoom 36x20 Platoon 46 84984a48f75d5b06 +zoom 36x20 Platoon 47 75c264b206498025 +zoom 36x20 Platoon 48 898863316973c3be +zoom 36x20 Platoon 49 8a729c68fc364f82 +zoom 36x20 Platoon 50 1cfe2860c58847cd +zoom 36x20 Platoon 51 e94babd9674ad034 +zoom 36x20 Platoon 52 892f01942def31f1 +zoom 36x20 Platoon 53 4450e325fadc9389 +zoom 36x20 Platoon 54 09747587e337c0b4 +zoom 36x20 Platoon 55 62691f4bfe2d38e3 +zoom 36x20 Platoon 56 caa555dbf31a1486 +zoom 36x20 Platoon 57 c23349e6fb9b5174 +zoom 36x20 Platoon 58 4eeb91b6726ad9bb +zoom 36x20 Platoon 59 e7089327949f3194 +zoom 36x20 Platoon 60 e86c1e0cef4fa2a8 +zoom 36x20 Platoon 61 23d6c0073e3fb8ba +zoom 36x20 Platoon 62 80e9a0dd64a41488 +zoom 36x20 Platoon 63 39e3c6970b29081c +zoom 36x20 Platoon 64 612c0aafcdcc6ad3 +zoom 36x20 Platoon 65 15b4bd610318c8a9 +zoom 36x20 Platoon 66 0a528fdf3d1dfa23 +zoom 36x20 Platoon 67 92c965c66938ca69 +zoom 36x20 Platoon 68 84f82d20066c2494 +zoom 36x20 Platoon 69 87cc90e1ce4c92e8 +zoom 36x20 Platoon 70 f636d824e40fa818 +zoom 36x20 Platoon 71 991f12d77a4e52b1 +zoom 36x20 Platoon 72 8d13d7a1fb4eb18c +zoom 36x20 Platoon 73 2fe9f041aaf4028c +zoom 36x20 Platoon 74 2b93c277629495fd +zoom 36x20 Platoon 75 5a08803d9a48d511 +zoom 36x20 Platoon 76 9a9968a91ceb5572 +zoom 36x20 Platoon 77 8290b8cd3589e7e7 +zoom 36x20 Platoon 78 dbdae693350513ad +zoom 36x20 Platoon 79 b6993eacb3d5a2e6 +zoom 36x20 Platoon 80 b470b61eb3ac10bc +zoom 36x20 Platoon 81 e61cde3ab932bde6 +zoom 36x20 Platoon 82 e2d75d6cffc82743 +zoom 36x20 Platoon 83 a9d2f5162627455f +zoom 36x20 Platoon 84 09d8dce7f0782250 +zoom 36x20 Platoon 85 8ef1e4450461c374 +zoom 36x20 Platoon 86 825b91fe366a49b1 +zoom 36x20 Platoon 87 81acc102e9af21f3 +zoom 36x20 Platoon 88 da219abb559e5343 +zoom 36x20 Platoon 89 f6993334ac79346d +zoom 36x20 Platoon 90 458bf6b1e8d76777 +zoom 36x20 Platoon 91 77a7b223ea7aebcb +zoom 36x20 Platoon 92 50fd7f26bfb56dfa +zoom 36x20 Platoon 93 59e5a042b57f19c6 +zoom 36x20 Platoon 94 1a387d5368baf3ad +zoom 36x20 Platoon 95 39d155deb8c8e818 +zoom 36x20 Platoon 96 068140f4999a38c7 +zoom 36x20 Platoon 97 7654d150ef814e6f +zoom 36x20 Platoon 98 d663148bf16b8632 +zoom 36x20 Platoon 99 0d188cf7ab739a20 +zoom 36x20 Platoon 100 ecef278f7b57fab7 +zoom 36x20 Platoon 101 fb523c51bfff095a +zoom 36x20 Platoon 102 7f876f1a2b4aec6e +zoom 36x20 Platoon 103 420a648b698f1a57 +zoom 36x20 Platoon 104 5a2540263106369f +zoom 36x20 Platoon 105 8390154604f94294 +zoom 36x20 Platoon 106 76c0db3b143d6ffe +zoom 36x20 Platoon 107 794b084c4ec47e19 +zoom 36x20 Platoon 108 cf277aba7afcb70f +zoom 36x20 Platoon 109 59857d66fa31529c +zoom 36x20 Platoon 110 afc70d7ffa132a68 +zoom 36x20 Platoon 111 31f0e3d1b017fccc +zoom 36x20 Platoon 112 d4a13752d7168d83 +zoom 36x20 Platoon 113 8f3b4b24167bf18d +zoom 36x20 Platoon 114 93314a56be1908f3 +zoom 36x20 Platoon 115 13f4da84b2d626b0 +zoom 36x20 Platoon 116 972c1f7b5ce0904a +zoom 36x20 Platoon 117 a72ce7e68248c9d4 +zoom 36x20 Platoon 118 6db23482202424fc +zoom 36x20 Platoon 119 bd0e698362234587 +zoom 36x20 Platoon 120 23fda70cfeed6c12 +zoom 36x20 Platoon 121 eeca1f845488ff1f +zoom 36x20 Platoon 122 7ac6b67598f5a543 +zoom 36x20 Platoon 123 dcab6c7ea5cfe47f +zoom 36x20 Platoon 124 04f7f2d1b0a8d072 +zoom 36x20 Platoon 125 73334dd7c3031b77 +zoom 36x20 Platoon 126 f176a65c9bddf6bc +zoom 36x20 Platoon 127 a57b83938c0cc91c +zoom 36x20 Platoon 128 507a8e6c8c095a73 +zoom 36x20 Platoon 129 2611a447016f73c3 +zoom 36x20 Platoon 130 45ad898c8a4e7585 +zoom 36x20 Platoon 131 9371cdc936fe0196 +zoom 36x20 Platoon 132 f956c988206889b6 +zoom 36x20 Platoon 133 d5a847a64a0a35b7 +zoom 36x20 Platoon 134 362edc1929d99213 +zoom 36x20 Platoon 135 f42e2e33be6e4b73 +zoom 36x20 Platoon 136 c0fed45980674071 +zoom 36x20 Platoon 137 938d6c70b551cfda +zoom 36x20 Platoon 138 b470d088e9d62147 +zoom 36x20 Platoon 139 34294a4e0d6d56a5 +zoom 36x20 Platoon 140 103580917b6986f6 +zoom 36x20 Platoon 141 b3a31d01ce71f4f3 +zoom 36x20 Platoon 142 76d7bb5ce79cf8d1 +zoom 36x20 Platoon 143 4b15d9503958fa96 +zoom 36x20 Platoon 144 ebd686b4b877bd99 +zoom 36x20 Platoon 145 c2d570f09f8f1749 +zoom 36x20 Platoon 146 ac58febd19b2a316 +zoom 36x20 Platoon 147 80a84150c8e545d8 +zoom 36x20 Platoon 148 3bf9440d0784872b +zoom 36x20 Platoon 149 4362b9c80fca6d48 +zoom 36x20 Muster 0 2ab363c9d935311c +zoom 36x20 Muster 1 31792fd340e91869 +zoom 36x20 Muster 2 dcfe66c1a463e5a6 +zoom 36x20 Muster 3 3f28f03d0e942e56 +zoom 36x20 Muster 4 da87e29b144b8377 +zoom 36x20 Muster 5 5dba152ac12b1d74 +zoom 36x20 Muster 6 85128265b4ba5c41 +zoom 36x20 Muster 7 45e836c33945b3f2 +zoom 36x20 Muster 8 65e4c6c1cf113838 +zoom 36x20 Muster 9 6237b783dfc727d6 +zoom 36x20 Muster 10 265df3f33b870feb +zoom 36x20 Muster 11 72eca53d3d3e4453 +zoom 36x20 Muster 12 aa6d36945a1cc01a +zoom 36x20 Muster 13 3b044be18d62f048 +zoom 36x20 Muster 14 715fa41390ecc13e +zoom 36x20 Muster 15 1c81cf3c9c609728 +zoom 36x20 Muster 16 877b58025bd57213 +zoom 36x20 Muster 17 2f776aa78307feda +zoom 36x20 Muster 18 b38416220230d983 +zoom 36x20 Muster 19 2eeb7d0fdd5fca86 +zoom 36x20 Muster 20 b8bcfd9d7f94bb93 +zoom 36x20 Muster 21 15ee8bcd74c07c14 +zoom 36x20 Muster 22 b61068362432ced4 +zoom 36x20 Muster 23 47a33ca7487ac82d +zoom 36x20 Muster 24 072ca673bc244b4b +zoom 36x20 Muster 25 df8ffb8df5bae225 +zoom 36x20 Muster 26 26706028cfd58465 +zoom 36x20 Muster 27 228c3af1daee3462 +zoom 36x20 Muster 28 d66e8a3a3cccde6c +zoom 36x20 Muster 29 4cd57cd839c1d43a +zoom 36x20 Muster 30 6f33575228ecf783 +zoom 36x20 Muster 31 09775bdbae830bb4 +zoom 36x20 Muster 32 6f0dca31eb15aab9 +zoom 36x20 Muster 33 5db3c4d0478c69f5 +zoom 36x20 Muster 34 0e3d0287958796ad +zoom 36x20 Muster 35 4deb5d3432be6d9d +zoom 36x20 Muster 36 1f23311535d94387 +zoom 36x20 Muster 37 ba1e210040df5a8f +zoom 36x20 Muster 38 e753b86ed02c1aa5 +zoom 36x20 Muster 39 aeecad77b3e8a63d +zoom 36x20 Muster 40 6c8dae8b368dbae0 +zoom 36x20 Muster 41 18419772d506f782 +zoom 36x20 Muster 42 f6d2b03fc1e7618c +zoom 36x20 Muster 43 c1b99ec49e4e9933 +zoom 36x20 Muster 44 7d129fc37bb8b56c +zoom 36x20 Muster 45 e5ca118c8190d3b7 +zoom 36x20 Muster 46 84984a48f75d5b06 +zoom 36x20 Muster 47 75c264b206498025 +zoom 36x20 Muster 48 898863316973c3be +zoom 36x20 Muster 49 8a729c68fc364f82 +zoom 36x20 Muster 50 1cfe2860c58847cd +zoom 36x20 Muster 51 e94babd9674ad034 +zoom 36x20 Muster 52 892f01942def31f1 +zoom 36x20 Muster 53 4450e325fadc9389 +zoom 36x20 Muster 54 09747587e337c0b4 +zoom 36x20 Muster 55 62691f4bfe2d38e3 +zoom 36x20 Muster 56 caa555dbf31a1486 +zoom 36x20 Muster 57 b36e4aad47846bd2 +zoom 36x20 Muster 58 0bcc18131bedd8a7 +zoom 36x20 Muster 59 d5e28f6284c5c0c6 +zoom 36x20 Muster 60 cc8f460908ae7a1d +zoom 36x20 Muster 61 b736b44c903434a3 +zoom 36x20 Muster 62 8b15fddaaea6a719 +zoom 36x20 Muster 63 b3228826e2f36d54 +zoom 36x20 Muster 64 3cb6d0ec332440df +zoom 36x20 Muster 65 f43a89d96d9e91a3 +zoom 36x20 Muster 66 5db52ce6f91600a1 +zoom 36x20 Muster 67 a23e80085ff0f802 +zoom 36x20 Muster 68 3a49a97ad794d5a2 +zoom 36x20 Muster 69 2d36ec75b28a057b +zoom 36x20 Muster 70 64cf0d7708cc8e14 +zoom 36x20 Muster 71 7c4eacab02738fc8 +zoom 36x20 Muster 72 684e9e5a0e491707 +zoom 36x20 Muster 73 89cc22aa106c2f4c +zoom 36x20 Muster 74 dd1dd7883eef9326 +zoom 36x20 Muster 75 b03787af6d5b0f80 +zoom 36x20 Muster 76 89cae433818f7521 +zoom 36x20 Muster 77 304e5e241a0bcad9 +zoom 36x20 Muster 78 f551b09460dfaffc +zoom 36x20 Muster 79 4b34260db2811e2b +zoom 36x20 Muster 80 87cd787eb55ee840 +zoom 36x20 Muster 81 78864b7656575f35 +zoom 36x20 Muster 82 81b43cce1eaef9a7 +zoom 36x20 Muster 83 725b511c16ea7a02 +zoom 36x20 Muster 84 fa88a3e85f13e955 +zoom 36x20 Muster 85 241f134f51b306b0 +zoom 36x20 Muster 86 1d6d0d9e04db6ffa +zoom 36x20 Muster 87 81901480d4dbab44 +zoom 36x20 Muster 88 b668ba27f17acfcb +zoom 36x20 Muster 89 387619abe7faa4a7 +zoom 36x20 Muster 90 ca7e5c320d9df732 +zoom 36x20 Muster 91 b3a67cbdf505aa42 +zoom 36x20 Muster 92 39bd66d8dad7d5f2 +zoom 36x20 Muster 93 40a29308c4f3dd72 +zoom 36x20 Muster 94 1a387d5368baf3ad +zoom 36x20 Muster 95 39d155deb8c8e818 +zoom 36x20 Muster 96 068140f4999a38c7 +zoom 36x20 Muster 97 7654d150ef814e6f +zoom 36x20 Muster 98 d663148bf16b8632 +zoom 36x20 Muster 99 0d188cf7ab739a20 +zoom 36x20 Muster 100 ecef278f7b57fab7 +zoom 36x20 Muster 101 fb523c51bfff095a +zoom 36x20 Muster 102 7f876f1a2b4aec6e +zoom 36x20 Muster 103 420a648b698f1a57 +zoom 36x20 Muster 104 5a2540263106369f +zoom 36x20 Muster 105 8390154604f94294 +zoom 36x20 Muster 106 76c0db3b143d6ffe +zoom 36x20 Muster 107 794b084c4ec47e19 +zoom 36x20 Muster 108 cf277aba7afcb70f +zoom 36x20 Muster 109 59857d66fa31529c +zoom 36x20 Muster 110 afc70d7ffa132a68 +zoom 36x20 Muster 111 31f0e3d1b017fccc +zoom 36x20 Muster 112 d4a13752d7168d83 +zoom 36x20 Muster 113 8f3b4b24167bf18d +zoom 36x20 Muster 114 93314a56be1908f3 +zoom 36x20 Muster 115 13f4da84b2d626b0 +zoom 36x20 Muster 116 972c1f7b5ce0904a +zoom 36x20 Muster 117 a72ce7e68248c9d4 +zoom 36x20 Muster 118 6db23482202424fc +zoom 36x20 Muster 119 bd0e698362234587 +zoom 36x20 Muster 120 23fda70cfeed6c12 +zoom 36x20 Muster 121 eeca1f845488ff1f +zoom 36x20 Muster 122 7ac6b67598f5a543 +zoom 36x20 Muster 123 dcab6c7ea5cfe47f +zoom 36x20 Muster 124 04f7f2d1b0a8d072 +zoom 36x20 Muster 125 73334dd7c3031b77 +zoom 36x20 Muster 126 f176a65c9bddf6bc +zoom 36x20 Muster 127 a57b83938c0cc91c +zoom 36x20 Muster 128 507a8e6c8c095a73 +zoom 36x20 Muster 129 2611a447016f73c3 +zoom 36x20 Muster 130 45ad898c8a4e7585 +zoom 36x20 Muster 131 9371cdc936fe0196 +zoom 36x20 Muster 132 f956c988206889b6 +zoom 36x20 Muster 133 d5a847a64a0a35b7 +zoom 36x20 Muster 134 362edc1929d99213 +zoom 36x20 Muster 135 f42e2e33be6e4b73 +zoom 36x20 Muster 136 c0fed45980674071 +zoom 36x20 Muster 137 938d6c70b551cfda +zoom 36x20 Muster 138 b470d088e9d62147 +zoom 36x20 Muster 139 34294a4e0d6d56a5 +zoom 36x20 Muster 140 103580917b6986f6 +zoom 36x20 Muster 141 b3a31d01ce71f4f3 +zoom 36x20 Muster 142 76d7bb5ce79cf8d1 +zoom 36x20 Muster 143 4b15d9503958fa96 +zoom 36x20 Muster 144 ebd686b4b877bd99 +zoom 36x20 Muster 145 c2d570f09f8f1749 +zoom 36x20 Muster 146 ac58febd19b2a316 +zoom 36x20 Muster 147 80a84150c8e545d8 +zoom 36x20 Muster 148 3bf9440d0784872b +zoom 36x20 Muster 149 4362b9c80fca6d48 +zoom 120x40 Platoon 0 5dec504a6c796dd8 +zoom 120x40 Platoon 1 1f1f90a29e2de2e7 +zoom 120x40 Platoon 2 c0e1a6ca86a4c155 +zoom 120x40 Platoon 3 f4b7de2999a06ebc +zoom 120x40 Platoon 4 3d43f46fafa73ae3 +zoom 120x40 Platoon 5 dd6bfb073b6cd598 +zoom 120x40 Platoon 6 a0c53a6e45d752c5 +zoom 120x40 Platoon 7 e2a1962890b7e66a +zoom 120x40 Platoon 8 0060c680248a9189 +zoom 120x40 Platoon 9 cb11e0498b7a3ede +zoom 120x40 Platoon 10 d85fe76798e471ea +zoom 120x40 Platoon 11 2f4cceea425bc7b5 +zoom 120x40 Platoon 12 fe2ce27038692b29 +zoom 120x40 Platoon 13 c96c3a11c24e66b9 +zoom 120x40 Platoon 14 725c013e61fc69a1 +zoom 120x40 Platoon 15 80e159b42e8cbd23 +zoom 120x40 Platoon 16 5104a9f0d7510ea5 +zoom 120x40 Platoon 17 cd709101ab491d46 +zoom 120x40 Platoon 18 6d414d2668cc660b +zoom 120x40 Platoon 19 a277e2c6b4569426 +zoom 120x40 Platoon 20 b040ddd2d41828d4 +zoom 120x40 Platoon 21 c845bb6d564256e8 +zoom 120x40 Platoon 22 218ec549fafdd828 +zoom 120x40 Platoon 23 f77ee8c039ede103 +zoom 120x40 Platoon 24 be204941238cd68d +zoom 120x40 Platoon 25 cb3db7c136350989 +zoom 120x40 Platoon 26 affe510ad21c88c1 +zoom 120x40 Platoon 27 55aa5ed7c7c2e960 +zoom 120x40 Platoon 28 3279226026ac4e18 +zoom 120x40 Platoon 29 14d35f498981d161 +zoom 120x40 Platoon 30 59ec028284a03383 +zoom 120x40 Platoon 31 6fdc88a3b048e44a +zoom 120x40 Platoon 32 cef22db9bc00239f +zoom 120x40 Platoon 33 f6026cbf731d6213 +zoom 120x40 Platoon 34 9586849ae13efdb9 +zoom 120x40 Platoon 35 eb31c44072350d66 +zoom 120x40 Platoon 36 ba597440bbf5675a +zoom 120x40 Platoon 37 1cc65d3973eec95d +zoom 120x40 Platoon 38 1bf610471d5339cd +zoom 120x40 Platoon 39 07399e75c9605bc3 +zoom 120x40 Platoon 40 a4a1eb49476112a4 +zoom 120x40 Platoon 41 e6255a15b88944cd +zoom 120x40 Platoon 42 ea57e302c07681a4 +zoom 120x40 Platoon 43 74f0036bbde5be33 +zoom 120x40 Platoon 44 30794aeea356b982 +zoom 120x40 Platoon 45 93d4eb9b685b4129 +zoom 120x40 Platoon 46 78fdd1a8b0a8aa52 +zoom 120x40 Platoon 47 4171e941c96fae97 +zoom 120x40 Platoon 48 b57eb32e3e5819ff +zoom 120x40 Platoon 49 565fe8a6fba4942c +zoom 120x40 Platoon 50 3d5d324ae71f9076 +zoom 120x40 Platoon 51 1210bce23b00a57f +zoom 120x40 Platoon 52 5dde526ce1b10392 +zoom 120x40 Platoon 53 4bd545c7ee7f65c4 +zoom 120x40 Platoon 54 27b339687fec9e6b +zoom 120x40 Platoon 55 52b6b48d5f952c56 +zoom 120x40 Platoon 56 d1865797be872f86 +zoom 120x40 Platoon 57 6e8eb9a570ed1f99 +zoom 120x40 Platoon 58 81add9ddbc02c298 +zoom 120x40 Platoon 59 18d723d1048d236c +zoom 120x40 Platoon 60 50abbf92be2f1de9 +zoom 120x40 Platoon 61 db2fd3a91dec2429 +zoom 120x40 Platoon 62 df77a05c662a422a +zoom 120x40 Platoon 63 3f96d6225f5b4c83 +zoom 120x40 Platoon 64 9db4b1f26f7a8f70 +zoom 120x40 Platoon 65 cbe6aeb8f2f54dcd +zoom 120x40 Platoon 66 24655a22b758cce1 +zoom 120x40 Platoon 67 4ee5edcd6927ddec +zoom 120x40 Platoon 68 63d16d915df2822f +zoom 120x40 Platoon 69 770090426648e2e4 +zoom 120x40 Platoon 70 7ec52277a36259a8 +zoom 120x40 Platoon 71 430060808712fc20 +zoom 120x40 Platoon 72 6e791755bea973d9 +zoom 120x40 Platoon 73 80d8f3dcc975c229 +zoom 120x40 Platoon 74 20b5f93ce724064f +zoom 120x40 Platoon 75 639fc62242548d73 +zoom 120x40 Platoon 76 1b5844c56cf7bff7 +zoom 120x40 Platoon 77 dccb4abf6dbfa556 +zoom 120x40 Platoon 78 ef5e8055d141c2f2 +zoom 120x40 Platoon 79 60ea325207108eac +zoom 120x40 Platoon 80 8f7797a1e33ea6f9 +zoom 120x40 Platoon 81 d926b0995058f5bf +zoom 120x40 Platoon 82 b654b878b83a977a +zoom 120x40 Platoon 83 6895be115780a223 +zoom 120x40 Platoon 84 cda15638d177f170 +zoom 120x40 Platoon 85 46e6b80e91cf47da +zoom 120x40 Platoon 86 ac772a2aacaea59b +zoom 120x40 Platoon 87 4e406db59dedc4c1 +zoom 120x40 Platoon 88 dce34782275f101a +zoom 120x40 Platoon 89 523e8b8213f65b65 +zoom 120x40 Platoon 90 478dba45018bd810 +zoom 120x40 Platoon 91 d51b8df4cca928f0 +zoom 120x40 Platoon 92 2205eb72a3dc0582 +zoom 120x40 Platoon 93 d423f2699bab0d58 +zoom 120x40 Platoon 94 b7128d1e4f156048 +zoom 120x40 Platoon 95 6c3802f3b088c7b7 +zoom 120x40 Platoon 96 3ba51591dbae7249 +zoom 120x40 Platoon 97 bb08b18f4bbe57f4 +zoom 120x40 Platoon 98 527831adfb10ba72 +zoom 120x40 Platoon 99 9d36bd035f08d9c2 +zoom 120x40 Platoon 100 24556799de697bdf +zoom 120x40 Platoon 101 c71eb03d43dd61f5 +zoom 120x40 Platoon 102 1b56973d629ff0f1 +zoom 120x40 Platoon 103 ab6b1a85d5480d8c +zoom 120x40 Platoon 104 178bf3a9e38f2446 +zoom 120x40 Platoon 105 93f160b7a2568fca +zoom 120x40 Platoon 106 f554f0c160a9d00f +zoom 120x40 Platoon 107 a5c0b064ea816fc7 +zoom 120x40 Platoon 108 b993a60d3c575b91 +zoom 120x40 Platoon 109 c47669b454ef67fb +zoom 120x40 Platoon 110 5a13797f2d722082 +zoom 120x40 Platoon 111 8ea7a58a99188797 +zoom 120x40 Platoon 112 8e3fce4bcea022ab +zoom 120x40 Platoon 113 436358ca0fdec619 +zoom 120x40 Platoon 114 7708109ef0f57b82 +zoom 120x40 Platoon 115 60ffa14750b42e9a +zoom 120x40 Platoon 116 c5a8dfbd43174ae4 +zoom 120x40 Platoon 117 2e172e9d51fb015d +zoom 120x40 Platoon 118 de16fcfacaa2d77f +zoom 120x40 Platoon 119 ed6da97816da89b1 +zoom 120x40 Platoon 120 49e5941c89ba5c94 +zoom 120x40 Platoon 121 65c9e57af8e28dd9 +zoom 120x40 Platoon 122 6b4573aa20618a07 +zoom 120x40 Platoon 123 e030cd5e6fdaf5c2 +zoom 120x40 Platoon 124 c59445968b456366 +zoom 120x40 Platoon 125 99518dc5651008c6 +zoom 120x40 Platoon 126 927793db6436ff7a +zoom 120x40 Platoon 127 8f43b312fefad92a +zoom 120x40 Platoon 128 2b274f023ec7abe9 +zoom 120x40 Platoon 129 033e5819f26037e0 +zoom 120x40 Platoon 130 25ebe8a29e9e1036 +zoom 120x40 Platoon 131 aa7f18c7813becc6 +zoom 120x40 Platoon 132 a698c2716fd28852 +zoom 120x40 Platoon 133 de3ca03783dac9ba +zoom 120x40 Platoon 134 13d16306a0dc76c3 +zoom 120x40 Platoon 135 c3e856aa2242fa6d +zoom 120x40 Platoon 136 5815fdabb0b4794e +zoom 120x40 Platoon 137 9aefd3e05f3b71da +zoom 120x40 Platoon 138 cb09075dec87590b +zoom 120x40 Platoon 139 9773641900ebe7d0 +zoom 120x40 Platoon 140 487b0d14da0e2136 +zoom 120x40 Platoon 141 832b2f47e8818383 +zoom 120x40 Platoon 142 9979fb79d5c34788 +zoom 120x40 Platoon 143 028619ebe019a8ee +zoom 120x40 Platoon 144 8aeb043589a9bf67 +zoom 120x40 Platoon 145 1d343ad33a4277c9 +zoom 120x40 Platoon 146 8634d06755d3fdb6 +zoom 120x40 Platoon 147 4b2b1cf1afb1c178 +zoom 120x40 Platoon 148 aaa932fafc9e316b +zoom 120x40 Platoon 149 b91d1dda0e37042b +zoom 120x40 Muster 0 5dec504a6c796dd8 +zoom 120x40 Muster 1 1f1f90a29e2de2e7 +zoom 120x40 Muster 2 c0e1a6ca86a4c155 +zoom 120x40 Muster 3 f4b7de2999a06ebc +zoom 120x40 Muster 4 3d43f46fafa73ae3 +zoom 120x40 Muster 5 dd6bfb073b6cd598 +zoom 120x40 Muster 6 a0c53a6e45d752c5 +zoom 120x40 Muster 7 e2a1962890b7e66a +zoom 120x40 Muster 8 0060c680248a9189 +zoom 120x40 Muster 9 cb11e0498b7a3ede +zoom 120x40 Muster 10 d85fe76798e471ea +zoom 120x40 Muster 11 2f4cceea425bc7b5 +zoom 120x40 Muster 12 fe2ce27038692b29 +zoom 120x40 Muster 13 c96c3a11c24e66b9 +zoom 120x40 Muster 14 725c013e61fc69a1 +zoom 120x40 Muster 15 80e159b42e8cbd23 +zoom 120x40 Muster 16 5104a9f0d7510ea5 +zoom 120x40 Muster 17 cd709101ab491d46 +zoom 120x40 Muster 18 6d414d2668cc660b +zoom 120x40 Muster 19 a277e2c6b4569426 +zoom 120x40 Muster 20 b040ddd2d41828d4 +zoom 120x40 Muster 21 c845bb6d564256e8 +zoom 120x40 Muster 22 218ec549fafdd828 +zoom 120x40 Muster 23 f77ee8c039ede103 +zoom 120x40 Muster 24 be204941238cd68d +zoom 120x40 Muster 25 cb3db7c136350989 +zoom 120x40 Muster 26 affe510ad21c88c1 +zoom 120x40 Muster 27 55aa5ed7c7c2e960 +zoom 120x40 Muster 28 3279226026ac4e18 +zoom 120x40 Muster 29 14d35f498981d161 +zoom 120x40 Muster 30 59ec028284a03383 +zoom 120x40 Muster 31 6fdc88a3b048e44a +zoom 120x40 Muster 32 cef22db9bc00239f +zoom 120x40 Muster 33 f6026cbf731d6213 +zoom 120x40 Muster 34 9586849ae13efdb9 +zoom 120x40 Muster 35 eb31c44072350d66 +zoom 120x40 Muster 36 ba597440bbf5675a +zoom 120x40 Muster 37 1cc65d3973eec95d +zoom 120x40 Muster 38 1bf610471d5339cd +zoom 120x40 Muster 39 07399e75c9605bc3 +zoom 120x40 Muster 40 a4a1eb49476112a4 +zoom 120x40 Muster 41 e6255a15b88944cd +zoom 120x40 Muster 42 ea57e302c07681a4 +zoom 120x40 Muster 43 74f0036bbde5be33 +zoom 120x40 Muster 44 30794aeea356b982 +zoom 120x40 Muster 45 93d4eb9b685b4129 +zoom 120x40 Muster 46 78fdd1a8b0a8aa52 +zoom 120x40 Muster 47 4171e941c96fae97 +zoom 120x40 Muster 48 b57eb32e3e5819ff +zoom 120x40 Muster 49 565fe8a6fba4942c +zoom 120x40 Muster 50 3d5d324ae71f9076 +zoom 120x40 Muster 51 1210bce23b00a57f +zoom 120x40 Muster 52 5dde526ce1b10392 +zoom 120x40 Muster 53 4bd545c7ee7f65c4 +zoom 120x40 Muster 54 27b339687fec9e6b +zoom 120x40 Muster 55 52b6b48d5f952c56 +zoom 120x40 Muster 56 d1865797be872f86 +zoom 120x40 Muster 57 a02f366e756696e4 +zoom 120x40 Muster 58 256d4fc8ee469e6f +zoom 120x40 Muster 59 2d481a5e2337ef08 +zoom 120x40 Muster 60 32332cdaaa569407 +zoom 120x40 Muster 61 e7135b258b09882b +zoom 120x40 Muster 62 648978a8d8fbd1af +zoom 120x40 Muster 63 75b2e5dacd89c420 +zoom 120x40 Muster 64 089f3665c12864de +zoom 120x40 Muster 65 9410ba6082d922b0 +zoom 120x40 Muster 66 175c8a471913c512 +zoom 120x40 Muster 67 ed16389756169ef6 +zoom 120x40 Muster 68 2fb9cd511db945a9 +zoom 120x40 Muster 69 44918ed39d0aab13 +zoom 120x40 Muster 70 f5c653e5d1024e7c +zoom 120x40 Muster 71 09360125b503790e +zoom 120x40 Muster 72 d9c02be6b73c1b11 +zoom 120x40 Muster 73 f41df4ae6062a803 +zoom 120x40 Muster 74 c6f4c90d6a967340 +zoom 120x40 Muster 75 4fb3f196a2354d72 +zoom 120x40 Muster 76 a1e2cea0991da43a +zoom 120x40 Muster 77 3e7f38ea3b57d843 +zoom 120x40 Muster 78 009aa07afb88ae5b +zoom 120x40 Muster 79 fbf4797eef6f3084 +zoom 120x40 Muster 80 c9edc9dfcfa0837e +zoom 120x40 Muster 81 f221811880fec274 +zoom 120x40 Muster 82 bd83336b78580c66 +zoom 120x40 Muster 83 bd919e67b083ec09 +zoom 120x40 Muster 84 2b408f086b77acd4 +zoom 120x40 Muster 85 4f13344d470134f6 +zoom 120x40 Muster 86 df01f942fe7a2d56 +zoom 120x40 Muster 87 46ce81eeacdc462f +zoom 120x40 Muster 88 de9680af3f961bf2 +zoom 120x40 Muster 89 61b6fc98b1a9c02a +zoom 120x40 Muster 90 c56d259cd8c4b464 +zoom 120x40 Muster 91 e4f8044650eed74e +zoom 120x40 Muster 92 682b8c7ce503060e +zoom 120x40 Muster 93 fc677d03fd798e84 +zoom 120x40 Muster 94 b7128d1e4f156048 +zoom 120x40 Muster 95 6c3802f3b088c7b7 +zoom 120x40 Muster 96 3ba51591dbae7249 +zoom 120x40 Muster 97 bb08b18f4bbe57f4 +zoom 120x40 Muster 98 527831adfb10ba72 +zoom 120x40 Muster 99 9d36bd035f08d9c2 +zoom 120x40 Muster 100 24556799de697bdf +zoom 120x40 Muster 101 c71eb03d43dd61f5 +zoom 120x40 Muster 102 1b56973d629ff0f1 +zoom 120x40 Muster 103 ab6b1a85d5480d8c +zoom 120x40 Muster 104 178bf3a9e38f2446 +zoom 120x40 Muster 105 93f160b7a2568fca +zoom 120x40 Muster 106 f554f0c160a9d00f +zoom 120x40 Muster 107 a5c0b064ea816fc7 +zoom 120x40 Muster 108 b993a60d3c575b91 +zoom 120x40 Muster 109 c47669b454ef67fb +zoom 120x40 Muster 110 5a13797f2d722082 +zoom 120x40 Muster 111 8ea7a58a99188797 +zoom 120x40 Muster 112 8e3fce4bcea022ab +zoom 120x40 Muster 113 436358ca0fdec619 +zoom 120x40 Muster 114 7708109ef0f57b82 +zoom 120x40 Muster 115 60ffa14750b42e9a +zoom 120x40 Muster 116 c5a8dfbd43174ae4 +zoom 120x40 Muster 117 2e172e9d51fb015d +zoom 120x40 Muster 118 de16fcfacaa2d77f +zoom 120x40 Muster 119 ed6da97816da89b1 +zoom 120x40 Muster 120 49e5941c89ba5c94 +zoom 120x40 Muster 121 65c9e57af8e28dd9 +zoom 120x40 Muster 122 6b4573aa20618a07 +zoom 120x40 Muster 123 e030cd5e6fdaf5c2 +zoom 120x40 Muster 124 c59445968b456366 +zoom 120x40 Muster 125 99518dc5651008c6 +zoom 120x40 Muster 126 927793db6436ff7a +zoom 120x40 Muster 127 8f43b312fefad92a +zoom 120x40 Muster 128 2b274f023ec7abe9 +zoom 120x40 Muster 129 033e5819f26037e0 +zoom 120x40 Muster 130 25ebe8a29e9e1036 +zoom 120x40 Muster 131 aa7f18c7813becc6 +zoom 120x40 Muster 132 a698c2716fd28852 +zoom 120x40 Muster 133 de3ca03783dac9ba +zoom 120x40 Muster 134 13d16306a0dc76c3 +zoom 120x40 Muster 135 c3e856aa2242fa6d +zoom 120x40 Muster 136 5815fdabb0b4794e +zoom 120x40 Muster 137 9aefd3e05f3b71da +zoom 120x40 Muster 138 cb09075dec87590b +zoom 120x40 Muster 139 9773641900ebe7d0 +zoom 120x40 Muster 140 487b0d14da0e2136 +zoom 120x40 Muster 141 832b2f47e8818383 +zoom 120x40 Muster 142 9979fb79d5c34788 +zoom 120x40 Muster 143 028619ebe019a8ee +zoom 120x40 Muster 144 8aeb043589a9bf67 +zoom 120x40 Muster 145 1d343ad33a4277c9 +zoom 120x40 Muster 146 8634d06755d3fdb6 +zoom 120x40 Muster 147 4b2b1cf1afb1c178 +zoom 120x40 Muster 148 aaa932fafc9e316b +zoom 120x40 Muster 149 b91d1dda0e37042b +suite Dots 0 0 0 faae9c73d69feb71 +suite Dots 0 0 1 505c4dacfce510a7 +suite Dots 0 0 2 fd8962d71a6643a4 +suite Dots 0 0 3 874f3a21ecb67b15 +suite Dots 0 0.37 0 dfa872644df49ba5 +suite Dots 0 0.37 1 36e59a6e98e43f25 +suite Dots 0 0.37 2 36e59a6e98e43f25 +suite Dots 0 0.37 3 da0612b884ef8d15 +suite Dots 0 0.8 0 59d5beac1619cdf2 +suite Dots 0 0.8 1 857123224172f71b +suite Dots 0 0.8 2 2664999db6ddd860 +suite Dots 0 0.8 3 f2c0436076643108 +suite Dots 0 1 0 6e55c76436c678fe +suite Dots 0 1 1 65012ca7dba6c575 +suite Dots 0 1 2 9c53042098e0cfa4 +suite Dots 0 1 3 7832c09483647dbd +suite Dots 12 0 0 648b7416a5be6bc1 +suite Dots 12 0 1 e9e60638482c54f3 +suite Dots 12 0 2 44c824aadfee8a89 +suite Dots 12 0 3 04a1735ff4dd981d +suite Dots 12 0.37 0 dfa872644df49ba5 +suite Dots 12 0.37 1 36e59a6e98e43f25 +suite Dots 12 0.37 2 36e59a6e98e43f25 +suite Dots 12 0.37 3 da0612b884ef8d15 +suite Dots 12 0.8 0 32a404b743fd7ad8 +suite Dots 12 0.8 1 f7ca1e1758060032 +suite Dots 12 0.8 2 c813bb696f4c748a +suite Dots 12 0.8 3 70776c90f95fa025 +suite Dots 12 1 0 addc4053030eb104 +suite Dots 12 1 1 05137b87b84994de +suite Dots 12 1 2 bc73d15daa8277b6 +suite Dots 12 1 3 25cecda5d5ddfd81 +suite Dots 36 0 0 0598f1c2a9ee2435 +suite Dots 36 0 1 72d6a8de3508fb42 +suite Dots 36 0 2 1a2b8f62be082555 +suite Dots 36 0 3 e1cdf34ede6d35d1 +suite Dots 36 0.37 0 dfa872644df49ba5 +suite Dots 36 0.37 1 36e59a6e98e43f25 +suite Dots 36 0.37 2 36e59a6e98e43f25 +suite Dots 36 0.37 3 da0612b884ef8d15 +suite Dots 36 0.8 0 818428a1f77d31aa +suite Dots 36 0.8 1 cfa53e207aa82853 +suite Dots 36 0.8 2 b825dc070da726a8 +suite Dots 36 0.8 3 66758b7d891a80b5 +suite Dots 36 1 0 c1e0899077eb1274 +suite Dots 36 1 1 cf6760fb9a4431f2 +suite Dots 36 1 2 dcd74b1e7a29ce28 +suite Dots 36 1 3 2b09db54805f5e7c +suite Dots 60 0 0 ebb0f1cad9ad2fb6 +suite Dots 60 0 1 2f23f07fa1c74f65 +suite Dots 60 0 2 c97bee237e44a589 +suite Dots 60 0 3 53e91d188a45ecfe +suite Dots 60 0.37 0 dfa872644df49ba5 +suite Dots 60 0.37 1 36e59a6e98e43f25 +suite Dots 60 0.37 2 36e59a6e98e43f25 +suite Dots 60 0.37 3 da0612b884ef8d15 +suite Dots 60 0.8 0 1d8e9a49bb1a87ad +suite Dots 60 0.8 1 efd0910efb8efc90 +suite Dots 60 0.8 2 0efb099f9188ab5b +suite Dots 60 0.8 3 f2677028dc544b07 +suite Dots 60 1 0 440f287c484f2523 +suite Dots 60 1 1 4e9af147b40fdcab +suite Dots 60 1 2 5d64da05db18d4a7 +suite Dots 60 1 3 2b71231e72401e34 +suite Dots 84 0 0 bf0c931fee48e6f5 +suite Dots 84 0 1 ceec7e4ad9a22353 +suite Dots 84 0 2 e428f415a62f36da +suite Dots 84 0 3 1f4ba0b1c90d0382 +suite Dots 84 0.37 0 dfa872644df49ba5 +suite Dots 84 0.37 1 36e59a6e98e43f25 +suite Dots 84 0.37 2 36e59a6e98e43f25 +suite Dots 84 0.37 3 da0612b884ef8d15 +suite Dots 84 0.8 0 1099cdd58e31a4fa +suite Dots 84 0.8 1 c9de621cee065bbc +suite Dots 84 0.8 2 2aa2102d0c2e3c3a +suite Dots 84 0.8 3 359b5782e5284432 +suite Dots 84 1 0 00c4f5edd913bc18 +suite Dots 84 1 1 8020357f6c16c12a +suite Dots 84 1 2 f57de0bf36a17f09 +suite Dots 84 1 3 c5b53799e733628f +suite Dots 94 0 0 65ed308413ddafa1 +suite Dots 94 0 1 8e135dc5122dafa5 +suite Dots 94 0 2 92e5b4fc4b8ee33c +suite Dots 94 0 3 6b38e71661173ca9 +suite Dots 94 0.37 0 dfa872644df49ba5 +suite Dots 94 0.37 1 36e59a6e98e43f25 +suite Dots 94 0.37 2 36e59a6e98e43f25 +suite Dots 94 0.37 3 da0612b884ef8d15 +suite Dots 94 0.8 0 5f4ab87de6b9ecbe +suite Dots 94 0.8 1 a906e5e2b2682fb8 +suite Dots 94 0.8 2 08dc154b7b5dd709 +suite Dots 94 0.8 3 8a66bd47b335c454 +suite Dots 94 1 0 daf6ea60fcf6c8f8 +suite Dots 94 1 1 822367ce74cdf429 +suite Dots 94 1 2 53ab7a22ceec4e8d +suite Dots 94 1 3 55fda1809f058eb4 +suite Dots 86399 0 0 c91b9c97f3f76cc6 +suite Dots 86399 0 1 eef38c32eccb69d3 +suite Dots 86399 0 2 34ed76c8cf9eac7b +suite Dots 86399 0 3 d257849780134359 +suite Dots 86399 0.37 0 dfa872644df49ba5 +suite Dots 86399 0.37 1 36e59a6e98e43f25 +suite Dots 86399 0.37 2 36e59a6e98e43f25 +suite Dots 86399 0.37 3 da0612b884ef8d15 +suite Dots 86399 0.8 0 100f9cfd583c1f8b +suite Dots 86399 0.8 1 e1911e24bbc2a19e +suite Dots 86399 0.8 2 d26be4f900bbbfd3 +suite Dots 86399 0.8 3 7557037a53ea6c4b +suite Dots 86399 1 0 eaa782fdda6302a6 +suite Dots 86399 1 1 6c4054e58041b567 +suite Dots 86399 1 2 b67ea797a981c07a +suite Dots 86399 1 3 44b7f7d29446874a +suite Formations 0 0 0 6f11667ea2af7c6d +suite Formations 0 0 1 08dc9697fb7769fd +suite Formations 0 0 2 b353000242375e73 +suite Formations 0 0 3 08688eb5db7288b4 +suite Formations 0 0.37 0 aab3e0691846bdb7 +suite Formations 0 0.37 1 bb37e752e41091a5 +suite Formations 0 0.37 2 b6b5a9c5329aad84 +suite Formations 0 0.37 3 bfb4089abe5bb969 +suite Formations 0 0.8 0 842afc81e87c9066 +suite Formations 0 0.8 1 1b599c8f42cb567e +suite Formations 0 0.8 2 170f545406b56c89 +suite Formations 0 0.8 3 9030023a0bd5cce2 +suite Formations 0 1 0 6e55c76436c678fe +suite Formations 0 1 1 65012ca7dba6c575 +suite Formations 0 1 2 9c53042098e0cfa4 +suite Formations 0 1 3 7832c09483647dbd +suite Formations 12 0 0 79ff2c6d77549757 +suite Formations 12 0 1 7619dbc38f9ed97f +suite Formations 12 0 2 a9439a212dc369d2 +suite Formations 12 0 3 0deddcfd3f9b2fcc +suite Formations 12 0.37 0 12377a3f6c4fc156 +suite Formations 12 0.37 1 cea83cebde4fec5e +suite Formations 12 0.37 2 f5cd27da50790135 +suite Formations 12 0.37 3 a899bdfb61f43b5c +suite Formations 12 0.8 0 8a2f5654fb302911 +suite Formations 12 0.8 1 a6866218925fae7e +suite Formations 12 0.8 2 2487e70f8fcadcd2 +suite Formations 12 0.8 3 d86339aa302e54c9 +suite Formations 12 1 0 addc4053030eb104 +suite Formations 12 1 1 05137b87b84994de +suite Formations 12 1 2 bc73d15daa8277b6 +suite Formations 12 1 3 25cecda5d5ddfd81 +suite Formations 36 0 0 f84a2080eb8bfa33 +suite Formations 36 0 1 8de265abd0197862 +suite Formations 36 0 2 f19d64376c2f2958 +suite Formations 36 0 3 b6443555a3e2d225 +suite Formations 36 0.37 0 543b5979f7d94a47 +suite Formations 36 0.37 1 deb643dba4e9b7e3 +suite Formations 36 0.37 2 127f80c51c2cd3da +suite Formations 36 0.37 3 f5ebece84ca27ef6 +suite Formations 36 0.8 0 6aafe0a2f8c36d1a +suite Formations 36 0.8 1 15be125dd4eabce6 +suite Formations 36 0.8 2 e19feeebf8a7137e +suite Formations 36 0.8 3 60ec28efb3ba4b1f +suite Formations 36 1 0 c1e0899077eb1274 +suite Formations 36 1 1 cf6760fb9a4431f2 +suite Formations 36 1 2 dcd74b1e7a29ce28 +suite Formations 36 1 3 2b09db54805f5e7c +suite Formations 60 0 0 9611d4d696bd4181 +suite Formations 60 0 1 b9f346b21ffc84c1 +suite Formations 60 0 2 9127a539923d4cd1 +suite Formations 60 0 3 d5d02d51857f9355 +suite Formations 60 0.37 0 83bd54d4487328a1 +suite Formations 60 0.37 1 27f23b904eab754c +suite Formations 60 0.37 2 971ea1a04ac08975 +suite Formations 60 0.37 3 58f42d4f80780cb4 +suite Formations 60 0.8 0 0be366eb110cd71b +suite Formations 60 0.8 1 bfdf518bb5bfee18 +suite Formations 60 0.8 2 bd15b9a6970c2806 +suite Formations 60 0.8 3 f5b59fba284d76a7 +suite Formations 60 1 0 440f287c484f2523 +suite Formations 60 1 1 4e9af147b40fdcab +suite Formations 60 1 2 5d64da05db18d4a7 +suite Formations 60 1 3 2b71231e72401e34 +suite Formations 84 0 0 0ca5f83112c315ef +suite Formations 84 0 1 b4b02a007612ef42 +suite Formations 84 0 2 0f03ea2b5de27bd8 +suite Formations 84 0 3 0dd4367f46f66982 +suite Formations 84 0.37 0 8c909966fab59848 +suite Formations 84 0.37 1 60da05e65e8811f1 +suite Formations 84 0.37 2 8904ff2c5a9e5953 +suite Formations 84 0.37 3 ca41cbb4543074ea +suite Formations 84 0.8 0 747ecb0bfa4f6844 +suite Formations 84 0.8 1 684248799eab2423 +suite Formations 84 0.8 2 1a725e7d7dcec7ad +suite Formations 84 0.8 3 af3698d44b0d1d2b +suite Formations 84 1 0 00c4f5edd913bc18 +suite Formations 84 1 1 8020357f6c16c12a +suite Formations 84 1 2 f57de0bf36a17f09 +suite Formations 84 1 3 c5b53799e733628f +suite Formations 94 0 0 760902f5b9c2f99b +suite Formations 94 0 1 06fd039c8565c7ab +suite Formations 94 0 2 feb171df5c61d4de +suite Formations 94 0 3 f28de9bbf7e07711 +suite Formations 94 0.37 0 ffbaef863c59c44b +suite Formations 94 0.37 1 89a625f20a461da4 +suite Formations 94 0.37 2 75aff8d053c13d17 +suite Formations 94 0.37 3 2aa8c00aa10949b2 +suite Formations 94 0.8 0 645b4db552b564a2 +suite Formations 94 0.8 1 adcd30b272d55143 +suite Formations 94 0.8 2 ff81f682fcc81c5b +suite Formations 94 0.8 3 6abe492dcd792ec7 +suite Formations 94 1 0 daf6ea60fcf6c8f8 +suite Formations 94 1 1 822367ce74cdf429 +suite Formations 94 1 2 53ab7a22ceec4e8d +suite Formations 94 1 3 55fda1809f058eb4 +suite Formations 86399 0 0 3f397403c530760d +suite Formations 86399 0 1 15f013be134e64d5 +suite Formations 86399 0 2 07385d1d02857794 +suite Formations 86399 0 3 8d33da7a8d85c077 +suite Formations 86399 0.37 0 20b8ee9d2c7caf01 +suite Formations 86399 0.37 1 b734a8466c760c99 +suite Formations 86399 0.37 2 aa23cca140b3c835 +suite Formations 86399 0.37 3 efcf9e6cae0a91ba +suite Formations 86399 0.8 0 8debbf3cb1ef32f6 +suite Formations 86399 0.8 1 89bbad5e3d163e8c +suite Formations 86399 0.8 2 57e5bf0c5eb17629 +suite Formations 86399 0.8 3 2c8dd66a22ee7627 +suite Formations 86399 1 0 eaa782fdda6302a6 +suite Formations 86399 1 1 6c4054e58041b567 +suite Formations 86399 1 2 b67ea797a981c07a +suite Formations 86399 1 3 44b7f7d29446874a +suite Sandboxes 0 0 0 1ace34c7e1deed02 +suite Sandboxes 0 0 1 7a253c134c5f87eb +suite Sandboxes 0 0 2 31acf5cca085afbc +suite Sandboxes 0 0 3 e6829ee228793722 +suite Sandboxes 0 0.37 0 8d90d10e8998cf9a +suite Sandboxes 0 0.37 1 29025c72130aa139 +suite Sandboxes 0 0.37 2 90d4c28ba67e473f +suite Sandboxes 0 0.37 3 331dc72c7f77adb4 +suite Sandboxes 0 0.8 0 f6fc342b36ca53bc +suite Sandboxes 0 0.8 1 24dbba451c936717 +suite Sandboxes 0 0.8 2 3a2bd7d60b3a32f2 +suite Sandboxes 0 0.8 3 a75686e472056266 +suite Sandboxes 0 1 0 6e55c76436c678fe +suite Sandboxes 0 1 1 65012ca7dba6c575 +suite Sandboxes 0 1 2 9c53042098e0cfa4 +suite Sandboxes 0 1 3 7832c09483647dbd +suite Sandboxes 12 0 0 71d572d2915297f8 +suite Sandboxes 12 0 1 885fb7ee0414a87e +suite Sandboxes 12 0 2 806bc1ff29a5680c +suite Sandboxes 12 0 3 0d7c10622ad6af6c +suite Sandboxes 12 0.37 0 85e452d265e32fb3 +suite Sandboxes 12 0.37 1 8519cc49b4a78313 +suite Sandboxes 12 0.37 2 06cce9794fea52e8 +suite Sandboxes 12 0.37 3 8b392a3d19bc8ccd +suite Sandboxes 12 0.8 0 abb8d4030cc3be11 +suite Sandboxes 12 0.8 1 b2803353d028ec6f +suite Sandboxes 12 0.8 2 35bd5f756344ff40 +suite Sandboxes 12 0.8 3 32015945958ccd9b +suite Sandboxes 12 1 0 addc4053030eb104 +suite Sandboxes 12 1 1 05137b87b84994de +suite Sandboxes 12 1 2 bc73d15daa8277b6 +suite Sandboxes 12 1 3 25cecda5d5ddfd81 +suite Sandboxes 36 0 0 f1519400c95c62b5 +suite Sandboxes 36 0 1 e93cd3f8a9047983 +suite Sandboxes 36 0 2 bf1dbfc7b490a829 +suite Sandboxes 36 0 3 3a1f9965022df827 +suite Sandboxes 36 0.37 0 1969de2f582fb03a +suite Sandboxes 36 0.37 1 1921963d2e05edf9 +suite Sandboxes 36 0.37 2 f61bc7b3a9b60809 +suite Sandboxes 36 0.37 3 32ff34f5d520b24e +suite Sandboxes 36 0.8 0 6f41bfc0d47f5da3 +suite Sandboxes 36 0.8 1 80f5db038e86004e +suite Sandboxes 36 0.8 2 1539e82689239621 +suite Sandboxes 36 0.8 3 147dede563926970 +suite Sandboxes 36 1 0 c1e0899077eb1274 +suite Sandboxes 36 1 1 cf6760fb9a4431f2 +suite Sandboxes 36 1 2 dcd74b1e7a29ce28 +suite Sandboxes 36 1 3 2b09db54805f5e7c +suite Sandboxes 60 0 0 3f7a04025bfc323d +suite Sandboxes 60 0 1 cffe9e1fdfeaafb7 +suite Sandboxes 60 0 2 ce6e68319d3035c9 +suite Sandboxes 60 0 3 1db1a26b617190fb +suite Sandboxes 60 0.37 0 fa3d7dc1447109fc +suite Sandboxes 60 0.37 1 15eecbcb54c71e17 +suite Sandboxes 60 0.37 2 ace1901e2c336887 +suite Sandboxes 60 0.37 3 3c74575d0f965486 +suite Sandboxes 60 0.8 0 f3e3d9f506d345b9 +suite Sandboxes 60 0.8 1 f7e7a4106858dcd5 +suite Sandboxes 60 0.8 2 faa4b643a9875b5b +suite Sandboxes 60 0.8 3 c1e74447bfdc4c57 +suite Sandboxes 60 1 0 440f287c484f2523 +suite Sandboxes 60 1 1 4e9af147b40fdcab +suite Sandboxes 60 1 2 5d64da05db18d4a7 +suite Sandboxes 60 1 3 2b71231e72401e34 +suite Sandboxes 84 0 0 8a9d3b91f62a2eff +suite Sandboxes 84 0 1 ed81ba8333ec768c +suite Sandboxes 84 0 2 6805d8a1e165d41b +suite Sandboxes 84 0 3 14335e43b923b173 +suite Sandboxes 84 0.37 0 ba3add52832f3f86 +suite Sandboxes 84 0.37 1 94259c9857ece96e +suite Sandboxes 84 0.37 2 2fc9bb2f73d7fb18 +suite Sandboxes 84 0.37 3 a2fb6b67f11bd590 +suite Sandboxes 84 0.8 0 78510497136112ea +suite Sandboxes 84 0.8 1 f5bfa3284b932956 +suite Sandboxes 84 0.8 2 7459a6f63e4e5902 +suite Sandboxes 84 0.8 3 d52150d73ea51264 +suite Sandboxes 84 1 0 00c4f5edd913bc18 +suite Sandboxes 84 1 1 8020357f6c16c12a +suite Sandboxes 84 1 2 f57de0bf36a17f09 +suite Sandboxes 84 1 3 c5b53799e733628f +suite Sandboxes 94 0 0 6b21eece41462e09 +suite Sandboxes 94 0 1 209408b73fa9014b +suite Sandboxes 94 0 2 9ad085d470b62f71 +suite Sandboxes 94 0 3 219d670a14143f73 +suite Sandboxes 94 0.37 0 d97192352ec69bd2 +suite Sandboxes 94 0.37 1 5e15bc54431fef0a +suite Sandboxes 94 0.37 2 2326731440e35c4f +suite Sandboxes 94 0.37 3 8026701201f22019 +suite Sandboxes 94 0.8 0 2aa2a5a633742288 +suite Sandboxes 94 0.8 1 7b3a26ebe40a3852 +suite Sandboxes 94 0.8 2 83cea56c2c5c745e +suite Sandboxes 94 0.8 3 2401654834221861 +suite Sandboxes 94 1 0 daf6ea60fcf6c8f8 +suite Sandboxes 94 1 1 822367ce74cdf429 +suite Sandboxes 94 1 2 53ab7a22ceec4e8d +suite Sandboxes 94 1 3 55fda1809f058eb4 +suite Sandboxes 86399 0 0 c0a8352de15be571 +suite Sandboxes 86399 0 1 05a692d3d33ddee7 +suite Sandboxes 86399 0 2 a246a6577a9fc983 +suite Sandboxes 86399 0 3 c350621b120f2afa +suite Sandboxes 86399 0.37 0 d23be2b1d9918de5 +suite Sandboxes 86399 0.37 1 9b3dbe55e8f9169c +suite Sandboxes 86399 0.37 2 b49f37ad741a2051 +suite Sandboxes 86399 0.37 3 0c501ee7042c8904 +suite Sandboxes 86399 0.8 0 03b8010a1327d3dc +suite Sandboxes 86399 0.8 1 a821eb11d283814b +suite Sandboxes 86399 0.8 2 3c3ba64a149633b4 +suite Sandboxes 86399 0.8 3 eb5b8bfea931f85c +suite Sandboxes 86399 1 0 eaa782fdda6302a6 +suite Sandboxes 86399 1 1 6c4054e58041b567 +suite Sandboxes 86399 1 2 b67ea797a981c07a +suite Sandboxes 86399 1 3 44b7f7d29446874a +suite Creatures 0 0 0 3b4d2b30835f1720 +suite Creatures 0 0 1 d02a05ee760891a2 +suite Creatures 0 0 2 d4025564435336d7 +suite Creatures 0 0 3 142d6855775aa0fd +suite Creatures 0 0.37 0 0614f0f3bcb352c4 +suite Creatures 0 0.37 1 2efdb61442a80617 +suite Creatures 0 0.37 2 7ae17c43427b6418 +suite Creatures 0 0.37 3 a63807350bd53a7f +suite Creatures 0 0.8 0 0e94c4e3ce8ffcc4 +suite Creatures 0 0.8 1 a91e30279ed4e4e9 +suite Creatures 0 0.8 2 faa4fdca12e2fa6b +suite Creatures 0 0.8 3 8948dee9d3563ac4 +suite Creatures 0 1 0 6e55c76436c678fe +suite Creatures 0 1 1 65012ca7dba6c575 +suite Creatures 0 1 2 9c53042098e0cfa4 +suite Creatures 0 1 3 7832c09483647dbd +suite Creatures 12 0 0 f0fdd19643cc0553 +suite Creatures 12 0 1 6f1aeaef4ad3297f +suite Creatures 12 0 2 09a7efdfc39fdc6a +suite Creatures 12 0 3 89fc8932611fbbe9 +suite Creatures 12 0.37 0 0eb54464fb5ce8aa +suite Creatures 12 0.37 1 0c4d4db5abb9ff2f +suite Creatures 12 0.37 2 04bdc4b4d4b1b953 +suite Creatures 12 0.37 3 2e2bca2c12b3fae6 +suite Creatures 12 0.8 0 eb9579e7421dda64 +suite Creatures 12 0.8 1 988bf6fd3e2b2456 +suite Creatures 12 0.8 2 4a4efb072bf35344 +suite Creatures 12 0.8 3 01ed048ffef0b189 +suite Creatures 12 1 0 addc4053030eb104 +suite Creatures 12 1 1 05137b87b84994de +suite Creatures 12 1 2 bc73d15daa8277b6 +suite Creatures 12 1 3 25cecda5d5ddfd81 +suite Creatures 36 0 0 abc3b4d0d7b1403c +suite Creatures 36 0 1 79b22f7f8b434588 +suite Creatures 36 0 2 543d7ed3546aa4d4 +suite Creatures 36 0 3 4b3813b2826b7db9 +suite Creatures 36 0.37 0 7a66ea515a802f28 +suite Creatures 36 0.37 1 d596296a49dc9aba +suite Creatures 36 0.37 2 9b72eabc3f4cdb7c +suite Creatures 36 0.37 3 8d68fd15873210ad +suite Creatures 36 0.8 0 f5dba1a136181e45 +suite Creatures 36 0.8 1 34e8894696148ebc +suite Creatures 36 0.8 2 d1a79014816017a3 +suite Creatures 36 0.8 3 c194688b5f230c34 +suite Creatures 36 1 0 c1e0899077eb1274 +suite Creatures 36 1 1 cf6760fb9a4431f2 +suite Creatures 36 1 2 dcd74b1e7a29ce28 +suite Creatures 36 1 3 2b09db54805f5e7c +suite Creatures 60 0 0 be2d21341a4f91f1 +suite Creatures 60 0 1 6774b6f6d69ac16e +suite Creatures 60 0 2 30719c71a38179ce +suite Creatures 60 0 3 8d1fa17bcb81c804 +suite Creatures 60 0.37 0 eb0d07f4f6cbca5e +suite Creatures 60 0.37 1 ff354b19ae1be645 +suite Creatures 60 0.37 2 57cf05e5079db621 +suite Creatures 60 0.37 3 8e02cdb893a2c1ee +suite Creatures 60 0.8 0 cf108b6b50cd9c51 +suite Creatures 60 0.8 1 3a0dce7945cd3f0b +suite Creatures 60 0.8 2 763688b6dc40c60b +suite Creatures 60 0.8 3 b31260023d5d8f4d +suite Creatures 60 1 0 440f287c484f2523 +suite Creatures 60 1 1 4e9af147b40fdcab +suite Creatures 60 1 2 5d64da05db18d4a7 +suite Creatures 60 1 3 2b71231e72401e34 +suite Creatures 84 0 0 6e52ad93163ae804 +suite Creatures 84 0 1 9061e2b60343a2e5 +suite Creatures 84 0 2 33ec13d17676fc9d +suite Creatures 84 0 3 a5ee4c019dc6d9ac +suite Creatures 84 0.37 0 1a1d732741680230 +suite Creatures 84 0.37 1 bb2f32ad70b6583d +suite Creatures 84 0.37 2 e68691f3f4c4c363 +suite Creatures 84 0.37 3 3f57f8dd4952434d +suite Creatures 84 0.8 0 f20e5b5831d134fa +suite Creatures 84 0.8 1 0b038f590453fce7 +suite Creatures 84 0.8 2 afc3a906a8dc378c +suite Creatures 84 0.8 3 91d292977a85413b +suite Creatures 84 1 0 00c4f5edd913bc18 +suite Creatures 84 1 1 8020357f6c16c12a +suite Creatures 84 1 2 f57de0bf36a17f09 +suite Creatures 84 1 3 c5b53799e733628f +suite Creatures 94 0 0 d039537d319f570d +suite Creatures 94 0 1 c8b4435ca94d0230 +suite Creatures 94 0 2 01a74b2b3bf9782d +suite Creatures 94 0 3 4013165cd0496c2c +suite Creatures 94 0.37 0 dde446a450c1b364 +suite Creatures 94 0.37 1 4c1136b7a8bc3bb7 +suite Creatures 94 0.37 2 fa0474bdf164911f +suite Creatures 94 0.37 3 696d0d00385f45fd +suite Creatures 94 0.8 0 548a6c65b5a0dbc9 +suite Creatures 94 0.8 1 a497cab5fd967a8b +suite Creatures 94 0.8 2 523bcd71844fd83c +suite Creatures 94 0.8 3 6ba1d6fae1eff3f7 +suite Creatures 94 1 0 daf6ea60fcf6c8f8 +suite Creatures 94 1 1 822367ce74cdf429 +suite Creatures 94 1 2 53ab7a22ceec4e8d +suite Creatures 94 1 3 55fda1809f058eb4 +suite Creatures 86399 0 0 9db4a1d7758fe047 +suite Creatures 86399 0 1 f781466208e545ae +suite Creatures 86399 0 2 7aad4d520f51df99 +suite Creatures 86399 0 3 7181336e5ef45365 +suite Creatures 86399 0.37 0 f72ef26edc59557b +suite Creatures 86399 0.37 1 06495b71c91c3349 +suite Creatures 86399 0.37 2 c4053d6961fa18df +suite Creatures 86399 0.37 3 3ae88afced82f902 +suite Creatures 86399 0.8 0 f63863a0d19246a7 +suite Creatures 86399 0.8 1 1f3000723beafafd +suite Creatures 86399 0.8 2 33342bad22570641 +suite Creatures 86399 0.8 3 eb92720cd6e87b7c +suite Creatures 86399 1 0 eaa782fdda6302a6 +suite Creatures 86399 1 1 6c4054e58041b567 +suite Creatures 86399 1 2 b67ea797a981c07a +suite Creatures 86399 1 3 44b7f7d29446874a +suite Blueprint 0 0 0 6e55c76436c678fe +suite Blueprint 0 0 1 65012ca7dba6c575 +suite Blueprint 0 0 2 9c53042098e0cfa4 +suite Blueprint 0 0 3 7832c09483647dbd +suite Blueprint 0 0.37 0 6e55c76436c678fe +suite Blueprint 0 0.37 1 65012ca7dba6c575 +suite Blueprint 0 0.37 2 9c53042098e0cfa4 +suite Blueprint 0 0.37 3 7832c09483647dbd +suite Blueprint 0 0.8 0 6e55c76436c678fe +suite Blueprint 0 0.8 1 65012ca7dba6c575 +suite Blueprint 0 0.8 2 9c53042098e0cfa4 +suite Blueprint 0 0.8 3 7832c09483647dbd +suite Blueprint 0 1 0 6e55c76436c678fe +suite Blueprint 0 1 1 65012ca7dba6c575 +suite Blueprint 0 1 2 9c53042098e0cfa4 +suite Blueprint 0 1 3 7832c09483647dbd +suite Blueprint 12 0 0 addc4053030eb104 +suite Blueprint 12 0 1 05137b87b84994de +suite Blueprint 12 0 2 bc73d15daa8277b6 +suite Blueprint 12 0 3 25cecda5d5ddfd81 +suite Blueprint 12 0.37 0 addc4053030eb104 +suite Blueprint 12 0.37 1 05137b87b84994de +suite Blueprint 12 0.37 2 bc73d15daa8277b6 +suite Blueprint 12 0.37 3 25cecda5d5ddfd81 +suite Blueprint 12 0.8 0 addc4053030eb104 +suite Blueprint 12 0.8 1 05137b87b84994de +suite Blueprint 12 0.8 2 bc73d15daa8277b6 +suite Blueprint 12 0.8 3 25cecda5d5ddfd81 +suite Blueprint 12 1 0 addc4053030eb104 +suite Blueprint 12 1 1 05137b87b84994de +suite Blueprint 12 1 2 bc73d15daa8277b6 +suite Blueprint 12 1 3 25cecda5d5ddfd81 +suite Blueprint 36 0 0 c1e0899077eb1274 +suite Blueprint 36 0 1 cf6760fb9a4431f2 +suite Blueprint 36 0 2 dcd74b1e7a29ce28 +suite Blueprint 36 0 3 2b09db54805f5e7c +suite Blueprint 36 0.37 0 c1e0899077eb1274 +suite Blueprint 36 0.37 1 cf6760fb9a4431f2 +suite Blueprint 36 0.37 2 dcd74b1e7a29ce28 +suite Blueprint 36 0.37 3 2b09db54805f5e7c +suite Blueprint 36 0.8 0 c1e0899077eb1274 +suite Blueprint 36 0.8 1 cf6760fb9a4431f2 +suite Blueprint 36 0.8 2 dcd74b1e7a29ce28 +suite Blueprint 36 0.8 3 2b09db54805f5e7c +suite Blueprint 36 1 0 c1e0899077eb1274 +suite Blueprint 36 1 1 cf6760fb9a4431f2 +suite Blueprint 36 1 2 dcd74b1e7a29ce28 +suite Blueprint 36 1 3 2b09db54805f5e7c +suite Blueprint 60 0 0 440f287c484f2523 +suite Blueprint 60 0 1 4e9af147b40fdcab +suite Blueprint 60 0 2 5d64da05db18d4a7 +suite Blueprint 60 0 3 2b71231e72401e34 +suite Blueprint 60 0.37 0 440f287c484f2523 +suite Blueprint 60 0.37 1 4e9af147b40fdcab +suite Blueprint 60 0.37 2 5d64da05db18d4a7 +suite Blueprint 60 0.37 3 2b71231e72401e34 +suite Blueprint 60 0.8 0 440f287c484f2523 +suite Blueprint 60 0.8 1 4e9af147b40fdcab +suite Blueprint 60 0.8 2 5d64da05db18d4a7 +suite Blueprint 60 0.8 3 2b71231e72401e34 +suite Blueprint 60 1 0 440f287c484f2523 +suite Blueprint 60 1 1 4e9af147b40fdcab +suite Blueprint 60 1 2 5d64da05db18d4a7 +suite Blueprint 60 1 3 2b71231e72401e34 +suite Blueprint 84 0 0 00c4f5edd913bc18 +suite Blueprint 84 0 1 8020357f6c16c12a +suite Blueprint 84 0 2 f57de0bf36a17f09 +suite Blueprint 84 0 3 c5b53799e733628f +suite Blueprint 84 0.37 0 00c4f5edd913bc18 +suite Blueprint 84 0.37 1 8020357f6c16c12a +suite Blueprint 84 0.37 2 f57de0bf36a17f09 +suite Blueprint 84 0.37 3 c5b53799e733628f +suite Blueprint 84 0.8 0 00c4f5edd913bc18 +suite Blueprint 84 0.8 1 8020357f6c16c12a +suite Blueprint 84 0.8 2 f57de0bf36a17f09 +suite Blueprint 84 0.8 3 c5b53799e733628f +suite Blueprint 84 1 0 00c4f5edd913bc18 +suite Blueprint 84 1 1 8020357f6c16c12a +suite Blueprint 84 1 2 f57de0bf36a17f09 +suite Blueprint 84 1 3 c5b53799e733628f +suite Blueprint 94 0 0 daf6ea60fcf6c8f8 +suite Blueprint 94 0 1 822367ce74cdf429 +suite Blueprint 94 0 2 53ab7a22ceec4e8d +suite Blueprint 94 0 3 55fda1809f058eb4 +suite Blueprint 94 0.37 0 daf6ea60fcf6c8f8 +suite Blueprint 94 0.37 1 822367ce74cdf429 +suite Blueprint 94 0.37 2 53ab7a22ceec4e8d +suite Blueprint 94 0.37 3 55fda1809f058eb4 +suite Blueprint 94 0.8 0 daf6ea60fcf6c8f8 +suite Blueprint 94 0.8 1 822367ce74cdf429 +suite Blueprint 94 0.8 2 53ab7a22ceec4e8d +suite Blueprint 94 0.8 3 55fda1809f058eb4 +suite Blueprint 94 1 0 daf6ea60fcf6c8f8 +suite Blueprint 94 1 1 822367ce74cdf429 +suite Blueprint 94 1 2 53ab7a22ceec4e8d +suite Blueprint 94 1 3 55fda1809f058eb4 +suite Blueprint 86399 0 0 eaa782fdda6302a6 +suite Blueprint 86399 0 1 6c4054e58041b567 +suite Blueprint 86399 0 2 b67ea797a981c07a +suite Blueprint 86399 0 3 44b7f7d29446874a +suite Blueprint 86399 0.37 0 eaa782fdda6302a6 +suite Blueprint 86399 0.37 1 6c4054e58041b567 +suite Blueprint 86399 0.37 2 b67ea797a981c07a +suite Blueprint 86399 0.37 3 44b7f7d29446874a +suite Blueprint 86399 0.8 0 eaa782fdda6302a6 +suite Blueprint 86399 0.8 1 6c4054e58041b567 +suite Blueprint 86399 0.8 2 b67ea797a981c07a +suite Blueprint 86399 0.8 3 44b7f7d29446874a +suite Blueprint 86399 1 0 eaa782fdda6302a6 +suite Blueprint 86399 1 1 6c4054e58041b567 +suite Blueprint 86399 1 2 b67ea797a981c07a +suite Blueprint 86399 1 3 44b7f7d29446874a diff --git a/docs/performance/motion-low-hanging/baseline-large/live-320x100-muster-0.csv.gz b/docs/performance/motion-low-hanging/baseline-large/live-320x100-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..f8a40203d435762c1138591ce290ce6d4f299214 GIT binary patch literal 4799 zcmV;w5r0h5w&t5d;?Re44Lzkhz){{8gh{nNLP?e|~rUq5eu{_}JD^T(&Z-?sm}fByKg zeR+HT>&wUX&zDa>-?q>1Ki>ZMc>n%wd;j+F_T%4AUw`}cQ-Ao^+lPMo{_EqPU;U>a zZ$FQJ`uP5F{MG08KmYvgpC8|Uf75^c@#WLEzurFo_Q%`TuRpg>-+sRT_WS>SykYFe z`^VdFe|+Mf|L5!bzi->$zkYHQ2EV@P5q#R*7QEZcxy|ja|BuJv=a|!G7MkrL*yd|- zc~6#(zuKa6t?V`CjsN|BrfoKDA(U=9I&*C|ZKIOcZTKMDS;_m7&UtDo}&242q&E|6np&sVFxxK`Q z`GQN5p1#%^dHOQ0Hix!1zcim`^VQXQIw!}pd)Ky@t^Z=Pm|NI$X{U8-!G*n~rS&pf zZ!yGjy1oV;j7Ln_@3HU}F7m9oU2$W{Io~5{VZBb)&6VO#&%50A;<%ZZ9iC|$AzKOZ zba}=~jdc%Y8T4(o?k&V{SZ{zvj-VB5jQ()tWoqTA(sg*=~y!zxZ95{dW_qu>4Td@$X3 zE4DO01J-Iy^}N`WY|oDS1iIjchxBl#-%A+wlWr%+weM%ddgt90mOcm0D_e%)cu35{ zUKPXnG|!9pytlf3{28%c+;XyIYf%KTB|>RWP2QnDx<@a7Iq#>3tIBypRd$^8@7A@*S9D8$Pf!KZDjo zF6j)NRLZVbAz=U>Zrr#_+p8aOpKFL*`ZAOF8MHl7+39(sw8Kcm*y;L~Z|74j^wASIUWC7&WxpPh}XO@+4shAZ9+#6yx2j7p@N2D;eHl*=pvm-Z?VK65++r$c+#BXS z_eSdVC=YT;^&xluJ&R362DE=Z%au=*!+FC=+xD7dmaIzYo+Y^W3uhaodQZ5%2)hZ(q7E%ChFgvvlQZTMb!2{Gtvw!Nj1%<&(Dl-CM#1}>5^ z`s4A=AAA+m!ThK$JKwKO;95=<(D#k+9B$IlmD;aj{8x!bKx?ctxGO_RfslSaHCaQ%osK zfI_7i0u(P&96`%4^`*dDkoVW_nUNdii%V!m>y=c28A)DxT$}_P%3WLu({&x2Gjfvw z9J{J3e?)wssMsYVEGB}dg%Lc}6Sc}REBiBalZVwWjgJZ^heP`WskI)P6rrWs%?yg# z_3g$Pxk*mHZWop@$&eJ#1&+tyFs~blgEx^V%A-sBGjz$`=_)>r(k!dUXe1M-tVIPN z6okQ>dVF!;%KVJnl#9E}i+IE;mdRvY&RZ1i$2_V-mtdl}R^oAnZmOUuUOAm))hqvu zd+;>RpA#kHoff$)rHWNWw(BYd3Rdm^7@TGtS`6UUl3hXERpuddq04%xh7_bZvNrXUIV% z_6z^a;KlhA=vRe{cG>fL$*q6=2? zOU???yu8yD|3sVGhwENIn(s@J>q8$8&5)ZED+tYsSnXRp#f5tC> z@v-wKpG6k?-U#De5Qk!-)CJdNpI|QaRr5E`_yt|Q^!zIzsATi%pThbk|3t-X7|#!` z!2|5Kv_In)B?6qfeLl;xfv*_VvMx!Po|o%o=;E08R3H(eWlIw4BysJ z4ekgZa7JkG_~2KH-z(jAg><1eQ((i}%j}-(!#tThXqcl9L(iGeh(V=MQ$tj96twhZ zzYtD4$!%%BJ-kyX7Z3Y<7+)YRVr=!OfJ0Ne{bnC>UFmI=Rr`HLFN|Lh1KobDP5m*s zUu`fd4Q?uQg?gixT7a^6X@5p9Wq&5%WnUlW?vOt*1Vo8*>i(d1O1asgk(a3mmiA}# zl1(L;5BsgCs{wpXNu-kIdUq+`bFHrH;(E4Hp6I2Hi-&)jx}EA~1a1X*6*bCztK3N& zFCd8|id`KLAM}GS!ubM@3n)d^t5Bq&kyZ7^ZL|zYoRpPr-Bv2;$)B~HH^7JS5VX&k zJf|YpVkWA>5GYVvuc4L#tK??_P>mg4;nqh`p@7xi@lh^DLYM236YLRR6{zLEQn0!g{Qy2py~1--*zuD|4Y?#v9w>&c zQs}I)I^dCmsq9F3#{snqG=Wff&{T(%NMX~iAuWN>g;H3;th$E?0yI|?b^n_BXBkIG zOL;24LL>|o(Hm!NJ?g46j*$=!J~-~ctGMIC9(3ehTO-&>lN7%LXi0&vZjjZ7j80Km z^#B^w*43?tJKXUulweS57)UM}Xt;HQuRe5iAibYVSKvG@S>O2HDnHz zhNV!c4OrnRMnp80!v}4 zF-9Jv7epkN?ADXs`Y454l@dG-XdTIY=t^4iLC!MR`OcQXyc(rzEm|M7FokV9FPR5R zy%?a_pk$APZ|K9KHkuuolQS}SeFu+XI7cd$egGf#YW+#0KvBJ=L;(dC)pU1LOm*hE zTCI<27?RHJdV^}m(5qE`(k#LI-XR*zxCnQsalD=>KgwZo^Z_(|n5!)!Y2Uj_iYFi; zQ8V74X#laFlC(!X4A~)Z`vG8Dib!oNNo&nCeL$Ylw3i&xSqWa;j=?8jWid>9x5;RwG+dbB}2f5*Fdw z*8584?7t=sHd2A&MY3ArS$k6WFKWthFGN*}Ol>hN5Ae^Ci7yuhnl@R)#~N1~SHnF} z$7qCc%^bYCMES)VJSIwsRCpZ_)c2DvDSfj->k?kAy3sa3@s(qmvOFL@M^<)KPEZU* zHZNE;nT$f20caFaxVJ32BzWPX^c=axD;40prkxjQ7er%Ki!o%Q6dP|KilsVv@dl5v zlEG}Zph&&Vl%Prg9eR%uUK^!{j};t;HBsY;=gc$Y0c3zyRXl0H;MJP82(dXA#2QeSDJAtv>K+!fQbijrGjo?0Hzoan5YZK}aN_F<>>0L~uk zSoqb(H7CeYD|^CR?vnwlB60Plu6uSORQKY9$7+XbbtqF)rU6Jz>n;}hgcyGF@t$v& zCgHSRI(n{TX${H-6mm~B6ftBLe&B*sw2d}Y$dcdT)g?TZvT(vsMPlqsswwIoq|{ZH zX`nL3OfJ0MU$Ey|7Q%33O|9?Y6tX^GCK)K_aDblp((Y=(AXe80JQlN3(%kEMgVNJJ zWgrG6vST|Jb5FJai4<(>v~SPVECLZs6xUls2%{*86z)+U^v)Z!7YEpL^Ue*nAm8J&pdFhGl=Zj0w?2BYR*B`_ zy;~meSkU4YZ#rt)&}th1PEufL9xF0K8MkO<}FXY`lL*CQ=sX*Pd z>qu(7#bYKNt*c~vY-zzaDUPJ0s(|oprB^jxgv!gbG|G>lnO%!74oHvHQ#a%<|8mNA zjb)TxsnvQO8i`+8xp#$^2js`fDQaer!g2N8DdIp;2|aUPSrOhaIRdG9~Hx-e&8& zk}tgU*p7BNmNrfh;d^a@kHt}&6;MO)I_+(Nz~`g$H(p78i)L*^>4n=UF; z`#ofIOFG8K8c?+Ry9cT!%wD|17nGcJsZ)afL#2o{mi1F$lVb!IVsl{*YNmy z1Ifm0;LZ93JZEjXYRRpq&XVuF%cO6JvlE_0E?EJig`Nyt`JEn#driIT_ju_3N@E1satZ+Fp*tKx4`9|qqz~L%-$wSiP0!q5I3)j`Bv&#b> zK-TQ?+B^=&0t}T}KyvlUDb?QFxkS90*=_wb6N^t6x8$yG4Cw7^+_csObhX~D8LYo| z#FDyV^@YNIEO9~1>eindjMBD|oEbDeQp8J*`FjH}=#K2w1w1g^)ZaS&0{~QI73UAN zVpTg^ZG54^>+1#lW}TBCOI+9!gwG|VW0+DMm8|RAIHXhPZUku54jS@lZU2#yz4q|V zC97n8iGnhL!bZv86Of95dx=Yn@%}|eCq6TBZuQ!t15WCCH$(fVfc8#WSC!$F2S{cb z{IBgl@^R9_{lyTzk0bqsh41HCHUt*Wd>X@vJ8=X4ZNu(lFmFHKq9lqM zV8mPmcDpwzRn=Ox>ahRw+9S5-(NpoKfiwd{r39u{_E|}kM|$nU+>>P-hTc2`P-*|e(M+ie*4g$e*E+C^Pm2w zUvIznAAS7z*njKG`(J;3`uXd}A8-2GpI<+J|NHIBr$67mef$0T{QdX)r$7GZqwiL_$OE2GYOk0fU#ee_r(Ka7#A(g75qbrZQS+g9r5c6?Ym8Cs=Y}EA81jX+A!e z?2hBJwJikC(?^WM)0>aUZ^fU-TT8elC3`$R&&OB8VaM^cZMFDUOWflt#=$mmYpxC3 zJ1^UZ$K%UJ)Ym@^YLF8k&hz@ou~ zD~t1I=z`mp4rqm-zvowNSx@N{Jv=Ws9>kMCca6{Hw;8%t6cShP`&eJK6vHZ+=Z)SI z>{oP}!Y3`Bf5t9YZ~mYjkiWI2^P}NkPx!csC)$PG>Y;}8%se)O*NYL3_-QyZG~nTV z=~l6dfwmZi{S%nma(bp7o6$>nI!kB#H0t0hXQT5h5cvv5)g?W z?D%pSv&UBn35u!WHe#1tGoHW3m|@#z_}YwL9|6tbUy+WeKUHx|XuPS&Etip5yzo_R zfv*|AKIK?Xe8CSHE&>pKGu}$!Bm0Cwo&n3@mFLVgJi2!+l`{ZdJpoj{5i;?`IAc5{mq6J`h_UI2|<)()5voQRQh1`xH0?+6glz!=iF zSSZE|0kt5q77{(o5Kcr(ZD$f7!%{5aLXtdo2dwzIl}n>%bZV^66c=U)Qy+;nj|h@> zMnvbDHrP@k0y3fq86vKjBJ}zBDj-r~E%|{TSA**}NV{wLYM)j1@Bxt>2x0qp1)%F;p)h^vmsjd`M7l|^?Fh&}- z*v>?TLTtVMMZsAS%&arU`35m4fO+ZX3uYWsdjjQt0aBezFNuyqRFx)g6r==^GniW0 zR8{Qb1v8G3`zWhZtdok#<7j9!x@u&?ly`B%2f=UxZ?Fi{8OVgiA-2fHDQ^kd^f5_v zimQ{0qPF3Kmg73vry0qZMZ$k~vZ0+bvBNRak*ZAk8?;exXZ;TG_I$yNeXb1IPQC<>JF-J+~aGm|970SUqC!9PZxsvq#4m3VYxz{Cu$_uh% z?~6*h#^Hmm%oe&a&q%HW`q8;e4w6PvbNg6aYEpBc)ur~lK*YI}i`=L=>eH|OHfyv!oIs1QI1#NHC6Hj~I635WMlbyA+g zG|xz;t_XYYm=6m?dIN6inF13bHK3F62Cb5Ch_>eoW+apTPG!o6Yadz!YDkYlhl`xZ zE?ht>rMM;8eIMc+8#M62l=xS zX=gf6OQv9@1r*x<$u~&ZeuJrtm6VgK@>r>A_V)S80Gk+hx7y>Z?3R<0sY2>E1Qp65 z^g6@j2Q}t3F}6{OlPIv7Z_mQ0-jcHVhvBeNFTiC)6BuIY-67;|u**ssg#gg!8*W({ z0qXN%C5kdqutJS=OpK}@MWw#kl{HI4Xrx8fthcmGoTMXK`E=|vq2RF4KC~%n!BV7; z8)8>?3qRZxHi_R3(ktqKs}Y6x;T$PR0FC6ciDGE^zkZ}vpoHb>3S2{p{Z}W z(-O6fas}rK)8st<)HLiHegK`OX6`fM>Wt~4(&D(mX;N(JBs4W!)IqkQ@n}w?U`7?^ zWmlxOTQ%slcd_3<5!J0^#VZXb>1^#DOuetD0U#;kc|Luwn47DIr~8Bp{fHmT!+f<@ z=d#L}fD>&&O8z;)wHecyTEXq_z^ADLVjoheC4RZ$V`G z^BvS*b1HIpuT5-1CV+>^7=i>|PlKLkJhX6Yy-;Y^{&HC z_yi&Qe8a8(716@y4HW$Zmn1e-U`HH@o0^bJH#!R-k`Fy2uH7486vn5OQqdrK7xA%g zQ25?3DWf1kIco@(7oNU#z~CHzyn{Iv2O;tdT;-rZwc?R7c{GBnhJ$VuthWxBGdIMT zI`A4LYFbAvXzCK8yt;5br%~#~r$vfuw^p`>_wIZJfUKq@@< z=fXy}UN#nX!wWuanjK}$6^g3Ds(G3kl4GLpA>Xi=xVu|7JG+=qBL!~I8WD;+x32De z_G+PzotelDUft2f6}Nu2)XH&%*GM-YP@_69t_W{Nz6o}X#pQ-jS8FY|hBhEA@$`da zH(I9^Ww@vTD{nZl5>>A@b{1n(0_8RpY2FXgNC+|ts**H)(rCO&-^6l_UAUw7S)Xs1 zA)T~QG-?z4XiA-Z@B$G6IF(sBUxN$HPHlk)aCI9Ud1bKU3iZN3c;i{OswPJ3Ny&}* zev@2sZsqFRa0*sC^b%&$28u8(fn8fim@4LJc%+7>U&iYU>X?DS>4;wA0vImXao|Oa zWT|ThCG|es%GLEYfwX*9Kn@@XgfEFG1P0++10_Wnq7s1cnm(?qbQ>~La+VWwS~5{} zo3x9lWdy(n#OgJLr!0jW7ei*dEqX-{x1M>rk)5db9w5$`P(zM?(v_^EjQ~Z2|zs>qfzJkg5-jQJm+;b)fF?UiBJuYjwIwo7pC1-SQ`gxu$`tt z&R0`+Z?QUS_w}!O)mctCOzD7slGYP(RGi(%aOV{o8kR)^&h8svzv% zKR2lF;I9QCBswp(Aiw(#7`QzPEoWMCMIfp9jnhrC&&pIQ@|K#<)WwqDZ3)aH*5g0~ z1-TkxDBz>hU0qU_Z@fd)z#uJJSaw?j^V*}01J$K(ZPvbq1Y7t}yev7m&pYY9xbnko zlhd1W%wZ+%&1y>`m^5b;1CSClL^>Cpszx2QdWYLCCwy7Tuu|fI(XP?E-u2g(5;A!V zKefAyqFJTt+b$R}nMaWlaI1EmnwriqbT<}J?uVw3t4nxsc-)L&Rp&=GbVnI+bAV(ReuNf?E zxGiS;GSmPfAahXc%)~)nSD=u4$LG8P*AO2I-ncD>k-4GpNi?~xkD(Jmb zLn&gn1##SV!}!0l#!+p>)_Z)d_6@DR92PZ$yXdv*^=uJMx9u>k+f+BwP{cKQ39zt_ z`HEC|7mE)mng|7Xa(nA(^^91LE7GctxUGn}1hPjl zq`t63rE^-g)G85N1;dUZ0j0a|&DzBk_4Xy2Bm|$eyM`LLqD3XatU`j|jo1E7Xi6lD z6(zf^iBVZ;cmD`kEnxOtUL@)sPn3{g+%D0fFN@^WHu!B*%n|i|bo{CYCz=x|?-x5( z58Rcmz1r2Q{)63C#hgnvByvRuXm=4%^rf!;l@V?E#CD@6RKntl+t;OBJ$JdBK@5t{ z8nn3zC-J_(Bn(Hui!H4?5VvJ9hpE$X0g9_HA=!Qvbs6QIvksH-oggin#s%tb+hP># za?Jh;eWZuVZ|d@?WOOyuNe=|4ozk#U$hU1V7i&4cmr}`-3f9;wMu~i%^}U7hy#js7 z#QKiZ^946hBbwT|mP`^trM<|X_|o+rvew3~t>I`%Yd@{D9dH()wd;a$F^yA-;UqAf%sUQ67=|zA0{_EwRU;eir zPd|?@y?lQ;e(Lk{pMQS%=g0Ryp7gIzUp{{O>*@1{PfuUJ{@gx(`}zFgkNicMQ zD}1$Yql`V}yw$Q7eywzV(qgf&rO~q88j6#lnECI`kaa%G#uj_ujX(2VLf%@ddr5I? z{L}dT*3y<+h-piqTe~%sCPS&#+TIM6nD#vS7His5%`((&v)1=m>ekZUWT>Z#A+x-t zm}0&)lqW;wz3XJCc6?jI-uiJO&dG^-9b4@f;wjo_TkfIax@gvK4VB4|y?0%SeXkAI z@tGqA8M3t5h&)o%i7a8L^R+x$sN7|#_l9gTR8Oue72{1V*^O^-V>xZLX1-dt!NC%a z?}ZbM9Jr&D7I#!9L;bz$ER;Rt`^c^6Pfj%Wg-$F6PDBt!La8?%A&eHcl;bG3hT3Fk zoLraE9)rA7_Rcr>e`2r3xGSXbVCH~v;J*?}mmy2x)=+;l6vKPhS!;V7JT#G+x-3~OvJ~zEJWk+1Zobdi0yyO2*EIMOOSKXYW3T*+FZKu`gbWax zHE_m8Se$7>2R`vV-hrK!`{Bblug=tg*TxAeztU|tg&T>X(+AFEH7@RHf``~op+|n& z;HFL9D}wOYw+?6w?rWqyaI_Q%&cZ{<(x?kd6F#JHPFo`)im+zyBPk+?ggQ7W7Rlw( zg{QcM3j$zMZDHJ7ngAl5*rHg+U$WHp%GtOlaH$d}BN6QtgqI~@RF4ElYPl`WG$BMf z(}h8GH7bzzTFjvcOV$p48ic-E@_Z2UG@j?)(gYFd%ooa>EG#0ghWH|LC)LdH8}Fqi zlHgeg2$QAdJxv&q&V<34bl-6_V!_X3vNT}crZa)3fOj5{dLY9R_U^$bO&F2RjL`z0 z8QfAKXGON)D^YH`Cn7>0kVHEnD)u^*dv9sNh;*WiLUJZ~PiM-!Vqe(jRxeky_N2%=4%P$Efqjv3UuT$+*Q3#mNeL^&}>E!{;qS+h%R!B}u3DuoMd z9_bPj$pjQb)-l!ZPn9R2C@1QWK*6W{K+>_oL-WNxjPH~8+?sJ~xDXNDP578C-iKhG zu%evU!xREd@mw5-R0DwJpyEI=LtYukN;UaqahsW#y=TNcVMRH!2MIJDg<4In#_(s$ z6alykw;qHWq-Kz^SQ=wtX@ZJ!W{&|>G#)z#*D8{-(ncAUPqJi^{?bcCI$yz3xrd58 zK}9*U2b^n3%8{t<#l456!kM6KXi_2_YR3|2rGgE%y0lA4jF=~=C};MdsE}NhrN9r$5`{oQvcSQr*|NOX(M@0$-lghU zoM}P|3s>(2zb8IByG9}sbx#d(1bn0>OR9IcE#1UeKzg2l!cOFYy5E~1Jp=6}xjrwz zU-v{ClGM;t44rwJ75ytiZ2KC}Ah|kg1?+x8kZr+9k;p_`pfPkSLMaP0}eM zuyOCAJS-DT*oi&Feo-b!-WXJNM6ZXCmqjp3o?@2A68N5-?Onz;89O}5{C+&;zio7 zV(n15N&mET7&Day>Y#Nnu}dl}+Hy9*M>|mpVMjt0xv@CSE6>zWG;i8q?C9HNDVh-m zI)n;xA*yWxkal8~q(ZnUoCvCIo5cmX<{|UU>8XWJGU03XbvDuBzui5FvdJo@WB2zRI%+LE4F5IEHkE z?hJx#eljY#l1b{K=0`wE0r*)y?SMy9iy+=3h)oF6P7Fi(m@_1GH>8?hja7Zwj+0T- z@XOTuJ?TruY|*c)6N2<`=`R4l<~24B3@)b>al}nj5iji_QlLE9dR9}pSgZHZSSJMO z@zP>IdA8VzQuT%!aoMfGB80?tEJ4M3-h zXkC8Xa;a#hqBi)wtqDN-iDAs!(tIl^1G>*D2nWMe+$48RaVfmd(m_=(6l7tQR5&`G940IQ9VQpu`RknbpnunVi=B4ybYevJ)Tb< zdx+KGLkpcu+AS+k5k5po4t(?8*aRT`JRfmYpexJpR%`CYsA`p;1r5jWQXMvx3WuL@f{7CK*}MPEE3LGk&N|`8IFCsX^|(oW z9W{;fL!eSv5{qge2&`bW9HWAIcz+`;sIyM^G0r`&(WKbC)yc8P!;93k6iiA_;v_<0 zBm%xIs?R{0MSrqQ_%TidQ^k$ujbwA&Re{dQGAt%(s`!W!D5^EkCdrG@h4yX}evEQ< zV^cm!2B=f2&Y?_K2PxOXf)`C6m0&HZ#~3W#r&*iuW1O2`I??b!5NTGtO-W8y;1QrS z*H*o$pU+KZz=qGNrQhFKn*d~-+h5d|yPi5~ei8i6x{8%*L}BuV`~VYS=~z`%^|5GO zw+TJQWo)8Gp&iH`Ej%nC{LS&PX%@;KUdw2bMkRgE(Cs&L#Mc@7_g^o+u>%vqaXoth z4U!b;6|Sk{K@BI9Y6*fFP$_)cBAHvg9O}&!1$f+TB==vceyXAV8xTn*sU@#ya1~Oe zaylt`Z>n8xYC6>bjZD)v$(i=MQI6O6r=C-fx2bUuqeM7~y~wS8iNMKJ7s9LSS0tz$ z4^_ejB^C8oSEn4;n>P`wRF4YVdt>90Taybz(>SmBy!~*YRiP1)sRrWku_DHr<3({# zmiyf5SJZgtM9pfwLX3vij)5+usoqgsxv|F!9!|z860xYQ0al@? zy|NWGs$gmAGNb8=%YBtcNlKPd@!nXvApPt{>C${~m{%yScnG@TtuXOQ)gZfS6i|au zAH}_}mMp6k3~Jv+eI%f7g%|@X zi<+DF*3zZwoU8@4carKQw8rpeElB4DV)s!gMH--90vfV6_oNyx_tx^Ipq{NsK50Fp z#eMkpfuvkfQ$(F3S?hB2AY?k)^}jWfM!EC~-mE1x<-BLj51Zod%FzM1UAJ~oUN%KZQA$>+O~jH%OXnZrNc8> zGh$MtOx=aPS9W*6C-pRZD}^fQs1kjS5E_JH)S~xA(`c9G)nrWtU({lVh9C76xwMA? zy&Xa?1eGtQ`3S;M<$YdQ>zBUVY)#dLBrjC`z)ABNW_C)DC%yMm9Vg%%SzBzWjB#l> zzF9+q>)x_QiCPfZ_a?Q?;&XkkJ^<}3L8c5KyGM#;vH5jvr%vXo`p+6Os;LyxV_$%$ zsE>Bp@U>AW2lZ95H=uP|X@k$^lF&&*QpzVEoi$-=R|B^{%xSo!r|f(=Yk6n2o)z+?#sAKk=4(V59#4l* zj#`jN>U(z20*NiCu!?n(`dDGL`xDA#d@-3rAMVJ1jmdmCee@usc?sY*FBH=JA|ty^ zJBg*`mAUI^W-_ONdeRJ>n)J~#R^3&ob)xyr`)&>;JtYol1d{RttGlb0sneUe5!12% zh(It4k3~xg-f^tKs{iB*82q}hS0THs2Ihk$EpjP*k`B`@C9FSI$F7E<9F%Bcpd7_wg4$rOJsNVO;Q9nHniIpHdd6gG}gfU!m$;r7v1pab71amjXwkLt2s=ARRM!o~2QLl+=&C zUoU>5_6mxoCOxlwST4&Fvn|RPAC31zd{Y(@;GmewjnQ`*NZNC%(RcYRul79Sbp>QD z0LoFf6*Z1^Uz*-FNo0T@#U=Jh+6l0(u{E{ALTSZ$skEGF2Bot@_&hp_ONx$|kge`L z>F9u^gH>;ONoHDE6m4}>SOrGveXrU&a0&* zU5ahZ?Nl3q!I&x9-6gY%kNv%f5+P{s$v|K)*_J6bE(=z3H>U3z6G$7xDmOOC?s04u zs`uDZIabsR?1-XSTWnFM>*CmaXVpjiDr1IIbpf$k9=qaC$Cc>PE)*rB@Xm_E^MXCn%`urYfa5x)*#2CPwl{t zDA16`!H2rAR@LkkPH9nSVJly@7vGh=yCjO3#Ey-w2U6^j92p_1-|e?9a}&n%7Ng6=;)LZ$Ze1#Ty3NKh~kO(QV~8S8NNue79|S z<`pfr2JPwKwMUmiJL&!CNcZHg$E577p{!-(K~21{)i2A=v#sRA5G~Oj13PNAO;fEQ zA0CTWNizo1x{Wpi!YU5OWrh3weW`<*oL|NxHq?iQtaM*Ze5o0fMJ?8Hr(sdS(CQ!fl$2T?uXG<4cM!FTVQcO<|As=b;Xnxn$a2A^o5 z*Za15tE73?u=d5uZk!iR)0tM(=Pc#%>QrmL-y+cKIMLsX&}%Eg9&GubtuJ~!ab7u1 zmv&jxcB#70(o(K(q|sDzwqul_*M5{YMdNp5Rata+;=FX4F3mCjFq-jzAT7ao_74!M}8q0fIKHBVB=k~dA&_1SEQ!{YXw{OZ*_E8QBLdGhW=f%@_ z;S@Bl=_i_A2z=e!t?(D67n;gNPt^1RQuihDw8Hs$^)y~MMH_0GL}{V>*ecMua`gl0 zRSAFFP3tB}-4DV10_W%D(|F;OqCsx)x5H962K^e6B-m`|g}16bfuTx0`9@+Mt9pH2 zKaCeop+?a*rrtYJCo%gDuO@{S{dK|O$yfCjpTEz77+=I;xxVx^H#W!7>Y!F{u16); zs`^;21^f*$9z<_-swbT|-QvFH4b*tyltk^N5>M|nSVt&0++@LIccOsGv?yCqvj*AnvdXuX30HMp zD8&}GuCK?=w&F33qb_Q`kCeeC(^y=2*8H7mGDXTz*#MT+MQu4Rp@s{m5OG;-DpYzb z4QuA3ml*J&?GD}E7!KN5i)t({Y_-da%(E@>O7WEya>qWS>zKW3s{o0knX@{JIcU!& zwzSISc?C6GI7M51f+4+$dGs-xYz;?Zy&|XHsqg5A=yOrHcVTN>UO9iW<(+jke(_;A i#+{m*DJnIIwBz+{>2B&*`MPO)?Ee5e=?@U)KL7xiKH(1l literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline/bench-120x40-muster-1.csv.gz b/docs/performance/motion-low-hanging/baseline/bench-120x40-muster-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..6e6e6c41e47148906b29d211f97695b4d7ae3289 GIT binary patch literal 5625 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline/bench-120x40-platoon-0.csv.gz b/docs/performance/motion-low-hanging/baseline/bench-120x40-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..4873192774e5f355d4129a7358bc42d1bcfc9689 GIT binary patch literal 5596 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline/bench-240x80-muster-0.csv.gz b/docs/performance/motion-low-hanging/baseline/bench-240x80-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..55a525fd880272f1569b8698fc1b376ec8e701e8 GIT binary patch literal 6046 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 Xi&JON>Ri{d(ZBv5f%pd+r$Yb$_ol_b literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline/bench-240x80-muster-2.csv.gz b/docs/performance/motion-low-hanging/baseline/bench-240x80-muster-2.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..a9844ca7755b52859e2624d9b62ca2505bf59e2c GIT binary patch literal 6084 zcmV;#7dz-5iwFP!000021AUy^avislMBmT1badbj)Ymv(A;m==weAf&AczM-VUw^#*{lmZd z_VRsx>-FpFeAUO#zyJQr-`~Fe`l5gR_UXfyKVClm^4rUwe||qceEI(QmtX()^@TV4 z_WAYYm)}0{?f?Ax^5wTr$6r6bV~cnE^F^N_)gv6KgkyvwoWcL_apu=YioKj6jl*&} zW3NXFXN}{?F}1U&cqALAWjmrJULLKK%0FVVR3Gid#a_((S?mQXC+~4|OJ}geJMw** z3H7WQ!@ZuV*fDC%M=VxTI!1}z9<8OtT57HJ)mpZ*wQ;nP&%`NXJ{v|-vxc>DG4H*RWl&Nj}-D|2d{D~w03e)*?MkESz=M7Kpj40{c zSCQFvW(*DDgCADovs!MoJX-6EHM@8+5*DKekIB;gY|&&*$xt|3D1;3b;^1t(-KZ5QStnZZF{PPQnA4HSkv$z4d2%3#P>W z-k*G8^3KN5hmcAxJBRGG9M3_tbiSeA)}8TFtL7eyq~5c^1y!q_kR@Fis9>RRgH|))RAjI#P%vFekIK|^ z0sI30AP_eB7Z-3zR|+DF!LC3^aAhMqxKvRdR5%!(H zlzIYR!2J@4nW&fxst>kQ9#P`^x(w#t%(+mB>q8l=$)UC8h;v(v^}@ zh^HY~taiW5sJqLGn(nZjYjSE5-t#^w8yJs4E6;?R7Nkj6RzhBIc~yGkbkxc&Wn3u@ zNwfr#ia$b!;8QA1ath#1&ry>WsL2;%g7UgY%P0+r=FnC;pKx$ueIW_p>MvACk`o4D zH%Mg9QIi&^$yaWINT-${;?ML(PNZ%Y1%gXN4eU{yM@?5A^`=WSlK1* zgG(If2L%LRPE_UsdMhxUE&Pa0as%KMnE$XIo?K__?V3V&5Wn^NH z9u-&+>PT8Rsx{}r+$9$kSIAx7C`sI5b(CjOlNYclSBm1gpdf_>XDXu|PFYzTB@I3} zWA?a`SKV1f@CGH0=QHL7ZOWCSgeKNqI!swFK$Tp>8fcIY5|Mir-1I7o)J%THx&hR@ zz)iW5R1R1S;+@b>Ya;D)6y=6jf)GEUCRFo+H|4@oiFZFuM-#M? z;nLl(`$3X|3qT!pBCqVuDoV1^2q4Ubu{q-cIOR%H3eha8lZuO@PwlNNOdPginvalO z+zinaKGi??ZhTf#c>$bqE1NvOgEK8&bhV#|Mi583m3ssO`V27++zj-lAJ(Y zpfh&8h%>g0#RYTfg{m^l3pX~2B!ouuI-}|O4C=}TuBxNZB}}7p0yi(O!XM9(Qx?pr z7plrt+*GAb0Urw zGY(!_1GuXGMKdZ_g(v7unzezp!D6bL;-)N^Q!ivysL5~|8J4JhgYpsQ@}AU&d=yko zM%_6?5HU%}-*g9!gnW+GvS3cVuvM`pLqV~i1_r2>0XsE_$j_jNsWwgXnH2R_t3a`J z4*hI$0iAlGD-yKgP2s8Jep6L=3ObuGeh@>o2?`Wjy{aZXO^nL3XMion6xoN)o2cA+bZ4J4un$j_KvS#@<@$h;F6z~WmIE*Z?N z@>NQ6fN~p)3+S{9U11-gL#9(*;5`$acm+crug(%6ssxGZnE~Y`zP%u4QC||HL`!i~sn!K_+J&wXst{(aTB`Rm_=*fAW$<&8)NrW| zU`Tf6wmam4I_<(&Hd{s6_1R23)s9|5s7s9fp z3sc*IItmASe)xq#`x3LpDWxp+3ex{jD-%Ja{&jo~p1QzJzc3c`Pm!Oz(aibuanz2M zZ1&z!M4%FHe2V5Y6~%EyeiI68j=2C&zi<|%L?L3OIf^ME(a)N!K?g6P@i z0zUo1Tl{J*0E7~c0~YI3)|q-YgM0L#AL=29kX!Jmb(^H}CTbV>>9;zoDcN11i=otd zluDNK)aJ=#t-P=HPORN)%xXyk7WDPT<^n+dT4@2Az<|f8x_-IMAwyH43fL7jb_O`C zt{uiy5Y^daM%+EyYzqX9aO<-Wl}^zRuaAO=Ta6m1iTE^JDslf-y(2tSV+_w;?xa5F zN?Sl^+^Q|06ZV(>AT>gCNa!w>hWf4)0o4apk~``QWEEU$AE2F|^<7&~Xx!_qsP?1E zpA>$!lJzSn< zZjs+*R(aK1gJ6PcduqV=T*P-8sbU8Oq^1?zp;=Cm62ue2+oEPM{*acX{%X%S)D|2X z2>I5m|-4~PALIJ7vqDav77jXC4=7K|Zp|UKfrW7jPy(Kk##8ZVgWEHRH?JFYN zwNDZpbB|rU6ToDbD+>9c97n;eFuD{}y5&cyKwKCc>iHt#`YRYPMt81D-R*|q!%T^dHjDz4i&HOdfElw4{t0s|ZEvpDoTR&7? zjw)M#$#rlK&rr}8_^}IxWia=TJ}e_zO^pIDO&U)vX1-%$6%6(c2vH>4273Ae zJvMG_fr+rXr(^#YcH%#~6kmV5{+o}v z4d13HWV*8j=M<}ZfmFfUG!#@#hS7W!p+#fnO#{8R+W{AYy?O1Cohm|#Qxm9Ti|c0l zE~#UK^Roa5VipM2ycv}D+YK%TTcw~&Dm}QVpb=;BhBkmB0#Uo)bcIpjCFRu}0mo)I z*vBnK*Ar@aV(_74*mn!EqmKrz;H`QDN!t~Lz$9nnOA!k7;*JsZ8toi!_|@n#7dV5#o&=vf2@=)&x$c;KS+Ii#NcGGo> zQ806MA56|nu3zVSTkC3O9O|(}3ER?qhr`nBRiNgdZT6dfU2O)nlD+dwt>bfF&Cz6Z zj+y4nFsr&R8WyIJJWDGVyfHd%LVYm`0oAz!m(*J~k0YtBl&JSk>5Y<&>Q;8tanF(; z8rks0=1T2Wk*r1$sob=jryfk7Z9`4seB~v2@7d>nF4fgH%(GZ(VN+t-z4Tg*MzC}! zG!-`JHDB{mmMK=1V$iYncjSWZgOi~_iMq36V>I4s%%4W1g%Ho`^8->xeO^Jleka7Y zZsM%$RebeX@b%$F+h%}Z=~hfHM*GmPsVb1rI@x@&Cb;Mla}ql~nF;E|)}j7BsOwu0 zDCcJow0!FttVUsKZJ%*cEfKg7*H{eO#%*ixT)bD~?)BN5B{!C4gqS*5>bXBL& zNBz`Zhfm_g1C{FA`(0`i2I6UR(01#0tp^R*YTe=H-wEd2R#nHA@{@xmU%=E}=}^N< z&GCc|-epX`_4R%l9p#^K5Lw9u_9-#-QKhYQq3TnsRZxaD8=6Vd3&u7xOdGfEqn1{Y{brj2Xu)}#Gta;i)(r(x9Q6|9#gLkmUP zV%3h8=Fn=GDp$xMl@qYfW@ReeJJCOFk_2gTcFyYFsZc(-Sk&7a1r*Sziq4HdXj(lhEwm znuyvG%h}JFQrCx3XDuPx!T;vODez0a5E>PEo9(cWZ?lu-oRo52W|53q$gBUPXHVLP zmKXz)XIP8(a#F9tM;T-1+j5%_{j^!s-**_&ikRB!vYAx4r#5$D)UWn2m=V<4tJ0;z zsvEqG;XVgjZ7M0aB=#isW2nqRmggW_6kMM{}n46QrO^-5(LtIfu5=yT#H-}*vK2m6Gu zlz*D8Y44+<0sC8vMdCRsZ=78JfV5g}?b01)!c3cb-TQ~GV4 zYpu6IAz#+emYnK8ZRKzvNoUu3st0}c7rL*74DY!YJiYVnxGk-%HUU#ZW(_SMcLyQW z+*$K$id=jQk@>Py_gE}iXrTs19&Sw9Z8LAJS1frWYK%S?hjrWoBk1h8&9=X+JA zF24%Mco^%k`TKOYCtGh(exCFFMq zllbgk6Bd^c;wB`5OVQZs<}%-{Jm1=jQ6m{&vTo>y89$n12FN-M52VwlZb8Eo4ef*t zFn8TuX1Q$yub$QJAt2Q)&qY0H5+@E$t<}J+XBK>AP%EOT`%ab~M%rZN|FiY{4ru2h zrD?I!X9pyWuzjcqmfSOc91hv2Ssvm*VqdE|yZC9h)$Y|~3BJ=ggOMmL&4HWn&(NC#S{pfS5!N=T~ z9JdwycUfZdi9Ts}=R;qgAxmI3DQ7LUI3#9&?4kQ`D&^gVMO>Gk)1AP;0Chn~rskLD zJM3CR&Dvo#-+ne<08P3~%Kqd-<{CHglkd-3teL6FtuGr(14#^-_c+PSLESf$3&(P7q< z4?PU0>8$nA=8wn;RkR2#lO4|6m@K!apH`DYZIYpTo#0PLh1s`tO`^w7q}(Z`J$i`k zUG&)Pam&?W*8I;74XgWX`nNE(`P^QC)igx5xv~tO7k{{A7q8|1KQd9LC|UQQ z!=1TG^~ZJyR4~muUD}F+GHgzchMr5{9_M3HS(}5}oZJ~Kw6KSW69 zK&9n|=tFsDZ4+-ol$N!sSvM;{vD_b6Uk#G^da|Nvhg`6dogP&KV5n&{1Pb9&=SLsl zV!YSgCAQo1_^ZLU9=-<1QMHJ9eL!l=<)hr^ILv~taZwFv*Q4!dd0l}HH@*UF{K?g> zslRWpVPDUO`M!Rbx!4dy!`GIpUNd^OU1E&e|EBP6K2%&M;-vXV0%f~u!mgH{s>>A5 zX~b8NiYD^M6HT)q00hY_1gBfBp}t KC4AwlLjV8@1<0TP literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline/bench-240x80-platoon-0.csv.gz b/docs/performance/motion-low-hanging/baseline/bench-240x80-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..a7de325f23495108804f128decab465945160633 GIT binary patch literal 6109 zcmV<37b55%iwFP!000021AUz9jvdDhg#YJR27~Tq-}p3!Y^^N;ieyNu1bO?^$5}_M znYbMwTJ0Vko@SF(#mnqJzr24r{`Kzb$9JD!k6*uk{Ph0#{m*a5?_b~j^X2&W$M>%v zjt?&%|M>8F{Q2SCx0mDn$FDEHy?*@i`S|$x_2uio-hKMz`!`&v(6Td!YUuUEbQ`1|j_{Q33EuP^-Vw-4_=|MBwvm)~AKefoC1`~2~cp>F>?iVy@oYnVO$TZksmcM|q;j1NA7L%Q>t5t>F^=yt{tb zQy%^BRPx4|buriO&h)BN=+mcm4zGI0(`{mI$c!J>^+I`f&g7Wu)nu;v{Cjh4G1qU- zbT4P;r=y(N^A#-e;hg1cGHyVK1d=5o3@v($E$s!yM0I5pcztXt~itU1Z9ol{QrOsI_RMW)^7=5)T8D|crq zA`=eMDV&6s)n-_!XV-PrLT2baDoH6w;C@poV`DEb$P#(}lRG2Pr*1^C=$+V{vTu2| z(|eBCNoUio2ZNq?j{`q)@p;3bbo zi0VxIls6uO5ET^5rz7JJg=jxVsc~_7D{mf7%SxM##RXyVyg9Y`Jk7X8<)U41E#I2p z@~pZzomJoG=Caa3L03&@R4{bgSX@A++!;x5c+NsObXEW!Xk3BupS5$ zgXs!%`duRC1!u~glDH-VMW;eE4LBm{Fhs_wJCl3MX&{=&K>?U%E_#u2r0pVSftqq- zr94MEJ0z%guHd#JS4S${2b==t=pF^xsR?+BE)es&&${#Kf;QzwOc}@)aKUX#j!dX_ zcyQDj7g|M3eTGGDCyxZ+7V+fHs|(|f1+SafDGTb@gQKY^?+5YUy@q8y!o zKojcekcoR2`1&Sz$^tufXDi{yDS{PNyGYP*tE7|UljK?#ds(k%Xd1=N;1ep^WYGl! z8;c9<*qyGj#DrX`i%rz1$M08)u|IQk`Y6)RHr};J7=6JV5laj znfwv)$fEKBY_j1yiwo@7gRrKEiLxT=2CG#}PE@`?TcJZnPC{HJT?nl7$fnRWW%16f z3+~vRv64h;f&Qf>l$xRA8oZIKu2d##wR1!jBPFail7Pmq!i$a6u?2T(`aeQ7H~c!I zXcA?WD5B6>(ot21mnIIshPNt6CyJb#L)rp6^-ft?T6J(!4b5?dYa@8NXF+i}M2D(( z0N2qlS!x8&XghGV1$XMbl7h1WQ&r@g!MW%wS)vG`gaQScp{az!dLw-;6wrtd3Yo!LGg57Kye#!Rcc)x{r`}mhr#q9-({-3h^j|R} zOq5y|zSlBNAV(%3EqN7}h_muWVc7ya^-fygHQLRUDh;NX@_hm7`2IM$zVEq3xGE%C z2}dZG#_o&@@YFkJwMwlILRX}@g)|o}8FC~^@`@^=N`*%iJWW7=TdTCz#^i!L^-fw+ zz9+S=G>i&lk5f)`q|~bZE|cU;=*ZDAsY6n%SKBeOEzr~MtVQsY5CbC0fzEh?9+RY< zBG5|dZ$J-HTBjT+1D&$(OfJyVZmcDs6rk35pXaVmE(6DTjv$8IR`uFL*iIb z$tHU00zK_UTS_sRM6>Gfl9XJ#%DH;9LW4u+YKFuld==T(GCzc*{6U zf$g&#=wK&FsALpbQ3f8BNG3>y%T2`A1$)|!x$1y6C^L$1kIWBxRytDbDT;M1IZVq7guXZM zH}|1aZ%i)O({9WqHn8iIN{}ukk=_UI;$?=({Iex znqaMV-bA2YTC{YU5LY}UbjP-kw@?b0(nOr(S0hFOZ+Djq`t%!hwN7h{w9{2do#$|@ zK0=Rl)9NSb=LRE4smo|(VMSRfcm!(jU zx>+f$Xg*Hi-Ol8KKK({r(x?(~Eikqyg@P?bQim8+rUw67cL|Y5{ZMO`#*wGg-OjNK z`t%!h^**WlxWWh%N-C8k^-zwe*wgJPoTDAVjX;Bi6v{3!u>ricpijSXm&$X=4w^}Y z1_XKOahIOBOXFXwGJwGaR2|+9f>w#YD`eY(KK({svr&vdheKh~S+w_j=8{3zpxY~2VEd&+!##fksf!#QqGbN>BMdP zy-b}H1=8eY{>&;;G9|TB=A^Xcu(p8ExN%s{=nlS>J8CxZb{A(UHT0D@QWUAeFNjOT zq7sk;XQ?#bh3*1F(xQN{{f}rV@61${mwq4t|EkHEx z6<9($hnTYV7QCjDUllKvk`e}ZB&8%jF{;`jlCjOL>X>!0&x&3hqMi(~+0kg%agM>JAKMwKa2e}d0u^o~dP0@kKG3P|@I2KEJy z=DieC!R}W}O$CUcBZOvjv=~Z=M0HX+i3k#*1VaUd6BD2|cj}}sfHd#LSd|nJS%Rw# zE{l^E0={+kXw|mL3?YMAq`bZr6F1if*%)0AY2M2*)dwEcQD&SFg_mG3I@U~qni99_ z&j}byBr4^Hh?JgoA7caeeL zQnlSl7et!(qHNGXoDf;1OT!sF+85FXs&-w#-Bi!-1%rxjh8)tsm1@-)V$ki~AW~lt$#2Z2x0dvoJ*0J$3J#;j zfK3Mzoi+$VC$(sKI}Js`7r|KO?xYJMd3j6~8ol8tN@`TUg>qZ@n55rzm!dWoRC$!3 zq?SOJ8X}c$8$KNiBKf_iIEN#e%Hg>AFR9BocpwL5ld_kiOP#>FO0ROvQg_HO7C7>I zPtixYKxahvV8&FD4tP>Rhz6rW6m!4)s%t?R07yOJi*SC>os zp${~~tWldaS|<(thMw1#0>h2L1&4e*<_aq8hv2&fn3sSd+DNk$WST{f#=!{begq5r zqBPmS!B{ZJ?_}m;CJE~r-6p?!{PYisca|n-^wD9+6v9!}JBmpeymRUQ@F)MZlkw&I z>;HU8i;`l#M=2CXWJW9eQO3}grhS^(Cy=%mE7n2tuJ2fE^v4kwiv!*uvs+hoFiA>5 zm}N+Doyp+_;XtCcRsaiP3nPbZLuic0Ev^<7B&TK6zJ9E#t3(m5YqUP1TUyc7un9E- z_=xAzt~?s^5vV^bD$zS-w8T0~7^z-VVoXl>2<__A8YD>PuTzuB!6LVfMSmpY&lV*H zlwiF%O^xV!(b-RW?Kx;7&^yiK$Yh2DAn7jK#^QVe&f--rHsIPPg?v~f9Cd3$8anFE z9^IN@bm6*khJB5?1J;=zz`B@JxzSEqlUY@O+&%-&GvOinz8V-6WUWFu(pBY^-cdSu z7d*2(7-Y3s>5xPVGdjU>mz6wED%wvmMHIV*Syk#W!_y^Gu-R5$PJ58$>RkO#$r1Cr zHz7Y`#95rQk(xXhi%SL3B&TyKu%dUNKet;V^`Q$^t0p+B2>8VG(xUm5Av>j}U2~g4 z)1NZjq6_O$idx+cZ|742t?Ah$AeC-3MBm0J^O_jzHWafJWgw}^Sdhk*-f=R*rr$p{ z8ff;1+FPu)8DnU)@=Ot~ViOBlSIdQg)PhlaSLeNEqQxP_TXwUQIUd4xv05A020hby z3Juoco>>v`nCx6~8rOIDdrJ26A#JM-=6q=Q#i|LRq?$vkvMy4t&Oe^4HAQ2Ua%Ivr zmpbdQIfH5%wk^!2KgyNGYGy^G#RyzAgw2?#IOI@h+tNxlXLMBlDjifF5e8z2T`S(7 zmDvxgQgJF7Jm!FdtvQfK@RX?(D}4?zn(j44pO^&}n)I>4BSE&anjb~za#qP4DFq^w z3y!9d>J)|s`cGE%F`9BK;Di2eRH1~{6ajBy*vq5dUaiWL!t|)}*`bT-A%ka<2ZbJ* zP(tiYvM9;enqymlZ5=7Kja7TJ7Jj-{v8H1T%`n-_C}*Wi5KBwnDk>)N70sQfLk0OX zkDTIoW3@iID9gQO#*GFxk*`tu4driCC7!P8msJ+Nqw2+2`kE|pC4tD!>a$_AS{1xq z`6?@--IyxV`OD0WqF^JDd)z$Iklq+g#iV%O-D`jJ#ulrI4Z0qPDBz1V2%!XZnp{rB z#+-t@ZLzkB(pI^RuBmlbiu!nT0e@H(ZF?+~041Hq9u&~!GoMLvVYO;@Q^v=fs_=izxd&LW~WupJk zbFwX=&T^i%~a*hWR>aw4*#0 zZ(E^bB-Kr8pj>k{xLGIU6I4mj9U`q8)b&xsQ9rcU>}FgDp?c7cu2{uCn<&6zz81AB z&EOd0vR=Fkq;-k9K5962cxn)+rK>)q8OZ_*oo0&uI-;kuQ!#fpE)4W8791!tb5h|Lh>pt$W?`-_;YlYXD7<-W}sf9(C;PFk;? zLZ`=dwFWsUOI;K9)~h~FBNp9^(u0Y?PUYwFTyI!`xYt44g9juGh_Nd-a2-ahDbX>bVJ(dBD7B}@NM9XtIY#rCwRt>1uJME%( z-L1Aq@y1Dc$bd%C)qI>GLRCSe*xZV42xIs(AuMT!P)vE-d(A(sS3eq)5_#u^;W}CM zx4ETk@l2dqiEb|~QhHf2&Wx~QCvkhH^|5@sx;L&YUY25GjBPkH!tf@YLTQ|0rBv>< z7~IB)Sg5iay66A1W4%I>*yLgnfxz3QEUaEL?44$89=gTGCw&$P2Yk&U&^D0zW0icp zQ=aFFgDZ^mB{F(_f_8?m3;GHmx5WO2vcZNV=BfVk>rp z#Fu-GLOLFt=`;3L=;h@(V#p>+-`?qbJQ=VWHMosEWC1=P(XL0XSgc6#9E1wj9FJMm zs~-V?2s5|BY~8jl4{D2r*m#nvu);vmsGF_PI1lM*Y+6v9r^1!epTMZ<_gx&>^Er>z zD0S1-3Sh1L8e6g~)|oz)t0UU3ILfhK;n6IX#@}hAb>+G|o0ANKQTT}k6%XA@%v$pl zyKcUt!62o0pbIP=8l3(kk zv(N28?eTEZPtc&eh^NSurJ-oq4?&u8Kt(G?Tfd&3!{}tSR50zk!9`y8u1kI*@Ac#i zVR9mDS#0lkx8}H8rf;!Hl1k`PAPotWck8;@o{yTX36luvez>yL>)X>i>}w0B?0RrW z3B#3Ve5^|VCX|J{;dfq_uk(Y~;-I>#NeeQE6r^_~ckp=Y^^DT>d>bX3YUFrEDI=72 zHpk4xxKAw(TjOv;qHwTI& z_C}%yYwTn9cw(t2x{^X0;Vbt?5GlE~LFA7oK$jlftf<3i`cUPJXwk*f<*n-#%oJ-x zG^E{4_( z?EIuO#SVhN^VvXnNGS!X%XO8>IHt4-XV0J*<$EC z-#oS^>*I;@^_03px=YmBQG$7FQ&~K31{$%OBX#Yu5k3mNEfwdxzJ0FGN9xxs@fOcq z@Q7kb*XYR@yYRqC{Kf!Twr~P#UefcjD8k;}WPkk5fS&^PTHl(nrf*mCk#v-v9*(Z2 zMx`-`wC$C4sI%v>vp62V6k)x{F#^KFVu{Xf0RSiwEjHgxG&J?|XxTTO4xK|K&CcR{ z{MLunB0HrlB2(Sxu*gc9@wg^|F6Dp9f~?>GrKIKfdV5BH{923k9*y}rzxhF;t3)p& j9y(8?1=G8EJ-eiP29|_4dMoKo|Hpp;q|`vVS402+b^Y>d literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline/bench-240x80-platoon-1.csv.gz b/docs/performance/motion-low-hanging/baseline/bench-240x80-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..dcf59b478baa3636a13a817b5de3efd894b334a1 GIT binary patch literal 6046 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 Y2eTofCkS#wG}Hd|KO)RJSt&#S01V0TT>t<8 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline/bench-240x80-platoon-2.csv.gz b/docs/performance/motion-low-hanging/baseline/bench-240x80-platoon-2.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..430135c70cb0f49a2d63ec510b7e185f6ada08d8 GIT binary patch literal 6046 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 YwW>J?-0&!5=J?lt0gj>f4J$+d0MjzPApigX literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline/bench-320x100-muster-0.csv.gz b/docs/performance/motion-low-hanging/baseline/bench-320x100-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..25e01f601e97fe17d4edc13e752e4f9c96a58499 GIT binary patch literal 6258 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline/bench-320x100-muster-2.csv.gz b/docs/performance/motion-low-hanging/baseline/bench-320x100-muster-2.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..4b7c131b6a4179f24bee442653d9c8c5a2a1dfa0 GIT binary patch literal 6254 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 YQQCzsM(>^XknKPJ2eBEjC)Y#(0Cra%y8r+H literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline/bench-320x100-platoon-0.csv.gz b/docs/performance/motion-low-hanging/baseline/bench-320x100-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..f39cc42b310d2b43585094888e910646a18ed75b GIT binary patch literal 6261 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline/bench-320x100-platoon-1.csv.gz b/docs/performance/motion-low-hanging/baseline/bench-320x100-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..bb9e9de2ab21f9847db74ce4af386034d92a3603 GIT binary patch literal 6259 zcmV-(7>ws1iwFP!000021AUz9k`y_zg#Yiel%*-8(Cul)n4xFDjD<01cI~|V`8<*x zRGE$V0o_z}MM{cr_qeG4{pJ13<3I1deth@&_3``nkDuN@{`~vf~Nh`Q!EDm(P!npI=|T{^#AN-@bp-8~=KF)mLA>zyAF_ zzWVy|?fkFTFR$mj-hce_&)@$3`sMc*efP(Qcc1@ydH>rVFP}brd%XMn?c;C1|KIBi zANKX*>&tI{yyL(B_4~``KR!JE{`Btk3nst5e0tGC*cV?d*?CC9xdtnksdYG!$;L;@cv@6>D{BH;lDO%t4S;TSxlPw;e9-;7C#0r z@y~RB)HeLcwLV&|`YGO!z4LKCr$5X~N%_|%^J+4;*7{GAW%hJ9${^e&Tw zRkp!H^Nm?=zc%Ts$@;vpWwy-z#m3H~*Uo#7+F7MGx{is-!RlqQ_x#AcRBdeaH0Q5P z*41Qt-dJbZN9DP5YJQk;2!lo8J{%W&G9R61s>Z^a6;?UioAC`NWWP4qR+Hnhu_<*H zk##!b=*Hu*zn-@{Pn2Kqs%5t?+8nI(2Y$jLE~Wx4j>6gq@{n zo#JiYJ@amFR~X6{7Au4JlzUnk0}8>%6VISyY|t4$+W?8+O8BNnJcGa-QSl9>*os5> zN@JtoGxA&QC4?=TpdI=ES|bP_%{k|+y&V!Jb=HBSrIL4&B(FG>FFaPN)>VRx!GMy4 zeN&`@uM$K+J-{T^#wI#~ZFhb?CysN2LwUuad?B&|ZyqJ6vGUno6rUw&3i$7SlSx0dUKU)Dog3Z(=2{ zI8?4wR=`&+06gMVZCis^#={#pB=J=}A5G$Gq{=#b74~JzEp2cpuQ*h$Tvl-rAJS7U zsxJRXA>=Oz3U@>ybUNPxLAg(jZi8K6!6jde;ZO++>Ul}j!=zg=;tT(}J8K=lY_ zhVYdImQ#14D%o49X`Y3}@rJB*0{b{I5DFk|Y_2#|u3T0V(nIv9)TnmF75Y-xXPhtV zYbI|eR)%5O+0({(X7t5oon^%#zouhI=3_{MjjkX`I?t{UnN`GU;kStB0LO@D(hF=7 zwj1m#D-QXU%epeWB*tS8b8O4ep%EYtZGsqULkc^vkJa+bC2*#7-{fOu#Ua0OnNq)@ z6btSeI!Lyd7plWEWPIcea9onS>^Q6^83Sh$e!a1|;*ei6vJ8Jh`qG*toN~!=O!3M9 z`{2s(+nHi-tIiYN*dGO~py=}Q~__M4yaFC(D4E!m)}ZFc9Nt>bX7M&P4EU#;^FX~&a;-f(|x|; zP`z+jRc?*j%SC#WG0^duKVb~>@h9b#pO&#*7eXHYr#i4rPGV&hQX(~nW z+2ml4&_}qA9;QeSA+kj@hTsKoqvL zs_!C&w(M9?mXC_!chPe?$z5-FZkQpDX-9*5UlsHz0R_cf-BO?)i7a$jG zlII{uo3eg!T%OZ+^+jKys9osH;0WL?J`?0z~q&!+;Wz&~5( zUBReb2+i0w#DD^&>3EZZ;b=|exb8LNfQxf*S>) zQV|d;HGM%3DYK2>k3KjLTgr8-kA;}vBY}H3pqjQ?GV34Xr=J-OjbUX z|2OGugr{x5x2~YnFT`dbBMF0W26+cGWU-7ACj%MK6Ofr8qE}^J>J#vO7vq^(G`p=+&6-^uE5kU-3Tg8i} z3RNcVt|>YNQj9v+v5TA)oBB0bBM(zwN5wy~m7z#Pc=n>jbk%kos}1K?rYThcT}4ku zsJ%Pa6`T5n;()=y|3-Pi5ZTG(O{AjgA1TSeaRy1$(1ADoDBR}#Y%=wo)fJoiHDLn~ zg+M`Kk}LgGgy}5#9j4L|`LfDYBri!Q;i~PB64xCzwH2GjwfyMn4uE-hlX4d6ZLBH@ z?NMxCSwlsoF3?g1hp^!=u-f`gaJLnk#x-ecN)VN`#x-rL>{F!t!Rb?)Td1J~Ab0td5>)ZSloo_}s&x*O(`U)M9bU0% z_^nV@RNn4C6mX8tggO;qoZqw29ZYV$-;#ZUlX_16V@F zh^fXa+D3{ZT-3)>b|;Ym4(B4Vuj(swkavxOwqnz`CT~N&qGpTf_)?0jCUYvJzymfK z(h{P;E*z00Wn+7k9bn~+)fJn@HGL!LRQ{&5k{dTQ2T2i!MNvcXiV!BG$T%>h+JGad z)WyKRb_MOWV$--LaFAC$JHZ1fqc(wb6!Oy(n*5ZdewKT1TKUMRQI2FQw(+`R)4VX9 zvu&AlDYP)sB}@ICuXsTmPgaexIELyf$yAmiYL!L8$vXkwR&1IVrgKMuk&G6#EtLt& zjgaZmvr5xBJgl}Ktms-R(nc+VCOqEsEmv%s*ODZ{)T2~|Isu2}dLFeMZ(W5Jz%QBy zO3Z7NC(z{jI48h2TB5JmG_Q$V^QsD=hl0XLpah9iq)#3YDHRUNk zIiRoDG%rl&C_VTUh+{8_pb%@Q1RiIwcENDUfh$d~W0|CBsxSK>TWZ#dLBLyoG11vId)Qe%}< z9#c&OsfnS;sd?^Lrnmbdf130JsYRQq<2b>U77Z^?d^#z!6dAg)C^19Y%&f;EuJQ)# zd%vILY7z$wCXqrQDGZ7sqzQ!N(G9QdhgKYDbIw6nNXEKb<+%InlSyM)JVsZ~rG*NW zHgQAFt6hY{qH?B=o&A}-rO1cVZj52x19LsgKsL2^QvT5^)iPDoohpK=vsd~75^_Xp z?pL*-aW-InGsy4;1}#P*VUlpw7IHaZUJH%R04EQXkxZDJR|&JkcZT7*dQ_?JVsqFX za96WM;$EfIk}PIXq*dhXQ^m++qGG~Ujo}))oQ*jXu(F$>82QdF>#3$Wi3U?bY=P@h zwX4w|8d2|vRd)fshH;8li-KVtWw*)YPNh#~)v1jhmgmFI8pL2ron(|?B2n)`2zAy{ zv`Bi-3g(0p?^f$~-LP(QjdVgyFVMFO0=p(lgbpYPVIvW$#80eks{Dd}>OkfFYTpn^ z>uN#!!_*!S*sC|gYELy(T)Mb(Oy$hB&@1iX2*U7y(&{FBM!PG*Wwjmu0GCwg;V7Gh z)R!mfSn~YN1^-4y+%iq%ZBb}PlG+JZdc)}7gT zPi$7R8XeIr1*nc@@tBp7Hf0Ce5Ap*?B8y|mDs1o=7Maa%!fU>f#Vuxy)bx~vP??&Z zT5Zg3lw8_5(-C=lQ$mI7As><;$PBHtF>Cjfbu}AVTC7&`&qD7jS_>?wc^xE*oz*mXOQ!_&Y36fHpAY`>_kFjCVjrP79GMj#{y!d&U~n|W42T=@<@ za}-#1XmC&^zN*GtLuV-M7aMP+%xw3X+F~{eh#F7KMTe}asfQ!sr`iY5M)I@^9DQnr z2idJM2)R|>1yH{i5Erwa!Jwvo`IILsPdm5N2p7=FJo4qJ4Fnj2pLImQr=4({<6bRY z%!0FLB4snH)fmbxy0~?~gb)OtoJnS7R#ScC393x!Xv@y*yqAU-v)MHbQ095I(VW(h zo#vED6AushS56l%@+H{aqG*OQ?#9m28-?)2E~E$1v}mNB;|Vdrqxr)j8BRLerur=6 zg2)G26X6!yw>?Sc?`8khZl203Z{;EnhZ<_t&kZm_9 zp7OoP@zXB6n$Lml1mj0PegrC8bYLCmXgYrl`l@TLS)u@pgmT?3x7<5A%W{!v^=w`Z zg?`W2PzMTl;ERuBo>x?nzUV8X>1N1ke6U zpJ#Pf&Ox-SQ8kT?hRD&l%Wh~hz0s-rX%>y|(PGG^kux%zs<~MtI8mOXOb{uF@G*6@ z_1Oxg^|}VIHQVk@$)9G?HK2cqfki?_)k!=^8T^DD6tSACo>Bf0XltlRBQYFF-?~)4 zw_kr+ZB?Vyg2$v@XpA;+w8CQeT}>sG;51pNVzg3BpV8(*O>gI%$Gy?Ktd$=>N{;zj z5-d&p<3)xb`q|xr&mSXqkPWVu`2ASoMgwpwB>AuasqYo z)p`flwo~19ACp+l)rJQkWMrXKbm+#a9(PyiO?j&RKNMbRDvqhNka?b6S*s)?#Dm2ys@=mlj$s;Jf&-%zUQ1@{wZciXX#J&ktzE!{I!1}w(nrCQG$2|Q^X zQ?RVUm70bYW9vh=QDVN)m5lGK`hCb}vD!4mtxn`C`FAtI~Jr@fO3_YTxM!k85yR;%DxW_-Vk~>%AbP z%CmAV-F}FI)nS_S$u?qIRhXqYF&j~3RF0=dg8;Tx`+Y?1sq%$D6PcONAeW#!jo@L0 zbRKU4tO6zaOsXklT{|JIh4yw<$9)*@DX$ecMBj}3Qmmt;HM~hp*#AxAjj-x5rN)D5 zO08@s=%2>C{mON&G3TkG54(FrDpjJx&{8{Rt5i}j4R5ek)f?-SmWAuKcLnkr1D0## zG^pjgLn7T6JDfD&J%tj=X@_nAsX7yvUwBR91^}_`eE4b9yNtUJ*O==>wVZH~dt7}} zqQQ>On6ZqaS0CXA7Idhl?e@+|z7NelVUwoX)4A4^&pNy!=bTV3Q2>hzH6tsppGBao z+Klf|;(6TrUf0wHMk0+f_n3tulDh6?;by$hG$_(~NLbUIk*FJGDa)NzzYjvM*woIh zC!aE+39O4Xu|!QhBB9iBII&4%1w~Rz2_c$dyVf^GzSsH}PUE_(Ads5Tj*Z#Ns&N$4 zAa*<53m;aG7T1-ClHl1z&hyZBzU{E)KVl*Tyq!HFCu+C-M{7&`YG=Ggr^zDOGfgS( ztoHjD|B4bxu4|`N!G)?&RaI)u(nl}q9I`jHdDIftoJiK>)i!d*{ldai;+*x(V83@v_cQ>W{a&8eZ6@8g zQB_1hN!- zjcajho%H;*64`tFT_RJZc*Bs(fS>YNZMI#_X~ilH<7xz?$@aa zoKCAEckrsl2&66}_qf5J-d7=G&T*l<+4fxf{i@?dtx2hyYY-&H_LbFZ)U^q@E6<7BR5b!OrY2-e!%d<*C4DWVtCCW-V8;C*OWPfu z_v@>RRkd3~?t+am+$w~W$k%W>k}~d%#b)%Rd<2NHbc(2*Re$56?vppAn8wx`;@V+Y z4R1<;4$(Lb91ch)GnMc4TDRWxG!kyNCZ4W~3W9hZKku-PU_Mvby3Q6e{zW~Co|I>% z*`#B;_g$CNo`%Bh#&jCIlr%(Nofn(r$9up2ot{ zo#~pU#dLR8L(Cpsp1>xs{%BL#Rf>NhC6$a>s^YBeXYTE3Fg)Elcr}KxQ_Sz4L(HVD zRXz-xYqZM;UKLlgJ@OG1EL792yU{B1H-2rv6Z#VvF{^CjysR?Ahij1z);(d>{Zw9T z(WM+32vtdU?mA2MG#sAp{X1Qr>T#)l#Grh2NXeEa{-i`D2CqLA9 z#jYAr7t(0Dr%@z+$>d5C497{P*+6 z*H4d6FQ5PT^!oVo(}%xa9v?q{fBEh8^S7^$&tG3(zW?XLmtX$=i#Pu9^2%4={(k-Q z@A&Hb%U|cWUcbGb@A~-p_uqf{^ZU17U-;i|pFVv368`TE!ZwG57~Xxo{m|yu-2+Qa&O6pOwQEP&rO!qWW8+cuyJTX56iV5qa;>YWU{82 zj#^~0jl)Zr99m@`dT9N}%=^zx*41RYY;2uFi_pI5RF9d4-g}g;jUCyKY~|5<(Hpd| z<~r%@rLnP1k2HU7vaKfjWn-rnm$hTDv3iw_Z8o*aG7qgt8>^khWVfPKj#|6k-E~6t zbCZ2FIj$Q!%Q3V#OFGn+IvcA6>MXUfre~?W>!&bTOs@|4PsQZ)jmP?Ga$Yvpw1_fv zIy%6k6m8u&`rru7kE%y##pPCdLvN)LRE~eMS(~#Qi%Cn*8(T_OP-MkrHd8RvbCv9; z;;|$SRe?&Vb^g|O%=I6))W*+E&edeTLV>)a0tHr+Of=5Y@K}@kjFBJJUC}I$?Nf1C z(lmY3yb3xtP_V*JKtWk;j(&8r(`L`%KV2_W1%jf+Wm7(F&dNF`QFGS=xR=p3Hdp+y zdiB|9M`N?}F~`I!0Rx$`Dcn&+R-jL(YF>;(YT7A5Ua7Y6Sz7@}&-%2tMIfl<%{LDc zf@({fwzzW6jnGse33S*_$EFXSa5Q1$#^#DZdfI2N70@0vyta=+AQR__*SZ0?I?pi$ zNriQG*(~};CoxlQ8?Ut$f|LiI-8NONtFRkQ#ys|RV5(%TuhxeabPRyj`N2}t=z90e zrTWI^ib463!W5n5Anat*jx+w0xtug2Fw)0&@{D`9jh?;^Yx*!jzm<*66@>CNhv}%a z90FcxvnH~XvW`C*emoWY0>NYQ^UmLTzu{2RN8ZKCibDC4#N>;F2$10V>}lb*zrHKYLonOR?_t@J34HD8Frr2qng|oMyu-;Ym^Ev4_H#n469LkqOrg$6rXl!Ny zuX3l{bduv;dAliRHgLETpDySqy@#WTq@~Sy<`swXHIucj5aDHQmSRG0hyE!(rvR!6 z)thWPpy9%SM-jLyc`65a-o#2?aj0BV8MH2g35CQwBbDhnl*(K=ZKhafB7jE{H7nl0 zzATqZ8yw0j4wXwTllPs+W{P#8vEf4_nU+^0^F6xo7VO8Sd}tIvIGd*(Cgc@|O1a`~ z0}vGoRji=91ttgzsvtnNvV2Gf%tQIqmWxnyz{-aECa>fbhf2Nft>V*xwwA;yWgKqp z5i2>EO4l1&&#W_P$3&hK&6!}?zuWbc9n6;&Tm&7D%V^_I_Ww;)8`&O*%Ltnyj=uBXDo~tO(K7e%sS^B0#iY#0BK`$ z#i4S|WgV6W^%$nT)u$>}#34!5I!|y&=jozidc!PG-rV)3Jj&Rtv#dB&uenSCtFVM8 zh{7k2+DI5o&OR}sHOOs_T&DNW(Qve^Z*Q=#tTeImyd01t~gY$xy;4E9NyPlaY&Unjsgu*MW#(wpeo;p^0CfDIe{@9 zK+b)KTlkDleX za%RP+2(N4NwecM~*f~$p@Ez}~D-N|wE>rr{);X+73ly>mLU_}|(QFhMI#22tun+gH zO@x?A+_yZwt~k^#xvc8Q#Gz3Ka9|N5t+VJ;yRx$)t47YI3RDpTy>DnP$V0wWOjaCf zms}?I!-xFj3F7GBkSWh7RKzhAiYj&G1p?&B@>QD&a&_o)_$F5BibL&^%R1a7(qk7O zn{Z8dyy(3Ac(U#!48ySzi=ffi6lbcT z*W}&at~k^$xlFiiM`syI8$yf`s+%BB^h-qqJV6I8J_e13ktzQS5?(5E!-wjML;aG= zCiD*WNa-$;8M;Z-5*9@R2~_`fgVRzo>NG>pnX~TH#kvAfza%qDH6v{x#THf8IjSUs z=s`dPK_#rBtIBGD`OX>@dY)U?U7@I7(wQY{vk(o3ic!TKeiU>>No2(7_Ax@Z$?_nl zY(hki9J&e8wt`W=Bs4QBe8oJqtU@P&B6Is#?al6r968MzfT{@!;w`3g*aNp4D8 z0$4*p(4oo2M`X8&C^cPvCTfVhQI!`&<^>`;VRR(Ub?hQ%g(mM;tvu6gXhe<(nx9%{ zh~+6mCPb3@MAld2bQCHjE1;tweeTY6#U{TbxU5(or#3z4K+tY!Cm1WmDNY9{L5WOO z<42X*h%c&m-&tL;$;Y+FGeqlAg5*s~>StXlhtXP{f=wsx+H+M*vg&97`0hljX5|7<9h4jx3_)Rb9*ZJ+XZ?c(_8r~sD>jX5$tG}u>k5Zm zK8#4OwPvIrp<^e~0{w&U>NFA!iiYYub85TB%Zg3oCP0eB9uvi?N0}NZF#<(r^js7x zdM-9qFpPj@LP$1AOWy79icRBMwrPu1e&#?0llfR{z`N3oLTQ4-R6IcCM91$1Hmrx$ zlWeT6*fiQ*aA+rcab)y7&b7+#Yo2fnKYbWFUPh*S*^tkbeejX5`BtIUIb>Y4xY5qFBD|<*J&;tC*h1Zs)8Zqeg&3*Q zc^j`QHqC1Rr=aXAeo>eEjIIFZiuk0$l)eEz>}TRl#`hJqG!thnJNn&MY?@a&Ql*+| zHu7nqCs9I2Z?GP30xML*P6M?Bi)5`H(bJ3Y?@a|a?lK=|6()`W>5xk3mUWtzVr+`%@H;gAcnJ% zUo8uWH)4RV*fg)Aq(dQSa*a+EnFIVWDt@M|*5fq6u*to=M{l8ZeV~%a*5nFI^QuWY znOr!hPZ3l^S$HH$Kjj3Iafk?cN~Nth(?ie%Ar^7kz`n1bG_Q)}KpsRR?;@ancJvfi z$hzqG;CvEn(3u!0J1TDQwAMF4>OTO<{uvMX_V?@mqEtCsv8YOsu38F{G`flwA{Zul z(+bmGB0)ZMs_^eTcUi{!eUXbvrzlrl`atva9A4XL^o(Tn5cHt%gqmOR>6vNgsmjP3 zuy?YndbTko`CU9B>Qvf7O1uc&uL4Je%!f&LayQM-?SG#(wZh=b6N{!`vB_Z^b7 z`ti(f%F;kGL|9SOhQ#aiRDtBTIRyAhe^e1Gf|{wCP56v{XN2o=AqWZ0Hzp3odAL1B zMHFY>Mji6}9B1XG`d=7|o~<;n#_Did^U zsy}deEq!;mM}$t48UxoA#8L?04kf^eAj%Zid)SZjhYs+l{|4pQ(e6P=cnAH)fbVw3iRq*5 zo2=03Bn64EXVdzlH8v34prSoh)N*AGqmic7Z_K_UGc9ISly-Dm{Ir~cU5n9LCXd>w zM-)Vv9Ey(;k`SA+zoxkxo|*lwsV!zj$+EIKIs}n4W1_b(FFBRz^gx7QdYd1TBhWpf z!BJFOzT|ivSR%oEnJZ=LNQvl6_u`+YU2g{k?`+@i7K;ure3Bwe8?v^|5a_M5X z)%=eubCxAEM1~MZ1*lMBu5e3x6RK@RDxqyIikt&8lGy8Zz2)B1S?!Y2qhl6y{G7HkDrIq( z5wi=?8boMf2#_JBgj}E+e%CUyRPX((A9k4?QJpd1OLQBe*&E3}RoXhjXsXQ~XhtkG zJq`4gd6(VPW_qVp_rvT=WyGiln#U2NGvn+z>)=)RC@~FKNW8-Z+=}*?px_?B)@;9b zC4ZO|s^=K@HDa`ev>!t8V0yk)Dw-DVon?l0T`ke0o!eP%J@dW)x>yx)I%tur6hasN z-|*(FW^tmuQ3lZ@WCRDaB1Nk@@$I1VxObX=Sd~+XKQJw%7>Uw^94N-2{5oPZwj)q5 z!ZeX9s*g}HRh8_>BQ?gYr~bogD=L|t%w|=&kD63FoZxN@DzrkW7fC_kG-AA*2}|X{ z?ckKzJJSP;Rpf}CscRIY(@)i)QHJY0>CYFzr2G#Q!S&YFP!u95)l*QVThC@iC!RBMfSip*${p><+(7diIMJkw$o zXNiGB`f@G03o+B!7@TE}s4?A;V-Sz~3QSH@?ae(BKTUYoTe-*7xL4ZesB9EIH5%;A zm2U_sgquz#(w1YjFp-y4`|i)x?=xyYtX9*p5h+2$?YtbNsL&GS)7&6H`eT(0=rU2G zD5AuaKWyW5+^6x@waRH?EO_XE#f!q5x_EzdSipPby3XwYpEbtRMA{frE87wJr#bI> z&2>Us5D{lV0<)+vPl^^=Zi`NLDq%H-02|F=F`u!$ERf%suw2*51f|VWE6L*&q$-)T zFiyqz>JZamhGZ~#DF%XmAt1J$4?oR%mwTnhFb0=vl)7UUgn3m!NJ}~(1q=el?HhrV z_C~c}P#PC8+gZ)`so7O2iOH#PHe&mTI?o|1TJS;j+~e9wC@Bo{%#vuzisIBAN<7bd z-=s|lAsNCta^fj%PJFn=AgPP`w*V^}iGpVuckyy&3}9!q-Y20~!D608l}ZA7E8)X4 zu4MG41JM_)o|gaz3Yn~;zRGIdUa@&^=6hYM0%pX$9ZKkU#Gnq1>3)l&eu$* zEX~ay2KtqAxOqcgAm*WSk9ipVMBMrjO-J-Vwu0MfzjvALX#zagyAPie?s4TN(5D6~ z7uOMIB+)Wb8*AletP))ONB*(Jrl%S3e3vy5nn3^hHh5jm26sy&UU?TcS|`f&n^hI{ z&{QS5UF1AXf#;j5Nr~!oBeV;rtX4x2l5+{9aAs75=!J7BM-0NagEOt~#)hrDb1&{G z=bSUjl&l9=h@xGnL>iotNkoIxlc<8tyFkD^6DXF?@ci(jWOQ8}Ax z=v}-%O^2sjP3Qb}3ldp=yM`RsS{nr{*Xr@+sWcFiH!&1B66FL_;@hI`X+S*PQk@() zN{qP7AHq@(iCnSTgdb6RoL9{l4%D%09n9WlrG}l=asQncOS=U~ETlT4Y;FNg^kgg2 z;*8MY^8MKX=b2_)6ck_X+t8W!U+%F&BFM)Srm*usW&wXw++aIz0=4|s?r*)H!=ljV RI#Q|s`hV;k$1r0>008UpB}M=M literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline/bench-metadata.json b/docs/performance/motion-low-hanging/baseline/bench-metadata.json new file mode 100644 index 000000000..09ff4f713 --- /dev/null +++ b/docs/performance/motion-low-hanging/baseline/bench-metadata.json @@ -0,0 +1,304 @@ +{ + "binary": "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "sha256": "6af8b0db3173a9fadd6393edfdd3b30e8dbf166dd8abf998d21598f81e3bfdc4", + "mode": "bench", + "runs": [ + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-240x80-muster-0.csv", + "--muster", + "--bench", + "--size", + "240x80" + ], + "size": "240x80", + "muster": true, + "repeat": 0, + "wall_seconds": 2.8588597569978447 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-240x80-muster-2.csv", + "--muster", + "--bench", + "--size", + "240x80" + ], + "size": "240x80", + "muster": true, + "repeat": 2, + "wall_seconds": 3.0044309479999356 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-120x40-muster-1.csv", + "--muster", + "--bench", + "--size", + "120x40" + ], + "size": "120x40", + "muster": true, + "repeat": 1, + "wall_seconds": 0.7445843550012796 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-120x40-platoon-0.csv", + "--bench", + "--size", + "120x40" + ], + "size": "120x40", + "muster": false, + "repeat": 0, + "wall_seconds": 0.7359984129980148 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-240x80-muster-1.csv", + "--muster", + "--bench", + "--size", + "240x80" + ], + "size": "240x80", + "muster": true, + "repeat": 1, + "wall_seconds": 3.004389006000565 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-120x40-muster-2.csv", + "--muster", + "--bench", + "--size", + "120x40" + ], + "size": "120x40", + "muster": true, + "repeat": 2, + "wall_seconds": 0.7501484660024289 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-320x100-muster-0.csv", + "--muster", + "--bench", + "--size", + "320x100" + ], + "size": "320x100", + "muster": true, + "repeat": 0, + "wall_seconds": 4.780098974999419 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-240x80-platoon-0.csv", + "--bench", + "--size", + "240x80" + ], + "size": "240x80", + "muster": false, + "repeat": 0, + "wall_seconds": 3.227618201999576 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-120x40-platoon-1.csv", + "--bench", + "--size", + "120x40" + ], + "size": "120x40", + "muster": false, + "repeat": 1, + "wall_seconds": 0.8223930050007766 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-320x100-platoon-1.csv", + "--bench", + "--size", + "320x100" + ], + "size": "320x100", + "muster": false, + "repeat": 1, + "wall_seconds": 5.15867261600215 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-240x80-platoon-1.csv", + "--bench", + "--size", + "240x80" + ], + "size": "240x80", + "muster": false, + "repeat": 1, + "wall_seconds": 2.751825829000154 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-120x40-muster-0.csv", + "--muster", + "--bench", + "--size", + "120x40" + ], + "size": "120x40", + "muster": true, + "repeat": 0, + "wall_seconds": 0.6984067340017646 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-240x80-platoon-2.csv", + "--bench", + "--size", + "240x80" + ], + "size": "240x80", + "muster": false, + "repeat": 2, + "wall_seconds": 2.9026975889973983 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-320x100-muster-2.csv", + "--muster", + "--bench", + "--size", + "320x100" + ], + "size": "320x100", + "muster": true, + "repeat": 2, + "wall_seconds": 4.930054436001228 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-120x40-platoon-2.csv", + "--bench", + "--size", + "120x40" + ], + "size": "120x40", + "muster": false, + "repeat": 2, + "wall_seconds": 0.6965535589988576 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-320x100-muster-1.csv", + "--muster", + "--bench", + "--size", + "320x100" + ], + "size": "320x100", + "muster": true, + "repeat": 1, + "wall_seconds": 5.26664561600046 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-320x100-platoon-0.csv", + "--bench", + "--size", + "320x100" + ], + "size": "320x100", + "muster": false, + "repeat": 0, + "wall_seconds": 4.845987250999315 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/baseline/bench-320x100-platoon-2.csv", + "--bench", + "--size", + "320x100" + ], + "size": "320x100", + "muster": false, + "repeat": 2, + "wall_seconds": 4.58768555700226 + } + ] +} diff --git a/docs/performance/motion-low-hanging/baseline/live-120x40-muster-0.csv.gz b/docs/performance/motion-low-hanging/baseline/live-120x40-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..8499b3fb3c2a96e83c21e9600f6bf6586ce5aa47 GIT binary patch literal 4573 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 HJvRUV5nlr8 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline/live-120x40-muster-1.csv.gz b/docs/performance/motion-low-hanging/baseline/live-120x40-muster-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..118e570556b5f3ba9f92a15c91698bab0119e690 GIT binary patch literal 4569 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 GHvj;xg(y(~ literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline/live-240x80-muster-0.csv.gz b/docs/performance/motion-low-hanging/baseline/live-240x80-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..0a6277031f87718b56a3ca38997a14e9448ba592 GIT binary patch literal 4694 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 Y--LjY?%;vj!ZpwQe>HcCxi>ff0HXO+IRF3v literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/baseline/live-240x80-muster-1.csv.gz b/docs/performance/motion-low-hanging/baseline/live-240x80-muster-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..f17d152e9320ded0fa45a5e0b3131ed0d82a022f GIT binary patch literal 4701 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�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 L|0_`SRzLs%*!|?8 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/candidate/bench-120x40-platoon-1.csv.gz b/docs/performance/motion-low-hanging/candidate/bench-120x40-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..d069b0cde847df82a3411d125e68ff81c27e31b4 GIT binary patch literal 5486 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 kASgnkzD8egsL$>xbjR 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℘~b@hk4Hqc@nGJQ|hPrKUJXLR%I0lK+afS@AMnDfAe9LmpsWAWsKK! i!n?12L)IG~^UlBSJ;egF=*$75fBiqHl0>j^LjV8=JkXv1 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/candidate/bench-240x80-muster-1.csv.gz b/docs/performance/motion-low-hanging/candidate/bench-240x80-muster-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..d9035585ebdd4a6eaaa268fccf3b3c97282149ae GIT binary patch literal 6021 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/candidate/bench-240x80-muster-2.csv.gz b/docs/performance/motion-low-hanging/candidate/bench-240x80-muster-2.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..4e6f8f25ba2debf7a96dc380348c84bbf5a93f85 GIT binary patch literal 5994 zcmV-w7nSHAiwFP!000021AUy`avis>gzxvWtePST{yt60iIvz@iJh|Lz3aUF`5Ih` zshJFui^!I=Fa&`{H-O1sUq8M){`=wE=MP_AAHV+i{O8BV?|*-P{Qm93UoVgUeg63R z>GA31^BB%a8B+!9QMJ_0`uOuYdpW zufDx}pMUlG^>zN#$Irk2{>$IrzW(~6KmGRU!&q{{ec-SE^Xto(-#$J5`tcoGeBz%kdWKXU;gNE9^zaBr@PBxm`SqiYOWtvFlXgxCCglC zd~Qzds10+qAIbWomx#?gN=lEOV;i@|(qb&tTH8-!J;WpQ_^7!ZDY~&5dAwZXF(OWB zfwNVNWzJM$$XSMKxHV>rvHaeVJ@%tuq~f@aQ5j2BA6s}ZT+$K_=I83*5o(C7J_g^o zcVk|RmG^G!DIEHoTDt$)PuAqHbXdeCtsR!eqxUdmtY*Vl9{tu>S&Y?_8&f9~3^x)A zxyzU$gAm~^8^74oit%JNhDXXFSB6!ENH97*c518{h>QjQU-4#!PCVvoc|mOZ|& zNA}C?)-v7>*24xx78oIA-}!QsdSqa#cK&O9!iX-8zb}e^LbH_q7}c=TQ;|yp8By=e zEkHsLzxO7=SHQidOqdxU+=x|P9J;!AG@Y*HDx@s(Ko*v~2u=7^rq{Zvm8asyRbBEO!$5F?-F)em?Lx^BWd$Yf@C{sZvN;c|r_q5-%>8 zl1@d3Bmz??J_^E7l?+@R=L`CNepr-UMMzfCQ!)}x;Bm?(TozbK>Fm#b2r+sjvwM1g zo6-GQIcSnSvO|9nO2AEAoPd*i%o~3$$dXQ_2S1r#V55k4vR(l*g7S=u16p*z78Ec= z_Y#311$^Sd?+q^KlFB*VLqEvD>CxuEnX?Rr0fKf6Rt(Ccl|)Z*_zAhke4p=W!IyL@ zK??0-5F_0{O@$~1^`8-xK7@=VWvvVfr&1c!h?oG_`zuTfz@&b5DQH{)v<|R&(aX+H zbV=kyeOLnMRB}OiJ}24G<0O9NzQ(2nV$wLfl;Afmt&{w%)yW^kyDT5A4-9gtA^8t- zH7QddFbI&|2TfW)#=_a9U}uG>DC=8x!a`zVFh(8(gBFh-JW2^EP8fvQsq&Eb1{ajE zQ%Q6i&mnv+1|q(F-Y4cSGdue!rQ;@=xwV8+fxiHGGR+##egG|zj= zstgWD=J24YsvfvTE~WYkjDqD2-CS_SPE`p=gii#q*Fm(5Sp}O60zj7CrOuy24ICT~ zDN7A-i1!8;ps{*(DM-`1Tv{PFeuqtY6ySx5UK5)V<%J8#V2w_Lt&NSr1!=6EU0Njz zfVc?J%=ryzz|8J{HXF14hd}|u$Fzo*@FghaF3<7AWcqZmu49p5(Ez7 zjx=&9QJX^Zpvi(Baz?>dOjMhz+(fA@NR!Xy3EJi45E@N-xLOgL0;RN=fKWDo;4Hiz4&yJ%O?XY4W)| zr9l}2GY5zx*E*vK4w@i6cj!zfdz2Cjg-WQ%vfMT&T#zQ8%aa9ZFVsjBc1}%3Jy0FO z|C|u4t+N1Qp87rIVTMcH8(fekpUaaO6+cO96)C6Gwy>XFGy3)<*DWH%rlPETb^Mm#HTVh@kSwoc#L=j ze_et~exX+0Ct_Zprkv|j>jq20r(Ia)iRduh&@qGi0)1hs(F>XPVuqMcNo6Bs@&YyG zRG*S6u&#%&FVx;L!ve7dxI% z5Bn5tnd>toM^T_B?*11TH0m7oOUWznc|9K&9ayP-SpP5DR`1n0+2_k6UA_qlB)o-I_prX z`^YH^=Co6-$|I{MtjGyqOR~4p0oMoF(ZR~c*t|*0^;jit@tFW%bH)X8+NoIO(Ia1| z^$!pB34wWUsNzMw5Uy755(9_SAdptTByG1TR%OAQb}Ci?8c^f;IHViv#8rC`7|O@$ zUd>G%R7f!vtB#5yB6#jCE|}BKYD)JC1SnW*m||Pq20?qr;eaX83cnIL;DLfitJ@@) zH_^JFPCE;#Fc7ENRIs?ZGA5Oq^(hA@Btml#!aKzhJm74S%@j5^7u;$6B2&35?`Fh0 z+rZAqy+Z>NXnCTm>2Hea3FtFazz|h-Z?i7Q)6cRBEQe$GIjJSyPq#TINxcAjI6H?j z0T{X=MbTaF@!fKtC3V4`eoe7ea7=kZ`GE>tnmuo`a9?ySk=_O z;(khgzM&j4N?6QJ9@PK@4s-!1!+0-R>jFUitgy1nWGad3^q6c}$w@8}IS4(^&fs;s z6T=CjrOPLd%VsXLAW%PREU{np2h?Q;$7k;$`z);oFCjW*ohm@>U@Jj)&y&`B2&xMN z^|Q(T}j$ zVyG5o`HFAtvn0pLEsE$2;NF{DAZVPG76?6D4uC6=fdVO@YkYh24pS~S*w*`I1S!`)&NUnD7yH5tIoAe4rEyaf} z(p5~VyAw=8pSJD%xh>E$&gF|Z5Tq(|gU=mwk0N_RT>{M-jURxaaW^WPfE~ZaLx+11 zXbbL)v(|zYk_7}|3A)8F8M7uRt+v@=mHHCN>lkd!d3zWe&}j?kjI+|>Oz2ncOq{U^ zT4A%wbakbVr0drtOU*NUjJ`-J_XWjpZ|@((iEpbBUw^zl4ZQ^~reD+z3*9QF;l43oMrp9YD5BZYY?x@3igX5Be?+uF3aFI%0=p=1HhTI>5%t$!P3=Y z7~PQt{!4U}IR(&&a*!4#i|X%Wb?tS=4qu>fQ;;`jOqYVOScIQR)io?q{pTpBD2J$# zB%+XpM{>mzvX5}he11I2X2GD_r7kWu;oHU0Qpq=hy(MFmtk%s_7=_>6+rI=w5xe!- z!=@JZd@28{%|>1bx}<*cbG{O_QG+7$)gtLE^L+>Fiu`Qu4Na}?ZC+W8P3|~q~{tfjZoXnY4ERyjZRb%+_#<%rC<`$cr0zf12hjl{pDYX=wT)p#~yzEXX z7zu2ZEU4_px9!4NSDOLsQ43p90gwL4=g5fk6d~;hzKrHor6*6(!u4*9_6s>*jFQ}S z4q0&E5zCymIDZoP(Nh>DB$z8a^<2a}6xe*RxzTY^A*)gHeD2morAwUS0be6geAOc9 z1E=$5Wf5CX=ABCf>PA+MtK3?Q61#eq;v-_O#d5E-El&bmNIz56=1E-%5x@#6z_xFU z#*408jdH5F)D$(%?%{2=qyn9M+N(A}S4)e+<|0pxZY`v2<^&^M1oUDQR*>F$$l|ec z`AEr19M#z?^r3}L+J|N%Y3|KHneP#B*rijjo)m%%hm(7QB*J8{WeUJSA#t1f zZ4@8^s17Ygq=1aR7YCzXnv}~af$O7aIW39Aj_24nYss?u>YM~nc9YIhcod}p(x`15 zJ1(8r<&>?8J*(>j@`gMIzZ|EGs-}K*7U=M#sh!kGk$tqnZf!1H`^}3@t&Uk}KI=T{ zBz%oy7cBxeZ~tbe&;W4IM#gCBw~YueZEVI%SN*3=%j)yak8E>P-+hvoB_FW+fU1y3 zDxlft>q*51`II*kb@gb@vxCKE(VDbuYC&R@DHVM6tJ{+(RNq(7@`dK}zTOFeN6~L= z+GRqr*wjXlxe)KoNws#AswO#7x@zX5!nDyAU7uJ=Uco5}edpVJnFB2nMKjCldsf;P zpNavu!7y_Jg6t_>6xZ^CA-m=12G(v?&BArswVV^GF}sr%wB+^dR%%8DaS&Y>24#(# zeb3XhnW%N$0$JMFte2VIa!zHRZx}~0U3)gzl@!>FEqd{Ek`4RQGnU!DprVhB&32hw zE;gl&x`#+qe_#@#suU3;q#pS^IQW`b*1*a%KjC3&+r@3a%x4#y{5F3(H`~wu~}pG$q#(Cxz=;GsrFsTJ_py!0CR@h#m}2n zCk!R0P29%osD0H)Roen{^6fijs+^jsOOGZgq&9a@)w^>|U7P}rT?nlk%H>?g60k>f z`p$>OeAA}1dror=RDJ!bu@R2&X?s#1m=D^)(7L8vF2c+}Rdw)2?sHlrwL7#lF}$Im zr3%S<&2c#<$D8!pb||#2D(8zXGtGn4d#>e8BB}SBbh&yf0R6?K4&R67l#roW)Y7Kw z6xVI#e34~R)>;9<8CoC`z8py{PPpq~>YoVcldnuEfVBOhW)akWXY;z?v&xmK*EgE4 z6!~fkmpPmAuoI1gwYKT2ea*K8##~3yj`7B1y(}@k6D#=;bsWtm7LhGl3QBldrBnUN zVIC85I2=VSBYn;;P1gUiu*OW3_M6yI$!U)qXVE)rXJtvAQ-Q-lQbKyvUC{)VF6&(x+8A89iT zkN>jEyqeTRmh09Ad@9ePnf&dKLyay$d=9=%rpX-zR&7qLP9 zeNlbQKS}&q(pn>)*FyxUQ7s>a*?!w}+~T{1=1T>G5+9Ns9S_dE(?eQTik%v(Hw%zv zzGrB{C8XyZWuV12Ci`Xaer+IVPzzn|7T-*Iqhv_Ht23fTuDNIZWrpSxDHXU~$d1d) z1@BB!pJhXRHQCl;YVcu2^Edg#Kj;3Y7E4mBLKjl6#7zL%^$m&@^Z4klZ*!~9=7CG}lt7^5+Hw@Bjk-I1)6Xzr@IC~>` zgtFQ_+^~^#wK-i17<3Xw&>q@!bn>N|sh)Q>&yu3oHnbBI6wh#wu0{d{z3&cbmv??6*(RGz17qj?+A z)Ra*qlZZae$%4gL;$}BC+VzdCceu`7p_ZX?&SI4lYS?RQu0+v1ZCS~rw)8Y|6!?>Q zo8eSkSDfRedYL3;^N+Oo0+k|GbqZpnh_R+2lE{cOm`}5OS+?xn+gi7r*a+B3(sM@3&K4gKkJCO#AHU{(c z-OzW)!zX&*FZtM1Geu#QUa!qDdF<%jhT+?Ky?C_hy^2lftb5M!Qn{duzCm3{kT~}? zvL}dCu11u4yV&2fl&c}H{(dNYe1op*qH{dgt*%xC-_jEKbGb>o2C*97*O~y3r?$w* z>aTIwsF!=wPLHf>&f#3Ny0&6r{fG_X(K)j(I_bUot_|D}{M~GRPy0*|2kp(YwzHQn zZ)LyBe~27T_brNNVg&Eh=>g=?pM){F;%+-he)cgTcWml^O;4~{9Rw~4md9VqlX1%B$TOonv|CIe38GYbyTP1;=dFR Y9Pfw_^cq>$V$py8ABeWYt7Ss~0FRuOQvd(} literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/candidate/bench-240x80-platoon-0.csv.gz b/docs/performance/motion-low-hanging/candidate/bench-240x80-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..ec0356b4be6bd65384ddde45c4f0c8f13c3e01e8 GIT binary patch literal 5964 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/candidate/bench-240x80-platoon-1.csv.gz b/docs/performance/motion-low-hanging/candidate/bench-240x80-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..995e1c6ef24e865733a33cf1fa2a34adaef2c1a3 GIT binary patch literal 5940 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 W5TX@Eu0vDCzy1pmsbFO5LjVAD*nrmn literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/candidate/bench-240x80-platoon-2.csv.gz b/docs/performance/motion-low-hanging/candidate/bench-240x80-platoon-2.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..6b008233fdb2448742b1966607cb2fcaaa3fbac7 GIT binary patch literal 5975 zcmV-d7pUkTiwFP!000021AUy^auzwVh41HCDk>zUj!#3-;BJUufB-W)_S?_5Qon6c zHK;Gz#{Q`+rBZ9HJcxgP`}lPH=lze*@4r4DfBpLW<>T@9_n*h#Ki>cQ>G;3TAD=%R zpPoMd^Xd8c{^|YCr{m-2A5R~iKY#mreE$0U^y5G8zr6ePQy={2=~>@>`}O?&mw)%; z>F4~>^S9^usgIxk{`=kcAK(6Z(w{zjdjIvGr;qPGJbn4{^LYRD=jV5S{r~e55Bu@? z`RUz<_x$)@e?5Ku@ag#e<^A(FO#XQK@}!qYZ_SxP z$7h)}S@g99t5|DY)^f~PD{14&x>)PKd$PC6yXT{7pF;Gt1(sN9!^5ntl{2%RPJCdk z3|@5@p7^u1wpbe%PgblE^p!QZvshwPJk-KIYHf)h#AC$H+FG{4zIEHJt-o1|;o`|k zl(0W7l+##)uT7rp{cOeDlR0A{DoR=%X&hsWzFFH?tfh-52NBLWZkQQ5-#om_XK`@w zSR3cgI^N5bfNd@Fvlv2Z8*_2N6F=UIFL_bkesC7>Y4H=6wShf=GlAn1SbglrD4kz+ zYn;N!;Rri8S@0z0-@QpRoIT~Efm4C6vPU?^S_#mGWBTB9;G(L<_auzLUK({{Z$T77 z`8R)#oKCP1f9ga|dqe&tR+`TEC`2ghYiuDOEP*e9cy1ee3#P<&@n;@D7XB;|zoo;s zkw-RwTKi_fIPJmrj3Oco(<%#{0A1x*!k(3Cfdhu%2Z8f( z5N%nnLl{)s7+jDgT^ML|{mh6MdA7fv_15tu2gAZ6WC3>qk4+{XB5|-ge{lhqbfF*~ z6i>la56Sloi-rpnjc}5AjLIjX141wK2&hL6N7)6<0x;=9L->m56!P-^ASJh_^4u6218&K;&TX0eMb z!WRj87BQzf@`iQO0yk+~z1kugN=ioF^)*&sBkrx78cUVn6~;(ar37)|df+>4A}1|? zW8vymIM+Zhaj-?v;F%%8IN+^-X)ESzh%?|!)))lgsoK~?PFfJhE)+$an{XD3EG|x! zri~9m2G(pSoD{Q1judHYGM{k4ZXXxOu?tB7SNSxU4j$&{NTNa0Yy-y+MBqFUSvK5a zl~+gi@Cy8VV{yS8yU-MhSs()f5J6d-Ae19e25V=x4)7Bs&^~Hc6FwS(3G`LmSX?m2 z>eZ_-RjJt(fKWvihrF5rco4x1brXHVO%^#8qBCn_XK}$CYgeyk)&S;oa*CwL0k|b- z0ebd=OAYXIgsG);oPY+xjPsZS=Tw9UR`8tE zo4ne3-pCtUFehKg3VD@XrO9G3=i?%MLO7x`z*W#LNIV8t0~v3NV5;@a8g0Rxd}XTy zTY2QP0Y8Rmv5O?Kr)q`*@50;AiY%t=A8KWXtF~ZHzOofN8-u$auVox51I1#|M1trDlA?$)?q zPQJ3$%phPZR7MOBuPSm{c3p?YKcfzP=wd5;+OsU?xY1R%U{1cWmBC7dOdHQ}9zAkI z{XjMEJV&PGrBDTSSB; z)^|23tB#h_5d`x^3dy|U0E28ICoh;&u58uxL|0Cd9ok4#r1XW$5Wpx$y^=yFiLP1+ z5&@+E#v79h=#(p6bs#`tIF$N65^!Y=okb3Gzd>6_5-}-7WV!K3 zb|JDWZ318tQz1n>QLl|vZ%i(*Q!a#s$vDd=(gUhMMHQkX92KXaLKZAEmvF^@+@l~Fc#3&XBmoc#KR5)q%y)Ak`hvY%+HILJvbyRel)3tj;!155O$&`49xAssMn7$uN;83CImOrc@eC=(|-e$Wt$zWoYEH&BQP|K`R+3igFV3 zf$a>HB;{QEk2gW;X&XoZw~k$)r(Q_Q_^T>MOr_PstiZ8qKrJ|#D11=SG6_ywO8PBH z7aP7YxnNJdu$Ijy>I{$;c&0x^T`rtQ(>EYNa8-r8nS*%9&ApRh(@~FwG`6qaAj+YgxdjUUtB}5t3}+3;Li0lpx?? zlAhrrTE#Jfr)AZqQAxX1F6dJ)#Dy@dv%CVh;L+DAM9JjQAu3{(Z)x?)iO{U%JyP#= zR|hW(`m_skak_|_=-`6w>L&Tn0mvwi)m{eAN{BI>q3R}lmI69!6Fy}@pLU_HtVFqM zs}e{5MfHGJ6|u!P+RHRcA<$LCBxIwkhS01VR>@kNxGX9UFuvS zDqYPX8gT4T1)Ue)a#vZO_tWldnKvlwSAz7KGYG z?1Db6-s%EiXq0C;YeIlfqf{sEk(r;#jH+dv|VAhEcnx|=@zMlc{N-$ zUs!n-<@IOIjdFFO)*vtm*P;#qnLEhYiQhi4XX^$w9JXVEeLIQbNan;jNfn?J? zsp>4*wK2M&P`~G0KtZcs+$7g4vrZ`RMV$apViAmIuia0wRvA>4(z=7by5La1rCybs zYlxWwiAZTvw0rTPqM17;FXJ9RnKkk zr~jd~4b0aCjruhQV^K=ql}HA*u*H}Bov=|NVLGR%qA)v>E@gZZ2rt{Mbit#3O~Vk4 zswR<7H}wbSLM02pz;vo!mxI__ZdZ#WWw1}5;+x%;E`Zdpi5R?Td9;E_gJqsaUO`4LOHr@!o`yZ&k@JeR$16hxCDxL#0E- zt|%Ae*w|d)Xk3%A+D(0t=GDp)^J`@t4b3l1ELzTxJmplOkF%w;AtYXQ(=1%jXx!4V z{Lp)?1@ArK$>CXkJYTsHTS4p8W$onk9jGyo$ki&>qs$yTegO z2Z6S8>ViSzN@fG8;h4ii&KdrENDU?^=gg{eaWLgnvMyn+Zdg!Bl6Is$dgEr_J;D5gZV=J?2;Ji7$f|-+nzmELNoj$Vo(&8X<4uOUEX& z|L__t6h+emKFrF|Qr+=atG5Nd*<*!e5^*L-YD+KE530x3GpoXmwhw9>;C*DA0D?vD zsz0sW_HeaW&3t;p(6+fvZP2A4gDMm{$yn?PU?mBubx~IdyL_niTbM2uJLKo88E>88 zkr0`ma}}Xyj1a&+>VdD7gyCSwdt-6jj^b)jomh2si)IuiL967&$;cWLP^B}S&^7x^ za?Qu_8E;oM7W*A;7K=?29#T8aE5PNY%8j}~=|<&w9c>L}H52r)T6AVd`)u&0#~Z3H zCaa2DaL61F$`e-oC~#6d{Ug~tCD_4w?IvH;O&Pn`>FGuutH~-D#gSdd@1ZNbubPKg z(wrr|K^&_0>B8`Q-?qB4+l?g`qopY6;<%|`nbX^#2{hR`GtD)KYn`Ot7do^S*Sc*x z{gH2SU^S{*Pt**ARyyZRiVjOv;k~17vxc#>(Ox@DBriVSlef*;eiuHAQJxW8tAZ08 z%~{kJ2o?Q8Ctu_|ToHAVGdkL{c#BcwOqlaKpvo-#+Dsm@=D>nzL^D&~ zfg5^O4^_!RiD}m_>FuUwSF08On%DI*(c9BY{UGK>7LR<t$AbT3jVkJ76e5ZCg>$ z`%SnnR#Q<0PfSVTb-LE5kC`(~F{yHy!=q~qcdM}3OI5mH+ia|lTaL0?P319w0u|0O z-($qhhzHxghz`=r!nDY&y{>%B^Zj& zH*iR$1UqVXXEok3&(&(sS@a5U*5Mql5RsyWR?JIpyslftPf9)I5fEk9e;?_VWG`0H zIO^@Y72wzMYYQG-3-{ES@J97+%TOm5{_&z4gu2<+VYhn1YBeL7yUGQy^=Z{!g>BT_ zm?IPM6%}7I`2_7Xc!1;$yGgNpE1bMpCAVu+&?Y2Gn{`_S7ud`;_u@%|4+9YF_?HAm zz0VNpt_DBu^`SSL8P}>AAgl{>U_^C)Yni9B@;63jV5i7>qoBW3%4MV2e#2 z$Lf7cg}{?*B+-KEUwKv&`a~tgas?}f>R@@7d5(6g_ANF^UR7MxI_sY$p+eXK7i zIf}E2oK+P>X7`|SU(LH7=jgYh=3>(%;@xIw-uinm4I-9|)DyBXp$bK>jzBOShCoQ| zd^>Kn+c%r0{T!O6O;N!#i?>Q7bVikMLbJ13rLLcPkUlH~^K3`*!o5bl7}fN!x2Z^6 zPMf2*F!!Np7;heVkHehLf<_;Pdi99JU~y+O-fHoy(V#KkJZr|9vGgc{y{mp<$*ZZw z8A(F`$U~1gG}5j!?{g@Zp2M5bG)7@3(;R)!IE-2=*^v)-lb;I~x{8}-Gl5Wv9MFd- zc1G>iTUm|TbQ;8)+eH{W_li_tR5oal@iRhvn# z>OidCyoTe4)RAKp4SThw54EwS(-`i(vejr(AgK$fYFmsifn@4-2=m0@O(^A)q^63W zW`YaZ-Ogye^#m8A>O*SAOYK{iC+^-fn}X@Fr<#X|7G~z{4VjK7#?ENF^*&dl=!MpO z#Ho8S7+=QpG+EZ-#0HUUl1{W>NwT7GjJMI-Z#~}MjLN+#zvVc`ktM%fm9RnyGyETQ zev?m^l2-T>0p8!Pblh6mYsQw4U)nO&{9X`AE&i_ascNxicBPO&kE}+%j|}1Dw2R(& zZ`uErv<+_n43)k{ngwe;oXofeO$pR_M<8k%EH$`Sw2B(v#nCzmU2a($LEAh&)#u_=CQBbSFm*L|=ssTZHK95?-;dVCj zZI))W8CCbHvK2 zTO!&|U@^@sdUqQm-RBk8tZB%n1Dk3E_Q@?8%2a13PMhYCEFw=fCwZ(C+g%`7r=;zk zsWlB=4=?4I)j4q@(Oy*I(U3r!x4weZs76mcxOvbnZr3?!yX9%T@~N8v8nBJCo1~6* zQqribjgOx`;Tj~i5unX0<#AhJjlWGw-?B79(EDb+YDPM}4oa%psmWJU<1qU;xE^F7 z+9dI^-OqfRBVKJjF1%q}RF{ zhh|8RL3>4}hL=_Nv()@T1u|0Q6of(xbGBz2L-jTj{#&+Re44+LE|i%T7MU11%pt8J z^cvm&?OXEy_VM(=YB)95iJg{!} zv)|_XSDP((>4enpjI#nMX&p7Tts!dhj`y;I`L&6bX0p5;$%yOJbh>dFN1b)pfxz_| zd3>}VH4KX;kbpm%4^1ZRXRN{))tcfihU|V<2%|=ps{dbr`0m=*lAQDDn|&si<;+PqQ{V{xe)xtG}5@!ChP2U zx^Wrt2T#VM!7DZ%VpA$q8eaN3boV_rRg4M4XR73e?Kpl%pdnIY?ni6rHpH4R}3+h?J$?6b7BS6yp49hDE4MkT6*ZNGT}Rly_R*gy;*surv8iXyHxN%!uX_R-?g;kIzk<>kW_Gl7%8?;H0#d$d`Xofi`GmE_89K$W!t77X6b-Xg!D8&Os8AO_sL_Vt6M4Emd z&iwuctMn^b-5VBCW7`1gw>yoC$vm&8wW7O!{bfdrWKXZ4$=B{AGjuzSupJ&g0eIS3 z9JgDWms|xW`Tewckr+Jo1e{mV+%`wEYL>t!xe!IkQ`NAI*nGd3x-PPK->yBxrY@o< zf0OKls+*gd4jX=%x)+aEUEkOR&pJdMuNOoeNDQR9#1CTZ8#_F?=zoL5HY+w?IP|^Nzg^WX;N_ zH5Xn5kjK!~c+Kkb5~FP^@iE`;y{`t7w@+%F8i+tm-Z#s70Uy9RRrMIoku~e$;eedC zdsuJR`WJ&1TrHDVo$1lg@wq|u(z18WeOz>exo!>34_#{98Em(IwO}!*e@LKe5J5QK zUasGXf%$#(%k~mi-A6}pWzx6}X$)_=7YitSdN`@}GIB$QxNcOBa zRa0CTJGbu6BAFQxd7=LO_2bLqKOeq*{_y3;`~209uRrFiK7Ri5&)@#}_VxD{{q)DD4`2Rz`S{x(FMt32{qf<;_s_rm{(nDS z_^@xEf4uzm#|M7>uisz3{PF4W@1NhX#V7v#qGw3;5gs{(M-1T+j^O{}dFJlw|xl+hMgn z5{3g`O6W)L_9$4a{36y=8Xs52D34fp(sXMvtrnA+wbf#;N5D`Ftsho~EH*1x?CmJl zAEm~_GDd3E(yj7BERJB|)?!{Qmea155Rcg6BVzK1+SPmv%e*hABWaD64|Y%%J8QJg zGxGx{VYe2`YO$VnwZ?LEZGBATh)D-{WPLF#CAOoO9VxP`+8WQ(a@DTZ62`c-SXYa7 z+SQWFF-pQ>9EZsi=h%$*vCAcoM`_`xtUX%Htg)A3?1*tZ@z$cP7W;WuSwi8XBKvz} zc25>7yJ|SGwZa;C5-rPe_ZH&{I*tHuoHchm z7#K-}M@}9dEk~Igpi#o4j$c+dJwOM%;MJ`W$@eB#)RC{e+1JW;b|F{F?bTab!w!a!3F7vs z32Lc2%fYAQ8i;I6ww^XYvSLpOq~RNjZN72r84AF3gbX^zgeUvP!dk4dbZxAS zwAt7deA1b=tQ#8%N2Cg%nggr}X9w_?03TsRR^T>RgjE)2Q}&?TlSo|AC!KlAi1_Rq zTiOIVfHi4j3np`TK*<0i&(u20!+7nyDCD%!A8AFObSAErFj>MhIl6mnRVed%JQb5E z93Z(&qEiTz!uu0=v_YS=qE9+A7l@85;VkhN2U|Z&-V&^X^0-ey7lH;K z@80B!KIu$d4ff4ZfYJM8N%mJJqYgO?OcFdY-6VjQ^~w;~uRZ_?{DUaDXOgs{Pd<}ZAADkv zNrI$E!4j95<@nixMioe?kQl4f;zy~x4G96i-kV&}C!fh{L~{f{19hl)GKnQ+Al-we z+I$rBhgLa82SLG2VCdfDiaz;FUW1KoMHJW5F-DznDaxqLk+0SPo5^Hk&4mpWDyE+M z{VMZ{KIKeaqY)%%ekC*@ow5*D%dD~j0iciZwM_!xlSZ#35-HVc_kfpI^eHFuN`ctu z(ix?Z(@lj3@B*eN_re(h=ESFCEU?2PXNMOg^?k;bSM(_-^1|~vdL!v9i^I4uR-w!? z+-<6FLwB4aRS2@hivrtnZ*oPSaw0GA87LT@w+YYZS!S^m?liQqO&~0fZB=IpPb!im zC+W05vh(x$qO4W4wdzj-PYgh*4;5q!Ob^k&XV3IUfZ!6^6o3mWer=G}5`6=$h zQIW~vsja3)vrn9WMZWLZw(Wjos%kzLPQK^(!KKWGZMGV6K zJ>V+ztSUUbRKE^0rQfObvZ7Btkr%=QW|l)*RP`lK^wDPn0RvXkqf}u<@1yzR^)_;` zT`goqpL!xM-jBytnQX;NN^&1ioFfy1u(4I*sEYvD9^SF%6(8OEvjD>?lZq2; zC2@#pDewV~)qp?|2dCEV)p}Xc$4=x0vpnOn4XH_I66tYNdBWLnA7O0hu9jue8rh>9 zJ#992MISqnSAhzN!{iyG1Dq?o{y<;iKCDY9)KotVjSvF(+e~=#xYs^qMISqn7dbK} zL-Le^jkL$Jq-NGh_Q+>UshJ)nDtxPCn35!7cVluzA3Kp3ELmn^)wB5Wsql1!A-Nhb zfv_G0e8Q{HTXKQGF>f|@MISqn7y6AfNDMr}6pvaZwAqke0uF3f-+4p|S`qnChLnbC zYxfny6@BbPUa+B=Aqm4Oe1qOffo>M(*ttc=vvBSx?4kOjH{c$_6p4!jw*fr1u2$4zC3J&BI4B&nKhYTPUOv=e#t9*ns3dR5{# zZqf_;p*iB=KMmqcD($OhfeIUvM#>O2QL@5MJEvYPLyW4VlX66k)w#sW+C$YR)e1#2 zO_d8%#3F2~7U~(pz0nnb+Bx}ZhA>xvqZbVYkY}Lie8ERx*&fZINX2ilB|5Wu)e?re z*Uxo@pw=&WEvRN%sj9G+Jc~k|;(eIf3P$~$ zh-G0eS?f#~*h$YfC6)m=xH^loRrwY+sIW;s1gl7d=0s zNkX!bT%t3B8!hUk6y--iLX-Xt72v!#x&l%^Cu3C*fVz>KF5U=wawzIm=^1`(EljM> z0<5BZfgci*Z4)vpBK31RR;5acI+S1)s&G~i@KVU+s{BuB#CCgEL>iZrjOaVO+4S1? z)=EJhfIzU(6*A_X)!3?%*qFWh!AWll(rrbgaZbwm7#&%i)$}7ApM_Huu?gVl1u1)q zvsj|)m&N4V5yaoDw5^CVPRvHc)Cjfd?-sqfC=)I-qUcmr#jd)tI=tQ%2Z&UIR3-IZ z8nqRX#);b4EHN632ir17=h7M~eW+|Wyr(Nl5CufFT6D6a@)&yFR8QNANaLKEC7qbc z1YNb0XZcHi$kj7afo=4v@p!fcavEa0OPf`cp{yyfOF-isI`O$Jd`fUP&!9NV+MrRcg|nGS@xIiH5wo3lRxT(rVPN z<{un+?=9MOiN7prjR`=-BHCT${AZ4h!ejBIDOhB?m5&zEVFHU&VukshLR-5Y<6<#2 z2&IX%NIt`uZ00gnvnpOY&>u|7)nrjH$ysj7d#zu+b+Jgg3$29m=@+ zH;}F3Y2F(v>NKQY{fD~4_@1v6x>&6po!23)sGdS{B|_XJR}1PP7gzPEd#kak3}2#( zI-0b&mngkl)xv7k=etx`@TSU~MCuwVA-gAmkw#H}P>7L=7yo-!EdXu48Jg+u2&2_1 z2`!S$NGy3E@;BGIQ#Vv;MA;h8~J)*+Js>-l|(+%{{ktS7r4i!>(JX(?k-kS%SxPF8zrxcD_ipdAYeygQM?W})W9$L z2}rE2xJ%h|&3nHp`^74_t|=XFX1s1BFH@sv_+M15YW@mMN2y2^eBmHj-^A;NV_wdgiLEnwp|@D0Lz;<}=f%VWaKGJNeqeZ3C>IEi(XVYF(9) z)Hx0s+HuWXjygPd^3oO*t9)2}_j{}HnwljQ-e$X2 z1Q(kr06LP+W5hYLI0<#AA<^At^qOlb4TWkE&QnvNpt$dC_G{sDu_;heOPk=qW*@I( zuOk%6C3e#b=)%UR*$e)!bh*imraTM47l~ctet0 z6wl4kD`DvV%`jMar;h#0Xw_&Wgg(oHHs=P2Toi2Nq>IgPaZw!AdI3I?7wG!dXuQ_z z7o))Hp*|ph$kE2RQqnZ!rg^=H zwkV$t3N>$S>qvtHh1%Kzd}-GV6!zUp^R@r780~5-3yx%@rsqmkPSG%m7wDP;1k{as zB&`WPGM4kEvlTGP!!A*ONBzKm$`AmMT_yRimmvm%4WrHH5O6oeb~v z(-xy30%@?fn(AwFGzfOcI*#ByC)50_&w`Ok1-y(OG=9G`YS+Hul48`9+*_l@ZF`u7 z6&6T_1EJ|~C6gq>gSYoVi8#v?ZRbes+8=#mbiik7Uu%>)wJ8a^0G7j6SHwrGoenf~ z3@E84i+i=*m~p@Mfmfp}q^RB9Fyhi0g$*sCh9EptlWEG@=~i4@ni6AFD!ZRHM#r_^ zz2;Josp?S})ns*@G?>@3&q^suWQT!?Z+Ne6mZ3+%CzSGx#lfccnnrIe$7~?tL zT+o_+j|1L@@6;laZu2gCln4dAHb&!heqqhuz+O%DMD*sN8iprQx=-Ol)+nU>RODUI z!LO5MnX08t(>uPIs;-yxjjZwT*=#7wLD*ZR0E!yK-rOhAiauqCdLgcBa|8jJH{kGQ zuDV>Zx1_48s#1!b{7l{yW~~Qrj%fVGe84tq0|bBy=G-?8w)keUx?GYslm~ICvH}A5 z*{G;<3Z@CbFq(a?k~~qhB=szH@Ir@;(Rb#HR-^TG4n~>x++I0xMq&U8@QOp0CMsjn zfDz~|o*P^2eKTEME~y)8z!UMP`xMWqrlv-ZIx%V{>Q0F#9$iHVvWn&nYY=~Dv|Z=L z)@+7_6tAhOn`X24plM|y5f5W~+nA#VO$t~gd`~lTNxL}h*SWaWsG&yOk>afR%6lcx zO{A{cRgb!dBBRAe#x&olvC7@-`kNW+a?RV+iBV~jXmSwnmdwyJ-kbqY!mKv2R;p<{ zKtnA9{9rRmp5B>rT+_B*eH=FG9#E_^laUJ26rz%i+Uk*geqD7#K42(81$;L(?f7QS zI$yH3AvNfgxULG0%@O3T>G-N4SD&sd8Zsqt)u+%*q>LiIHb&ERZgn*Z5UI}}ktTTS zc+J^JRGQ!N66MWnb4l|xBL}%SNVX}R#kaH8mz)hYX48Epm?f&9U}R4kl2q|SqO(>n z-I0ZT!mK!(8`Y+b=%kx?{cff2 z%v-NUi^{#a8zuaEj>&mdh5$BAvaL?2+)^~8({lo~{jmYpND>-_whhmYzEhEeVF^j@#1l9fET6J>+S-@_4$MrtM zYP2-3fs!2wgwupU-N8VpWpBykDa@KCfwF~%U*TlBWR&Q!WZsiDqP+CWg1eFUH zwF}N#l+)Sl4Yj?QzD{Rq(**9J3tk)pQh&_t74)do;$@?#d#J)*br@hYe?-lf?5>{W z>wTrwXpy`%d3k?Liu-Uu9Q^WR4e)6X|1%m@E!B|Arb83oOkk&Y+1{+?rB({7XzEH6 ziK>HY>{KF~lx~)1o9;5A7gV?sWN*fHV}9rU*=m$<^xM0trMP2iJXzIM2gJR znM$9gkSX4>h&CLkYW1M)G3>T?TDR44{{pw!f~*`wA(N%9dHiB2#$_yoQ*cw(U%h_LOn zdwesM9WK=7muv($Y{}8*zi;59(q3x-s{9&z*UX5|4fdh@5w`{&H%8yNi@zF0>_z#B zO0dss;~L;k8XQq^tQfD9dz+tl*Nq8<_t@0$O1jww6X~bZta$cq* z*(@~^;zH&glrv~RdzZDnnavItYLmv+^{*H`KP_{mx}#vTw&PpTn)l;)q!u*{KsJjO z-5BlHe?Vd}nl+%K-3vuR%(qun(KN@4he{iMJ&qmK5EL-1S-*;3?LuZ;|DBB0XrBW) q7@hSZucj+`1FE_%5vVbxLucta>Z}?ZOF{kr>;C~S2p?dqL;wJ>Zysv^ literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/candidate/bench-320x100-muster-1.csv.gz b/docs/performance/motion-low-hanging/candidate/bench-320x100-muster-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..d89cc1be148cf43c2e00b68fef664ec577cc8ab3 GIT binary patch literal 6152 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 a^B0K{-sh7B$5N=e{`3EMb(o&5L;wKp$=uff literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/candidate/bench-320x100-muster-2.csv.gz b/docs/performance/motion-low-hanging/candidate/bench-320x100-muster-2.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..b09f42e0dc4375d3d34cc05d684ac0bafe43c163 GIT binary patch literal 6155 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 OAO8nM=OfxYMF0RxKLnrv literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/candidate/bench-320x100-platoon-1.csv.gz b/docs/performance/motion-low-hanging/candidate/bench-320x100-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..a892edf039b827b85a91c2928379def328be7157 GIT binary patch literal 6160 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

bsO;npsxM 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�pl>pSeW4@mbe24puM zkbB>&szKi33tIDVBZiVYhiJjZ@}4*}C?;I*F65v_97&zn}3K8Qe>G`v=^+z(m+E zB}*Z-QyZAL){FMMQv1NgbW>Hl_6;Aq&0IxzAcmPfDIKpzmOfXH(BoGek$;YFWT-E%niDVqU>z%BtRByzpRHA$CAZpSmy+HD9?utx44cX|_-d7kvwD%S|M-<7U z%FI1{S4;Nli1K|3!p)E$1hhcNO!9tWKlF;|auWx{w_v@;w|&5UiUVUKW~%z9>ZR{7 zzvBQX_eae+3ngwZBHC^GN^P+^MGG!cHEH1$7?ms&{(YbAc#4Y9N2s87 z3M$+qdEP!C+@{E4vJv#7I%G~MhbB{k-lLven_ydDr^R7~1WINoNlI@^p=4$%|jISmd+4d6)^si!xGQbKM3uf!J*xXn=F zCL^Mmgs7BVR6Sghmt+iZyO|;zDUbDNy?wxaiqg3m^s{m!WldglQd!BeCIdCac|D+M z2I)ni#cmT>UiF*FrcOC>)gYzoNdXy^rt6*|vzD$mUQGDjCMg|JYIu=|hV)yk?D|Bg zA+u|jisOi~fR^`cdYj5ZpaefInS7Q2tkEQuDIU7WkSYE-3L13D`|%XJ&1G?IN?0x& zkRTA&S!hEbYStrZVldAM66=v7@B7>q?o-enHkbj2nA|yzAM^zSVh2Dg(IyVm1@Z00 z18#HBnm?LZK1Wog2`X@kQC2;7$ltMj| zz+Sdc9=d%%x=qnr3d4)koT;h;L{cc%L#CSl2%CumH5y;x;5MNJow=FDq826f6mXP) zRw+9TeJnU&UoVAMxPONsK4Y?})~lgGO|WG(M3GJ6o|)k!2@j1oY#&f>U%}8!!C=#v z`!ufUCaV@uBz;3O^v$toY}9MtlbxV?KZBZSq2|x$h6+v@{c%&t#{y+qL&xK>o%~($C4Z0Y2a#$dN1kv776#kdS}42K2T-*wy50(wsfRp7_W~N z_nLB13ScS;up^s1fnuwN~biyHUa^0Z%$?WKet7y64f{W0Aeswy8r+H literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/optimized-large/live-320x100-platoon-0.csv.gz b/docs/performance/motion-low-hanging/optimized-large/live-320x100-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..5fee9220c8805fa6b961719ff45d89adb6187efd GIT binary patch literal 4794 zcmV;r5=HGFiwFP!000021BIK}jvlv?gzx8BeiWG8`80-XwXFtpBtdHVVBUVdU{$eL z7gN-Q(e8yyG9xl_`Tz6%^V{p+Pe0#3efxO*`TPCr=hxpqe!c$w`RPAzum8S({`m6x z^7j7Emyg$vFQ0zBy*|JHeEaL;{rk7q`?rs`pZ|XP`p55I`o(|VKJ?Z1-yc7I_pg4w z{o23v@%>}}tx?nn&H!Yt_d|W=w%jZ&DIhL<( zO9k7PfbI22CDpoxR?p>qz&Oo^$K~_9d^M}K8z*|d`4(R>rMv|;^)9uz6@Pk;PsRmZ zaF5HEdHEJo^ZW9iL+4ap$%nMnP+!JD%T|J&%SSG@rQ9Buuha6TL&e_XLZ zWB&AgE6um9ExgBO=vr-|_yb!Gr!3_a1FHr>wu-FXmc0{3i>X;gua$vD_Us zV-Gve9|)7+xh&%1j9+41P6xg+aic++Q4iro&Z!c)Dv|A2--$T@-Shf0etjeErh`6f zhTq~Vn|GZB;O4xO{b8Rb|Icx8{u#f4*bOp_!++;XFu%U_fSf} z)5734s1BW8o|SEw@rxew`SgEiEkZ_FfjD{z6@8^hdDsVOi&!kr{26Ba#_U=;r8DP` zkTL2URfX3hK+#ia2>(z55ER}Y*Prnli6j2h53Y6E3|WR^6$_P@CbJp(fh+(DTqG7V zej%_HPx}Kai3yIsM=39@kA4{Ow@RzKg}w?iemP7U_(J;^#79yxSDGS4BfbYW-j|;u zZ`*Tx4>Nv~#pVuvfT=e$DEdvTiIDSVD8*XG`Ln?nO8p+!pYaPA!x?`C{+Qw`;gMZ6 zE7P(b^2hq}Tpkfswjh13*I~v8=VzlnD|^bhApKR{-XLg=Tqrd&Q=@r8#` zd|$lpj9(I}dh&lD|B58K5Cs615|UtpKt}=)d_myWytu#&U?@GF2C6D-kUk~J2FW6_ z0|H99003R#x(kAfGk|kQt<^IDBk|{5OR=#_=+c^}K>0 zrU0x2FDikIaX6@+#;?|&0Sp=2K|toTKDwcbiHOFm?d3Nqsq#MXhMX&@SRtQKl zf{Thv2ZLrJK*1Un2@OLlm5G^%-p=(Q+ahiE%+P5@FccP!`bon>w<-e>Vvs13=-Q!| zY>o|FBsr*y6gABdE&(GP5(RnA1$bc(!X$i&m%KH!KRlE)p{Hbz>(3A_NQiWXm>7wS zC?Dbg%p<9aQ|;e7Ei!5}K5ZS$guwPhc z#&E$^!j54a(0BhJwJ4!)fWkxdOPCIoSXK5~_~;B`Tm_mwK#UKm9%m?*43?CZ7Acnt z1f(R$y0mzM8O2qVm~w_OU0>M?iCC{@uy?Lgp3NoEEvq_Eo?%=K<#5mti8d~-;vV4c z=d@a2)EbA0Dp=vGXQ7p67$YNMKC6_<8c8%@pN5_#{-Z>d9A92kl^Lv*dY*BtMEj`p z@y7@t6==vLb5D5jA)h;Q9vkpS9x1&r(F|ms(x;Q@xV|14H&sL=D5DybYuLC!h|((d zoD1X`$Q7i8U90fNs?`XF;)6^`lEaE_(=d^WDPe(wJR`X_yn4SuEh;uO)i_*=$QV^? zf`a4q28qxINja&Ay0zsjOqkY^+}6hqoK zD2ZhuYE)-Z5F_nuLFL>bM>&2_m*km>@(kn_&<^oTw+V${ia=jbxu~{kz2z|0&!GpO zg_F)WZfHYy$kC`Os2DVf^c(~Q#KqMk7Fa>hSbKiqGQ+rKH0+U%6|`qlF_xPU!-6Wa z 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 LzF_Bo!#@B3C2E-B literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/optimized/bench-120x40-platoon-0.csv.gz b/docs/performance/motion-low-hanging/optimized/bench-120x40-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..4058a2146b274c7627e293389a3539602c024481 GIT binary patch literal 5517 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 P{n!5kliVK}R6qa#)$q(S literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/optimized/bench-120x40-platoon-1.csv.gz b/docs/performance/motion-low-hanging/optimized/bench-120x40-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..fbc148a6d10a298c6ad0e0fd98979b12c5ca8dcf GIT binary patch literal 5478 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/optimized/bench-120x40-platoon-2.csv.gz b/docs/performance/motion-low-hanging/optimized/bench-120x40-platoon-2.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..4b6ce5803085a1b9bda814f2f4b77f1c9e204c0f GIT binary patch literal 5506 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 I(^5kK04GMgZ~y=R literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/optimized/bench-240x80-muster-1.csv.gz b/docs/performance/motion-low-hanging/optimized/bench-240x80-muster-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..f474cc598dc828d3a67764ba7e55d33c4a725562 GIT binary patch literal 6048 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

i)79(skpQ?rl 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 MzZ3-O$LT`=0Pt?vTmS$7 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/optimized/bench-240x80-platoon-1.csv.gz b/docs/performance/motion-low-hanging/optimized/bench-240x80-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..ecf863a067daf8bc1a1cd8ce376562bb058fd622 GIT binary patch literal 5973 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 D-*Tdk literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/optimized/bench-240x80-platoon-2.csv.gz b/docs/performance/motion-low-hanging/optimized/bench-240x80-platoon-2.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..d2d70acfa43f5bb26ca93e18a5848ac57c5f3a1a GIT binary patch literal 5965 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/optimized/bench-320x100-muster-0.csv.gz b/docs/performance/motion-low-hanging/optimized/bench-320x100-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..e20ef1c1296ecd53e5ef0058dc3fdb37c7be6d3a GIT binary patch literal 6156 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/optimized/bench-320x100-muster-2.csv.gz b/docs/performance/motion-low-hanging/optimized/bench-320x100-muster-2.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..649eed5fe05ede8b9c3003fb0d98792e91b880fe GIT binary patch literal 6213 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/optimized/bench-320x100-platoon-0.csv.gz b/docs/performance/motion-low-hanging/optimized/bench-320x100-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..b89014cca65137b753dafb2e80a52008a1bdc3b3 GIT binary patch literal 6206 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/optimized/bench-320x100-platoon-1.csv.gz b/docs/performance/motion-low-hanging/optimized/bench-320x100-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..3fb2adab159caa96b4d42ad4950f24ab7da0b664 GIT binary patch literal 6207 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/optimized/bench-metadata.json b/docs/performance/motion-low-hanging/optimized/bench-metadata.json new file mode 100644 index 000000000..6ca0bceba --- /dev/null +++ b/docs/performance/motion-low-hanging/optimized/bench-metadata.json @@ -0,0 +1,304 @@ +{ + "binary": "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "sha256": "eb7a991260f91759c378cef119ea86b9d559a79f6730d6d80e86fc59bece5c0c", + "mode": "bench", + "runs": [ + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-240x80-muster-0.csv", + "--muster", + "--bench", + "--size", + "240x80" + ], + "size": "240x80", + "muster": true, + "repeat": 0, + "wall_seconds": 1.771534627998335 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-240x80-muster-2.csv", + "--muster", + "--bench", + "--size", + "240x80" + ], + "size": "240x80", + "muster": true, + "repeat": 2, + "wall_seconds": 1.738634635003109 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-120x40-muster-1.csv", + "--muster", + "--bench", + "--size", + "120x40" + ], + "size": "120x40", + "muster": true, + "repeat": 1, + "wall_seconds": 0.4443305069980852 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-120x40-platoon-0.csv", + "--bench", + "--size", + "120x40" + ], + "size": "120x40", + "muster": false, + "repeat": 0, + "wall_seconds": 0.45290434500202537 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-240x80-muster-1.csv", + "--muster", + "--bench", + "--size", + "240x80" + ], + "size": "240x80", + "muster": true, + "repeat": 1, + "wall_seconds": 1.8847290160010743 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-120x40-muster-2.csv", + "--muster", + "--bench", + "--size", + "120x40" + ], + "size": "120x40", + "muster": true, + "repeat": 2, + "wall_seconds": 0.4432873229998222 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-320x100-muster-0.csv", + "--muster", + "--bench", + "--size", + "320x100" + ], + "size": "320x100", + "muster": true, + "repeat": 0, + "wall_seconds": 2.8562733539984038 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-240x80-platoon-0.csv", + "--bench", + "--size", + "240x80" + ], + "size": "240x80", + "muster": false, + "repeat": 0, + "wall_seconds": 1.789810841997678 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-120x40-platoon-1.csv", + "--bench", + "--size", + "120x40" + ], + "size": "120x40", + "muster": false, + "repeat": 1, + "wall_seconds": 0.4518949490011437 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-320x100-platoon-1.csv", + "--bench", + "--size", + "320x100" + ], + "size": "320x100", + "muster": false, + "repeat": 1, + "wall_seconds": 3.042100806000235 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-240x80-platoon-1.csv", + "--bench", + "--size", + "240x80" + ], + "size": "240x80", + "muster": false, + "repeat": 1, + "wall_seconds": 1.7751268240026548 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-120x40-muster-0.csv", + "--muster", + "--bench", + "--size", + "120x40" + ], + "size": "120x40", + "muster": true, + "repeat": 0, + "wall_seconds": 0.43885983699874487 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-240x80-platoon-2.csv", + "--bench", + "--size", + "240x80" + ], + "size": "240x80", + "muster": false, + "repeat": 2, + "wall_seconds": 1.7981757400011702 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-320x100-muster-2.csv", + "--muster", + "--bench", + "--size", + "320x100" + ], + "size": "320x100", + "muster": true, + "repeat": 2, + "wall_seconds": 3.0823035450011957 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-120x40-platoon-2.csv", + "--bench", + "--size", + "120x40" + ], + "size": "120x40", + "muster": false, + "repeat": 2, + "wall_seconds": 0.4497253000008641 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-320x100-muster-1.csv", + "--muster", + "--bench", + "--size", + "320x100" + ], + "size": "320x100", + "muster": true, + "repeat": 1, + "wall_seconds": 2.9299676430018735 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-320x100-platoon-0.csv", + "--bench", + "--size", + "320x100" + ], + "size": "320x100", + "muster": false, + "repeat": 0, + "wall_seconds": 3.0010234900000796 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/bench-320x100-platoon-2.csv", + "--bench", + "--size", + "320x100" + ], + "size": "320x100", + "muster": false, + "repeat": 2, + "wall_seconds": 3.003743878001842 + } + ] +} diff --git a/docs/performance/motion-low-hanging/optimized/live-120x40-muster-0.csv.gz b/docs/performance/motion-low-hanging/optimized/live-120x40-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..773a943f2452c3006b32dfd8742fc26c1c67c4e7 GIT binary patch literal 4552 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/optimized/live-120x40-muster-1.csv.gz b/docs/performance/motion-low-hanging/optimized/live-120x40-muster-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..7172e32ed0eef43ebb6142cd190f7147472af68f GIT binary patch literal 4553 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 RHWQr8|3AR8KPfmk002>%Y03Zq literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/optimized/live-240x80-platoon-0.csv.gz b/docs/performance/motion-low-hanging/optimized/live-240x80-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..e6cfd829ee50e6ba8ccbc9d2fa33dbf4d34649f6 GIT binary patch literal 4718 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/optimized/live-240x80-platoon-1.csv.gz b/docs/performance/motion-low-hanging/optimized/live-240x80-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..2ff4440bd7d20a081ab3216e32f182fe330692eb GIT binary patch literal 4749 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 b%TX(n*LKZT7jLCMUo7{3D$i}iy*K~>E@Ezt literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/optimized/live-metadata.json b/docs/performance/motion-low-hanging/optimized/live-metadata.json new file mode 100644 index 000000000..c5bc1c213 --- /dev/null +++ b/docs/performance/motion-low-hanging/optimized/live-metadata.json @@ -0,0 +1,115 @@ +{ + "binary": "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "sha256": "eb7a991260f91759c378cef119ea86b9d559a79f6730d6d80e86fc59bece5c0c", + "mode": "live", + "runs": [ + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/live-240x80-platoon-0.csv" + ], + "size": "240x80", + "muster": false, + "repeat": 0, + "wall_seconds": 8.24613878600212 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/live-120x40-muster-0.csv", + "--muster" + ], + "size": "120x40", + "muster": true, + "repeat": 0, + "wall_seconds": 8.307556552997994 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/live-120x40-platoon-0.csv" + ], + "size": "120x40", + "muster": false, + "repeat": 0, + "wall_seconds": 8.318970726999396 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/live-120x40-platoon-1.csv" + ], + "size": "120x40", + "muster": false, + "repeat": 1, + "wall_seconds": 8.276289467001334 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/live-240x80-muster-0.csv", + "--muster" + ], + "size": "240x80", + "muster": true, + "repeat": 0, + "wall_seconds": 8.287411728000734 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/live-240x80-platoon-1.csv" + ], + "size": "240x80", + "muster": false, + "repeat": 1, + "wall_seconds": 8.285459442999127 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/live-120x40-muster-1.csv", + "--muster" + ], + "size": "120x40", + "muster": true, + "repeat": 1, + "wall_seconds": 8.229484755000158 + }, + { + "command": [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/optimized/live-240x80-muster-1.csv", + "--muster" + ], + "size": "240x80", + "muster": true, + "repeat": 1, + "wall_seconds": 8.275989773999754 + } + ] +} diff --git a/docs/performance/motion-low-hanging/paired-baseline/bench-120x40-muster-0.csv.gz b/docs/performance/motion-low-hanging/paired-baseline/bench-120x40-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..8f70230ae56db7ceaaa117df75d5caa298b7cbb2 GIT binary patch literal 5554 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/paired-baseline/bench-120x40-platoon-0.csv.gz b/docs/performance/motion-low-hanging/paired-baseline/bench-120x40-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..dbcdfecf11faf9a7e83f0e14dbd1abc5c6fc9d7e GIT binary patch literal 5512 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 KaTon*KmY(jn`SZq literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/paired-baseline/bench-120x40-platoon-1.csv.gz b/docs/performance/motion-low-hanging/paired-baseline/bench-120x40-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..c023d11cc631052baebe21110fd5d6f4559e2490 GIT binary patch literal 5540 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

  • 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/paired-baseline/bench-240x80-platoon-0.csv.gz b/docs/performance/motion-low-hanging/paired-baseline/bench-240x80-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..da5aa3ec7fd88660bba2ae5bcff85bd565e14fee GIT binary patch literal 5978 zcmV-g7p3SQiwFP!000021AUz9aui7ph5zrfR8-_Wl}|IlfM+0r1p>@&?Az~mlx>`@ z8j>GiyPH-?DIFbM(*OSY;pzC#yYHXgeR)3q{Q2qghvTnrKaRh?zx(&o@!wA$oACGUJ-#vdte=oWr2E-&KB)tolY%&X1XnR}GD-gv^y&r5GEE}*XQT)aC(el|ji8)KG5 zT)i5zjx(4Yt);W~>f$2CEV-VQ|B||$R`X%TQ6jFDjJPuF_u}dzu3e1TW8|Cwu?w#!j6EWM#g2_RJIg!m>{VP0 zS7UN^Ej7f+;ayxF7_%52%VQ+|tr?A?T&1@`l#VfMqup4S}I4#Dbhj>QCaOTs? z6juXZjDQOvt~7sl8F+69sc+=P1z9}KS94m(cu>b#q)&2zO{X^!#vt-W=3fL>FBASDS4=m#DBnb&Zb}h3I=Z+jWK?zy)1mznZkRvvDrH0@@+{ zia*?lxZ_brKXa^pZu~v!aGOO!a3gU6m}pm9R=8J5QR353N0MJP9*dax+xB1G!WaTcUW*Q6vJIkZC|q7ab8j8S^1 zyrCcw;8Si475GaWpzxIQEIX?%V3V$SY2*lYA(2lWQ^zhy>lNfCjB|>3P?toVPV6Db z`IE(+RTsQT_2#RDInF>lpS5yC0#yzSgay>Q>u4SjO`aQv>&R)AP5h??aMCq983-ou zGITY?b|Kt(#7^p0T;`Nc{8ADHTnPZ;u~Lh1bB<|2oODT0S)<>G>NYp5A;Wu?(4-M7Z)Ts*xs9hsZ#(bR_GDjz@{lm}4h#!JK@_Rw;;_iolRVO6e1G zlrq3m;{3?u<)okw!&Cr(!+KNgTdOXZldsuoNXO)49z=Iv9ZjUWn6vU+>ijt-*5@Sa zvTC=oAvt-$oN~=pgN$5ER;>hU66OTbB4nyM@y-R#DyEE8-Bv{kV{6;!m>0|`@oH80 zn`$CSaNa8f5PcJZ6PUS>t%6Iek_g{&9qSHP^MW}g-Ke%FgHTz@n^2T%Wf;r`qt%wfQh*ew^V%6QM7!!I!bdV@>#aE-Um3fp|Grfs#cRDVZ zQ?A)+P-^fLloEEf>8mOTq5Op~X|AK<6%oZbEdNR(73)Ugf;pw#tcvwGA!X(^5uhvC zlO%}_JucDn@KupmA_mVXx%8cm3+9w-IW-{SnR7HM?eM4oMA`r|@K)!j+Fw>}1J9{I zfUH`eSR088=9F8uLQ>-VM)MaZUlsGmNAV8~1m%p=b0iTJnsxH zEK(djDWohDQ+4e)d08;0Ua}Pu!IUQ4B#DINN)FzdMGEvnR)wYVO;kf1F9?}xrS#i~ zTtKH@)0IWla={A=9>|%F(tS2D9Ek)Yx+)LCQxy<#!voe-cePGgP^Vt<6?&Kxe|Uc2 zDDz9{QADl=hRy~JkS%cd6|^=jdp?5xL+_y=1H`HcU+~?*L@$Bs-)Cg1312Q-VPui#VKerz~r#JY(6= ztFi!3yQC}%)!BC-zh`GX(vn18c{FD~L?K0z(+%h8L%0NuEopa_3-Yu}&O#)P8r&f} z<%dI$Swv(}JB~vIf}&b3Nl2a}a9h;#FxzRlKu^0QE#)BG#lvopox<@b@|w3-aP~s} zOseYAfW1Pnyx&N@w>9j7J?)aUYQeBU9}*!vy_AAM}BmRtC??o0I|Fd%1B}yVeDL+9hw1mhldC z0&pFQRQK3Iwbiql4;1DFgPZrWDqfcJOwI$tZi1vP=+iEVs|QkLcf*pM>*PEtw@eMd z!PAm4h#G0HCK=Ati`PnRtL1_|?UK2=dI3o+ISR%tybuEFN_7q!TB5DaxG1GUTHTih zwaX?w*9Cq0C3ST*=%VV1sFu8d*MBCBRoAdzm|r!MHzFS!dM zfY&HX%6+_XL}oG1WnI0X={`DRqQ+BMk=29*J1rOV>6heXYF(*gO^|dvbD|GuKEQ9U zl@%o2Q{+&MP{&YN6T&um)dhX}C3#^!O&YvOL>VvvPm>0C4iyUSiA<_yF<4ku5=W4> zI2$gsk-5N6zqSTzhiJG138)P0cr$*6FzmR^rN$fiQ2toiyyJwqqr2fg-zg3n>;sH-$(jKJoGFsnExr z$b8`X=-zOO)kh<}7dba>6gI7`wt$gca#@O{Dw(O548u#ae3z!lM+U7t$dLNprKzLa zNua{4*82wM+X6?{u6-D=6bMw0UQjS*YVoIO>iI}f9L&p0%?{x2RlZIkpLdEbcx2bE zA+Q76q2wFzf;w}Hce0?IYB7w-O}r*Fm4xt5Wxvc9yAxgT$i}S~136Ld_x8`Dh}Xek zb(KiimW=1U=!C}VI1M#t)z;m>QCr|>ToM}Ubjc)7SLL25bLc#MBBLZ4l<5>uW2ko+ zyfKAoY^UdfM&nwI#YP17s@A$1+mnM;?}RGfcxgqERK4aDNP)L18$xP%lSTUiMkC)G zw+#?4!@4NtCl)pDz9RKh=U3BTa;k=tf@$!O2TWxL3VlJMaV^J^S9(Q*SWUI3L_H&l zkS~sFf^{+!&DyCR#6Ewp)a6Of<1Td?qxt;U3bX7x8PN~ zRB&)3aDkw4Z5}4&WHl&D7Nwmks%eze+%vUg@Mx9taFIqb&PpxB$OZ}e0zbp9-a62* z4=)4fDU!xqL)p@-`m8IG&SLjMo}|fp>UP@v3wq+q=Ec{a&#zrBr?Z4XX|B=BDLOBS z$+4VjTb)vt?BzoJ~RFS3pQWUA4#oBO8(Un9F4~oSBRs#@f?}cpx zsQ23`t`c((&LGtW@u5uizD!D*Cd2g_dO+&ViTQIH?d4^MiI>eykqweGLVbst8A~~mdvPGc@ z1r{fQ2yZ0X9dH(jv8na~)_SQ9<4&U8-1g|nVs1^{x{qdBqTo9W^0Pr4i#J?-BhsSJ zx>Tm*XulXiDhiLGu9Il>P`f`(noA)O#?E&v-O|Tfk!Xn@n)X2A#2htnIN}76SE)&H z=2QIUqq;DB7M!=l(()}&u0biTF=FzbW$Lq^r==6E8+g+~rL{Bp6x1e#pNXpQ?{*QS z+z7!c6zxv&3N^S@g1FC0BZB@EvZ+|mXfb;G5JD6+Nz7$CpS3&lS%vmN1mdTIDo_mx z??6k_F3O2J6}2{9jtLSV(#o5vH#gMB+KuDA3Wc<)7LZv((SlL=)rAh3xUECPeQ>Bw zCe0V7nyQ5w({5y9{YGb3sUp$INpx=B5cX3wNlncgB$67v=$6NkV3W8|&0AVvc4O{~ zRL&+&dc*m8zuUVrzH#8BUL7G~MmWHM57i5KTaMYd6)CG!)d|{4AsR@KJ~RM< zyGu2SKj|7z)9`o}3=~D`Y4%)qZTE4n#}=tgV+^f;P-J&s`*B@W<`I;*e0Sp2o1}ID z6hW$PIh=c!vPZm?o~u+JpNgjv7u0|HktdbdDU8mLrK`38zu~s07@8|cICRmtDtg-usNS6G$hU^V8>#AonM&SXeUSP< zU~Jzsm@}_FmFgbVCupy{3gZvEow0IjoxDmNb!gb9F6m>J$p_Uw2h+Bb(ri>0nIov` zpg?f7WJdaEyEgo|w}@Va8l)9jHhU)&gLCnZ|D_pcYt>tfLGeT=XYYime+Yuu?oivU z6Sm4ECWg(O7sBNM!G_GDA#!y`s>NZcI-RMC!vOW&xo^KU{9a{tA4_XAqaJk;i^8gK3RMQEzsN35VAa5%eul|<6T zREGE8hOe}ey1QoefJOEFlihS)EsyKi;ZMPkTezmb-O&dk8M7U;XW=~g{r+aNhYvgy)euKXVqeB zPmk`gVAnTFvwD8o53ViRPH4N01z&|`fqk1`PrA+VC7l93!`qq)Q}fzhbJ?88Ki#)z z)7S~^xAEs9RKv)mdI5Bt)AQoXWJUXm0J{qvYDFdKn;}o)6_DY+^DNd`)AXdm%RYNE98SdBC_ zg20UGS&lMpC$!u)YF42+doIyhrmrMwLT6f3(n)HRq^_BcyvvQWQsY@}w5`nh-q0K4 zcE6XPMIkw-hl$p)Dn+sOB3kl?P=iwsKjw;yCL=qU?Y14Ymf|)0ux^OlkGUYJp;Z(X z`YK_2$R&konpf&(hSh(NbS`J>`vXBh@-s zdTU#|ZMv<6BK*D2%SRA@dtH%gYUIo{u;fcA-MtZH3|=0$ZLo~nKHsXR4e#NYT5m5S zd@X{hmJqgQUXK$Xb)GpsCIdTGAJctnan;k*tHFoFg>1Yo5oX}eo4NJ$EEW_oy1g_9 z`p}A<%y`?)d?QobP!ove%?&S0g-}|66Qu^Avai@x#V4WSD-?Xt&TrRk>3l2Is4;yL zgNQ$U_gXDMUHa0jT@B-;DZcdduqAvvrN(WKHNM%GZg<;upGcC6!Q*)+OSDE;DYQ5t znb8+CRWPL-qAyW|?Y*V=W@Ebi6X0qS%u4yyN!Dyev)O7|3vZ7#RJD_-Og+tL*Kik~ z|FAQ?>Zur^u2(-^2l*IqCj)b$2@bLlY9e z1{4(Sr`VtH=L4H4|_^RuW1Kyc!xRcfy{#%?YV*DdOFZ$3&t@Yb(VCYv|nnpkD=T`^rV^5T<# zR98VrCcYDQ>$frA?~A?hp?TX*J`-ln_C;!4!Br^gJfrtRqxzA9_iL35Jl@6Ux=9^x zxr`s217DF3mB$qoHAowAtFEKYGvrxccuMfAMp49QC$rz~{=LCl@tu6|0vK3cFR5rq z*fb9q6spiE|a1=V($**16N?_tOEmw7}`jFGpIH2S^HN(|K*WDV8my5YZ;Le#7JuQm`{u&T*R4T5`vWR8FR9|ona Ii55fv04}SZ82|tP literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/paired-baseline/bench-240x80-platoon-1.csv.gz b/docs/performance/motion-low-hanging/paired-baseline/bench-240x80-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..fcfeca05a934d1c2483ccb5c62801e410aae55dc GIT binary patch literal 5982 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 Mzf;0HR2xJ905rX?g#Z8m literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/paired-baseline/bench-320x100-muster-0.csv.gz b/docs/performance/motion-low-hanging/paired-baseline/bench-320x100-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..0f990a5df6169c394301ce3393bf7a116b2ed717 GIT binary patch literal 6198 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 UM1#{(S_Wfp2P;Sc3_Wp@!tLW6g6J! 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 RVj-7*{Xb?gZF$Z_001*L>~;VE literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/paired-baseline/bench-320x100-platoon-0.csv.gz b/docs/performance/motion-low-hanging/paired-baseline/bench-320x100-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..565953c25954ec0053d34c5c65bdbe81efe4110b GIT binary patch literal 6207 zcmV-F7{KQriwFP!000021AUzTZX7udg#W*1X*Bd(;?pd$iFaclmjsD(hkN_`igGrZ zZbyp+VtdBJmP8hdMauvF^5N@gAfBty>^x^pH>-XcYZ}0y7bo}@E!^_9x zR*B@WMefjfA-@X6%?(^SIAO3j%^y$<0+zn3RI?A!Cp z(;x5O@#BB}`Skhy$K&g#cQ0Qs`R(b`lO7_~BOEz}BZhE+Yv_#qx{}vTusKze~Zc9+F6HQZsUxRpXAdD zzcT7LTaHI5SX1eITrn$0EIEhtdy{E3nObXoF=->8sqrD9@I@*70^jGOgc{G@ zG1>bWD+{ZYCrPb_&YlztE&SeOUQL$E##&-=wezy2bMOTl8_h6TupP18%9%%#$-%2_ z@X&k{V{gAVSyq$vabt5z@ob5Giy7PICIkCWGRq&BlF86Gp4xTNJy&gPEy3*fChKal zT{kxNGslQYYz^~`wV_q&Z27*GaK^%3wwQUKQA*?8jT4H$H`!K`<8fniz)NzL$!>g6 zr%8^G13eoKQ-*$vy~LLqCh?yllh!vL+gFoz-B|Xmk9@>5+8KJ$#+H_jQhR0jc2t5T zC#|w(UbWig-`cFrS&qeI438U|L%>AAA^DUuch=F)#y^E~Ju!#JX5VmLmn()GI|th% z+w*&qwwg?rjg2^Jt1KdAg;4Uil>2aIuN&J>t87CvzRSTPxDb2EVPi6`@Z(Uh?rh-j z8u1uYw6o%xa@pjEX(!Kd6l-jK*UFlnQ7`aK2P`%=SNw_Py0vCJ2=7XqUPx}U>NK-~ zJFL3~o+WB&IqHxqI|bzB5;r~@R{-K!FMAu(*&BOX`JxoJX~LbxUdK_6S~*S@&USX$ zWX*i$s3C6vD6R;^(_Z!#4~c9c>ul%1WrRQh49T5M&iE1s?&sMvkCrq4@Bqe^Y`iwE z5JVn$+}i|nkHFS}-0ZwZN(hP+&ey zz1HctLn7n-L~P&*t&g;el@*23C5aKAkss;=!r=V!j1{3eftut)f++=XZ%U_Sl%c(C zmUer)!cZ#Ly(M!rfIH&+f?~mt34JPwv+=t%y@Cdd=IJXb#tx1M+OV;?;!wJ!u_(XA zEptt$-lNo#$SKv7frw8)qq6YW2MZ*LRj@e)0C)rNX~m(`u6|pC9~()kP8tOEDOO+t zr!c*C*4yMmMTDu za;a=~{@>VKaVT9gSq|+iqI>YW6XN0P#B}Kdk!5W1EIgU~maqjWvXVNvHf>@htvHmg zsf+^!5Xbb}SMnv;Aw0>RgntE}sz}5LP%utF*q35zVS__y#i4x7WjF=tLzrMVPnlGR zc!lQ;Atg4!VPZx$@gZOWFio+C9VVm|hw?R-B}|c*Kn@sQ!v?XEqNgzOC%(`^hHMIN zg@ACsCbAF*1axC_#i3koe%oi-ATM&T6BF>`(zVy%5@&qMV_9cl$A*#q@DYM#lULG; zL;0G^NG#xv7|Lwdu!Qk!G2CBK;2;RoIq6&r=0T6Z&w`3*IY&s;Gqwd#74G> zeTtP9@!N1vP@HYB`6Fqa1|#IqA@XJCLn{vDTP}lw6m4B8$*H^Y=g{6}FoJwvyNU_f zjHX&bJQ15CkIg#sibLg^%iNSQMbWtx&nu0TOR5I*NYAw?V4LSM-fvVEyeU<%e`9mS zp>oY-Im0lcn50ePm=d$A6c{H={Q&1*F@69*JacxOX}xUfvAp6?x#lvG84OyPoxGA~ zUJ0Ohp-ed`oqTV_v{`5Hasp%EOrQ+h*j#a_Tyt3+z^T?*S#S%^!4jB2%GSDJ@txl? z=Lv!*3O7;xtU6+2bH$-@&1G3(DYnrF8a7ya+i{s<090m6TI%z_`>0V>_i#|AHrw!o zyy8%4H@ux+P)o{hhp$rw=cqgkI7`CBf0g>l)=+KgH0`a$wmZ)ihsrgV)gW5u=LyD< zCskmJ?ga{Kqtb3cg|=vPP^^#-ln64*-{jA{;!wF&W$>ZyH8VI=vX@8(wZMl+IKo?E zMJI_(kb%m{1dy4X-ucjqL-m%+pa-g*DcVJZ9B&g(#d+#`7OZ-uI}VZZ3i#{<20pwy z&lQL2C6`fk5gWKC$1`-=vPqS2w3u#BtG41UzaHvXikv!D5iph#Y^^(h4QpqQ7GRWC|_}&)i%)mjx*{%hjQN;y}MU-Xe z0muw+#Es1rhw3Gl!PW)sI!|I_1Q#$ONvj)sD*oQ2gDF;w@=vK;rb%Vw*Nx2;hw3Gl z;W?ef3r^v)vCf>0sS%puQaa77@d*;KUGlr<! z6CHvhHAz5`M7P=Cx}s6LWHj=J#AtFAc2`5x z6_45_r{T^NWLeZTP^rba!$XQYa89)(MV0fVyum6k2=5(DBpcQlH^^I8MCzBUhE+vZ~fkVHY|KoI;KF>Q_l@rTd{#MsBRG*wn|Z6T!v?KUc6Ri<))fL>d-k4Igff z5@HTKVGv5-yCylf?y#w?*fj3#vpfZq2r)Pn8rtD5pluTB$uSQ8zE;UMI9vjvc)9P` zc3ZJ&+|);&85Sn*VMA?FC36PAPftmzvMz0f9gdVZ@K!)1@f>y6cUiG%-1JA0CC8!; z!7jAMRbV=$t z)qmP`3EGNH<661#$WTF{0@3KS%q4rC6kcPekxG@-fnb#};-hSAcg>-toz)ea#31nqyR7z!62-GBhbXJ$fdt?21`#OaxtcEpGc$x zUzG?teW=C3o@`C7z+_iRvKNsi%4j9Ckf#5dOiHX&oKRgj@)rdx&?G_(aoWIsUqQ*P zf+P_$yclg!9AXNRu9y$8328Z?e$uRge^a~H1(4Q_#b1CFe@=&d`SJ2klu|ILL&G9r z{xe9cXdTrWxERIVA&6c3i%AoM0c)C{la6$THb(x6E;O z*maqsdY#S*WN>hHEhQWb$vh+z+$Z}OOi`=JOe~!GE9{0C>>ioxGNTG{RsB$s8pmu} zvNgbyfw=zpcrK^i)Y-45 z@>gnB^+;;yyVxA@4!En?qVh?2%IBR$4WK>&q4%h2PqGrZO?*)$6z3YdYo-L~CR|3k zXP4Ei3Q`Jt^+5q@d(RZBfTd*T)>BSt1Wll@L*Ohth0q_!Ng{#*4w~F5*73BLAs#| zOO?_^EnT&r(tfpXkfg;d$t!t}mh>nZ>;jrI{bo3L3aZROD?&$nr5y#bp{_Lfr*5KW zv^yhQ%w~}0RfpA{Mo;3ixeperF;7TiG%r&M2~f9 zE})=k`{728Nljy2>f2;fyRlMD2~Jr0?rg`M>n~;lo}+dn%!dS8XNeJ=G>bflsA;v? z2lTWHL~~Iq%GA2rn6-Oh^I%rBq8bS%F>MZzB-g5y+e~nwl1Eg#jw)e;syupSvm5WS zH>$W_W+Ckysfz-`)J>k#dLpnP!V@_{H|siEBPCMCL0u&=!PYkf&EmaeUCpXHE8Jz1 z%_)P}s90yvoRCCBX~anZ)Uq-k9xr(Vvb5vCmhScWVzxQi)UJWCuI`AARxi*^!hCj- zNpm~kgVGM<#Z?s!Y=g;`?_$JiR^Zfp+y@?`W{}R-3&cujb*YEy%q8FCB5jLmN712f z_Qq_vD=)vyM$XG{AweGjq=`r0bzz(?>02p-jJCVv&DSE zB6=M`o||T!)XTMrlSA_l&E*l;l)5-_>s*5EW@oJ3HMK{x-Q^^(9S-Betdx+NN-!_Z zCHbT|%ENmpJfPi@K`4UKE`a)7KwQjb>06p9!)zq3&CQDA*F@%#?B8*^3L&sH{NCc)h;%n9bOZ&zq5Um)T&cxo^TjKD0%&rQjsc+TWj!> zLyo&K@sRF4j$d|7lS3Movp;M-p^Ug z^3-6jdYhudvnl8!gZv_;iRxyP2E{hOd_ZL$+(A3%UAN4IoNMdqm)Y*jFgY32j3{xg zrWzGa6+2gtuBo{t;YCTHO2loNZQo9eYvS|Pq+6_3ZveX0>{^c&i!livr@6Y8PgQjq zJWJltmujL509&i=-j4ibm0wmvUl$36bV{32;y5%h#0$;&s`|?bGwRb7$(X>$c8EKM zes8=kR`CvKtOi-w>OLC|68uL{uZJ}@kh#iGATw$x&UGnvpl>If$Gye8SQS`^qeSWA zRoPaOvHHEaPVEOb({xrebtp?8u3u7)>}aC~R&LGoUsg*eWV_3z?64+`eY#N1Wm(J8 zeu8&IVOoAQfWVSm9JUivF}^W2uv+!;K~*>bnc>??iqJdFJwvJG(6yzVrWYSZy6dgjD-x!& z7m%XLuR@m;k)mo^a~Z+QA<8I@1+{f_NTDmCj`n{*{^ZteE_R7&{^7DW$d2c0ZIz{toMO8r- zz1Uf``@rG4!#X|KGkLk9E z3o~Vh5|4x4H%(I)O}a?Gc6iLmU_x%QttMVdx^M@H-`=fxYuNk2o1#m^5-R8L0+onvOAVI} zhM#L!epQ}7C<9c^CrH3H=RA&kr#lX(*$f4B;QQ$xZ&Kn_Z>9PSlKJelx?0isE6Jj4 zy{X>^_*bhxKUB8{Bnl-_LZ$nWT+FQ*C-)01L-Vjbc_$p|x#dj{Bj4$k>F`Ftp=w17JJ*tqfgK-QCoBBRk!+z`8}IF3mRR~(mfk>gjL#53e|btPGtm1VoV_= z?s(I~;CH%Zx*%$=`*b?sJ|&7E3aXZ@bsB=wPSBZ;%Y_aKK_&eP)oo2M&;+h>|w!>amCfYX?o z>uz2+<~J_HJ*-uAjo(gFKDD0=rfBlJ_qoGO!hMgf>zVg`MzogfQ|EQCEa`uaO!yrbtyKnet~M`Ks3>KdZ4S=c-Md7^YDwGMYP%kg0# zJX|wfvZ@PH8i+`93d9uxtySqB)KJ6U=P{eB^(@uzla_ddw{;IaUbj@2u005P|LRkO+ literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/paired-baseline/bench-320x100-platoon-1.csv.gz b/docs/performance/motion-low-hanging/paired-baseline/bench-320x100-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..2e96498eecb98c94b72ee9098054b5058fde5820 GIT binary patch literal 6183 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%0DW z!C(R(M>q4n-te(+C!BXU{ICITw@k$~r_`bJox<=17zmUvI!UTRzp2?~ouX%};eNl(xkir0OMdOS zMDK3-cu7}fy))u_@4h5rRf;Da7d68m7GbO5alg0vAXU3~@+RsTjhX(rEIWp?@2nLv zzg#JO>qfAJNuqXA^BXsGSE-P(p-R%!4)NOwUgKq83DPMxwe$;$ZN2GX z7u>FyPRp@A7B%k;&y7UCIS|v_i~*bdb`@u>erZrQJ#~9_HzBo$ZE(9~I%+=j-c)hw z&SCmFY{{DSlPr)*o)vgC%}L4c^PX@ByOm{o*ar`{Ocxwxby-c9fc?IJH->Q_rFWr3 z^aj0EO@Sjv6(z6xWqW(r2oL?HVQo$MA1ENx^?5DNDJW_=y`HMnc7DTLP4Y;T>C-ip z-CC99H~wD0D%JXQQMr{jii?k&A-;H%Za?Y5!>b@8d8ck%kL6&|jcj(1lV zxT_nMW>-9UC&>R8gWxpR;uxhVTb#>;b8B;3(>?5khkP3=)#?LwHBh}=_8yGrw%XKw zg+YH;Ao|}!(Av29{vw&kw%*k5f9hhDnl*Fw9-OxHCR@`a3X<=CF+hI>qI(NLW6D@Z zsXpzmbsIV3{x>}yMri86*wnC+n0Kf}e8=#vWfsTKGE%8E%(cYky_1yx^?%Mlyk1&G F003AF954U? literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/paired-baseline/metadata.json b/docs/performance/motion-low-hanging/paired-baseline/metadata.json new file mode 100644 index 000000000..2e222cad7 --- /dev/null +++ b/docs/performance/motion-low-hanging/paired-baseline/metadata.json @@ -0,0 +1,132 @@ +{ + "binary": "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "sha256": "6af8b0db3173a9fadd6393edfdd3b30e8dbf166dd8abf998d21598f81e3bfdc4", + "runs": [ + [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--bench", + "--size", + "240x80", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-baseline/bench-240x80-muster-0.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--bench", + "--size", + "320x100", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-baseline/bench-320x100-platoon-1.csv" + ], + [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--bench", + "--size", + "120x40", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-baseline/bench-120x40-muster-0.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--bench", + "--size", + "120x40", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-baseline/bench-120x40-muster-1.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--bench", + "--size", + "240x80", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-baseline/bench-240x80-muster-1.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--bench", + "--size", + "120x40", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-baseline/bench-120x40-platoon-1.csv" + ], + [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--bench", + "--size", + "320x100", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-baseline/bench-320x100-muster-1.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--bench", + "--size", + "240x80", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-baseline/bench-240x80-platoon-0.csv" + ], + [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--bench", + "--size", + "120x40", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-baseline/bench-120x40-platoon-0.csv" + ], + [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--bench", + "--size", + "320x100", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-baseline/bench-320x100-platoon-0.csv" + ], + [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--bench", + "--size", + "320x100", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-baseline/bench-320x100-muster-0.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--bench", + "--size", + "240x80", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-baseline/bench-240x80-platoon-1.csv" + ] + ] +} diff --git a/docs/performance/motion-low-hanging/paired-optimized/bench-120x40-muster-0.csv.gz b/docs/performance/motion-low-hanging/paired-optimized/bench-120x40-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..535ece8f8a13804a7516248693fb97a968c507e2 GIT binary patch literal 5519 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 C^Rbcu literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/paired-optimized/bench-120x40-platoon-0.csv.gz b/docs/performance/motion-low-hanging/paired-optimized/bench-120x40-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..4b136753403ff0131707be176aaeea0b3a29f32e GIT binary patch literal 5493 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 aph)*rQ$>3#Hq%NdfBYYC+x_HJKmY)QFR;A; literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/paired-optimized/bench-240x80-muster-0.csv.gz b/docs/performance/motion-low-hanging/paired-optimized/bench-240x80-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..b732e683131b95a8b676e89eb679229fa358e966 GIT binary patch literal 5986 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 QWBlj;0LvMHSW`m)0PT*k4gdfE literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/paired-optimized/bench-240x80-muster-1.csv.gz b/docs/performance/motion-low-hanging/paired-optimized/bench-240x80-muster-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..7e2a9afe287a29776bb7de773988c2ec8054dfd1 GIT binary patch literal 6016 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 ui#-EkG->z8i>5s#Abz91?bFc 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 IW9mZy0I9Ut0ssI2 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/paired-optimized/bench-240x80-platoon-1.csv.gz b/docs/performance/motion-low-hanging/paired-optimized/bench-240x80-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..166b836dbe2cd46d734fe40ccdef11425070e581 GIT binary patch literal 5996 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 a4E@pv39tglXy1|5|N4K!JMSIrLjV9lTbqyo literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/paired-optimized/bench-320x100-muster-0.csv.gz b/docs/performance/motion-low-hanging/paired-optimized/bench-320x100-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..cd72cf2e2e245e0ad7406f2f3bdcba0ecedabd00 GIT binary patch literal 6236 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 Ubs;s+mCJwrA1>A_Xsbj30M*j}hX4Qo literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/paired-optimized/bench-320x100-platoon-0.csv.gz b/docs/performance/motion-low-hanging/paired-optimized/bench-320x100-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..ebaf4ec28d33dedc094e322450d6ae07604e77e8 GIT binary patch literal 6142 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 Q*_VI)7f^g4t2#vh07xwp+W-In literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/paired-optimized/bench-320x100-platoon-1.csv.gz b/docs/performance/motion-low-hanging/paired-optimized/bench-320x100-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..08bfae03b13bec7be47ff3cb700373d2d1e12b81 GIT binary patch literal 6150 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 Y6Sf%U7~-6NO8H;^1%XuObvs1>09KL_9smFU literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/paired-optimized/metadata.json b/docs/performance/motion-low-hanging/paired-optimized/metadata.json new file mode 100644 index 000000000..715f49c14 --- /dev/null +++ b/docs/performance/motion-low-hanging/paired-optimized/metadata.json @@ -0,0 +1,132 @@ +{ + "binary": "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "sha256": "73bb430a2f8ec3f9a11f0679fbb0ccbffe35fd28f7d137a3ee72cc9830e32574", + "runs": [ + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "240x80", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-240x80-muster-0.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "320x100", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-320x100-platoon-1.csv" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "120x40", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-120x40-muster-0.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "120x40", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-120x40-muster-1.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "240x80", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-240x80-muster-1.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "120x40", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-120x40-platoon-1.csv" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "320x100", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-320x100-muster-1.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "240x80", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-240x80-platoon-0.csv" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "120x40", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-120x40-platoon-0.csv" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "320x100", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-320x100-platoon-0.csv" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "320x100", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-320x100-muster-0.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "240x80", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-240x80-platoon-1.csv" + ] + ] +} diff --git a/docs/performance/motion-low-hanging/paired.py b/docs/performance/motion-low-hanging/paired.py new file mode 100644 index 000000000..1abe77f9f --- /dev/null +++ b/docs/performance/motion-low-hanging/paired.py @@ -0,0 +1,22 @@ +"""Interleave unchanged and optimized binaries to reduce host drift bias.""" +import csv, hashlib, json, os, pathlib, random, subprocess, sys +root=pathlib.Path(sys.argv[3]).resolve() if len(sys.argv)>3 else pathlib.Path(__file__).resolve().parent +root.mkdir(parents=True,exist_ok=True) +binaries={'paired-baseline':pathlib.Path(sys.argv[1]).resolve(),'paired-optimized':pathlib.Path(sys.argv[2]).resolve()} +env=dict(os.environ,TERM='xterm-256color',COLORTERM='truecolor');env.pop('NO_COLOR',None) +metadata={name:{'binary':str(binary),'sha256':hashlib.sha256(binary.read_bytes()).hexdigest(),'runs':[]} for name,binary in binaries.items()} +for name in binaries: (root/name).mkdir(exist_ok=True) +cases=[(size,muster,rep) for size in ['120x40','240x80','320x100'] for muster in [False,True] for rep in range(2)] +random.Random(1911).shuffle(cases) +for index,(size,muster,rep) in enumerate(cases): + order=list(binaries) if index%2==0 else list(reversed(binaries)) + for name in order: + output=root/name/f"bench-{size}-{'muster' if muster else 'platoon'}-{rep}.csv" + if output.exists() or output.with_suffix('.csv.gz').exists(): raise RuntimeError(f'refusing to overwrite {output}') + command=[str(binaries[name]),'--bench','--size',size,'--frames','150','--profile',str(output)] + if muster: command+=['--muster'] + subprocess.run(command,env=env,check=True,capture_output=True,timeout=60) + assert len(list(csv.DictReader(output.open())))==150 + metadata[name]['runs'].append(command) + (root/name/'metadata.json').write_text(json.dumps(metadata[name],indent=2)+'\n') + print(f'paired {size} {"muster" if muster else "platoon"} repeat {rep}: saved',flush=True) diff --git a/docs/performance/motion-low-hanging/phases.csv b/docs/performance/motion-low-hanging/phases.csv new file mode 100644 index 000000000..9f0f206b5 --- /dev/null +++ b/docs/performance/motion-low-hanging/phases.csv @@ -0,0 +1,181 @@ +stage,mode,variant,size,phase,frames,widget_p95_ms,total_p95_ms +baseline,bench,muster,120x40,early,198,0.6705679999999999,0.971231 +baseline,bench,muster,120x40,middle,138,2.5162240000000002,2.8864409999999996 +baseline,bench,muster,120x40,late,111,6.76564,7.046175 +baseline,bench,muster,240x80,early,198,2.48071,3.611153 +baseline,bench,muster,240x80,middle,138,10.805448,12.393685999999999 +baseline,bench,muster,240x80,late,111,29.459522,30.457258999999997 +baseline,bench,muster,320x100,early,198,4.030549,5.756536 +baseline,bench,muster,320x100,middle,138,17.285876000000002,19.631408 +baseline,bench,muster,320x100,late,111,45.218258,46.789610999999994 +baseline,bench,platoon,120x40,early,198,0.68165,0.978505 +baseline,bench,platoon,120x40,middle,138,2.6840509999999997,3.103603 +baseline,bench,platoon,120x40,late,111,7.503365,7.726148 +baseline,bench,platoon,240x80,early,198,2.7024540000000004,3.882594 +baseline,bench,platoon,240x80,middle,138,10.13865,11.415407 +baseline,bench,platoon,240x80,late,111,29.234244,30.237323 +baseline,bench,platoon,320x100,early,198,4.1860550000000005,5.975324 +baseline,bench,platoon,320x100,middle,138,17.03664,19.173696 +baseline,bench,platoon,320x100,late,111,44.830123,45.822134 +baseline,live,muster,120x40,early,136,2.143333,5.819221 +baseline,live,muster,120x40,middle,88,8.863742,15.445531 +baseline,live,muster,120x40,late,74,23.64414,25.042162 +baseline,live,muster,240x80,early,137,7.815131999999999,27.291370999999998 +baseline,live,muster,240x80,middle,88,19.101868,38.174567 +baseline,live,muster,240x80,late,73,32.628883,43.410148 +baseline,live,platoon,120x40,early,136,2.154066,6.341284 +baseline,live,platoon,120x40,middle,88,8.891172000000001,14.607147000000001 +baseline,live,platoon,120x40,late,74,20.909663000000002,25.216504 +baseline,live,platoon,240x80,early,141,7.919396,27.500708 +baseline,live,platoon,240x80,middle,88,18.352589,37.009482000000006 +baseline,live,platoon,240x80,late,69,36.138699,53.498996 +baseline-check,bench,muster,120x40,early,66,0.531474,0.775794 +baseline-check,bench,muster,120x40,middle,46,2.4138539999999997,2.705288 +baseline-check,bench,muster,120x40,late,37,6.054111,6.226587 +baseline-check,bench,muster,240x80,early,66,1.998558,2.921306 +baseline-check,bench,muster,240x80,middle,46,8.763069999999999,9.970379999999999 +baseline-check,bench,muster,240x80,late,37,23.614605,24.138869 +baseline-check,bench,muster,320x100,early,66,3.314934,4.808321 +baseline-check,bench,muster,320x100,middle,46,14.472306,16.564673 +baseline-check,bench,muster,320x100,late,37,38.76745,39.814911 +baseline-check,bench,platoon,120x40,early,66,0.504043,0.731719 +baseline-check,bench,platoon,120x40,middle,46,2.186989,2.494103 +baseline-check,bench,platoon,120x40,late,37,5.705334,5.847042999999999 +baseline-check,bench,platoon,240x80,early,66,2.039624,2.983612 +baseline-check,bench,platoon,240x80,middle,46,8.786648999999999,10.143934 +baseline-check,bench,platoon,240x80,late,37,22.769443,23.310443 +baseline-check,bench,platoon,320x100,early,66,3.329931,4.861764 +baseline-check,bench,platoon,320x100,middle,46,14.521607,16.553145 +baseline-check,bench,platoon,320x100,late,37,37.998428,38.872446000000004 +baseline-large,live,muster,320x100,early,79,11.26534,37.070869 +baseline-large,live,muster,320x100,middle,42,20.491813999999998,60.316455000000005 +baseline-large,live,muster,320x100,late,28,46.122177,65.929915 +baseline-large,live,platoon,320x100,early,73,10.766627,42.038999000000004 +baseline-large,live,platoon,320x100,middle,44,23.074623,42.292622 +baseline-large,live,platoon,320x100,late,32,40.385802000000005,53.77537 +candidate,bench,muster,120x40,early,198,0.36351100000000003,0.626351 +candidate,bench,muster,120x40,middle,138,1.509314,1.8804269999999998 +candidate,bench,muster,120x40,late,111,5.994036,6.138877000000001 +candidate,bench,muster,240x80,early,198,1.545704,2.5972210000000002 +candidate,bench,muster,240x80,middle,138,5.455901,6.674459 +candidate,bench,muster,240x80,late,111,21.564876,22.264516 +candidate,bench,muster,320x100,early,198,2.062969,3.556536 +candidate,bench,muster,320x100,middle,138,8.197889,10.218803 +candidate,bench,muster,320x100,late,111,33.165784,33.887129 +candidate,bench,platoon,120x40,early,198,0.314678,0.542956 +candidate,bench,platoon,120x40,middle,138,1.289664,1.584665 +candidate,bench,platoon,120x40,late,111,4.938809,5.036873 +candidate,bench,platoon,240x80,early,198,1.249346,2.1640479999999997 +candidate,bench,platoon,240x80,middle,138,5.1093779999999995,6.339118 +candidate,bench,platoon,240x80,late,111,19.808894,20.264196 +candidate,bench,platoon,320x100,early,198,2.296493,3.994473 +candidate,bench,platoon,320x100,middle,138,8.796591000000001,10.719876000000001 +candidate,bench,platoon,320x100,late,111,33.008162,33.64982 +optimized,bench,muster,120x40,early,198,0.317904,0.5486989999999999 +optimized,bench,muster,120x40,middle,138,1.343513,1.6545070000000002 +optimized,bench,muster,120x40,late,111,4.536020000000001,4.651463 +optimized,bench,muster,240x80,early,198,1.369491,2.413346 +optimized,bench,muster,240x80,middle,138,5.4607719999999995,6.657604999999999 +optimized,bench,muster,240x80,late,111,18.257146000000002,19.209212 +optimized,bench,muster,320x100,early,198,2.2160659999999996,3.877431 +optimized,bench,muster,320x100,middle,138,8.84577,10.84801 +optimized,bench,muster,320x100,late,111,29.904592,30.611990000000002 +optimized,bench,platoon,120x40,early,198,0.31446199999999996,0.540849 +optimized,bench,platoon,120x40,middle,138,1.2884179999999998,1.603591 +optimized,bench,platoon,120x40,late,111,4.650229,4.769220000000001 +optimized,bench,platoon,240x80,early,198,1.246736,2.162341 +optimized,bench,platoon,240x80,middle,138,5.064007999999999,6.2440050000000005 +optimized,bench,platoon,240x80,late,111,18.257792000000002,18.676548999999998 +optimized,bench,platoon,320x100,early,198,2.110229,3.642102 +optimized,bench,platoon,320x100,middle,138,8.944982,10.926252 +optimized,bench,platoon,320x100,late,111,31.004971,31.783533 +optimized,live,muster,120x40,early,136,1.318281,6.4756409999999995 +optimized,live,muster,120x40,middle,88,4.928752,13.4486 +optimized,live,muster,120x40,late,74,16.878166,20.440514999999998 +optimized,live,muster,240x80,early,137,4.694187,28.524658 +optimized,live,muster,240x80,middle,88,12.122279,35.180747000000004 +optimized,live,muster,240x80,late,73,32.284909999999996,42.686029000000005 +optimized,live,platoon,120x40,early,136,1.316837,6.912005 +optimized,live,platoon,120x40,middle,88,5.117741,12.312249 +optimized,live,platoon,120x40,late,74,16.124807,20.299906999999997 +optimized,live,platoon,240x80,early,137,4.613107,27.411938 +optimized,live,platoon,240x80,middle,88,14.35185,35.465764 +optimized,live,platoon,240x80,late,73,35.876728,43.766228000000005 +optimized-large,live,muster,320x100,early,72,6.878279,36.968744 +optimized-large,live,muster,320x100,middle,43,12.413381,43.408405 +optimized-large,live,muster,320x100,late,34,39.846318,65.949569 +optimized-large,live,platoon,320x100,early,70,6.5854099999999995,34.629752 +optimized-large,live,platoon,320x100,middle,44,14.543727,40.428812 +optimized-large,live,platoon,320x100,late,35,35.667038,49.618545 +paired-baseline,bench,muster,120x40,early,132,0.5218400000000001,0.739268 +paired-baseline,bench,muster,120x40,middle,92,2.272812,2.5839749999999997 +paired-baseline,bench,muster,120x40,late,74,5.914008,6.059067 +paired-baseline,bench,muster,240x80,early,132,2.026648,2.946852 +paired-baseline,bench,muster,240x80,middle,92,8.768479,10.285191000000001 +paired-baseline,bench,muster,240x80,late,74,23.323115,23.961767 +paired-baseline,bench,muster,320x100,early,132,3.362882,4.909088 +paired-baseline,bench,muster,320x100,middle,92,14.900557000000001,16.813177 +paired-baseline,bench,muster,320x100,late,74,38.869207,39.991526 +paired-baseline,bench,platoon,120x40,early,132,0.5053489999999999,0.7420359999999999 +paired-baseline,bench,platoon,120x40,middle,92,2.2277109999999998,2.532926 +paired-baseline,bench,platoon,120x40,late,74,5.674271,5.822421 +paired-baseline,bench,platoon,240x80,early,132,2.089555,3.047094 +paired-baseline,bench,platoon,240x80,middle,92,8.990758,10.209848 +paired-baseline,bench,platoon,240x80,late,74,22.830578000000003,23.213681 +paired-baseline,bench,platoon,320x100,early,132,3.3625920000000002,4.914644 +paired-baseline,bench,platoon,320x100,middle,92,14.917022999999999,16.971572000000002 +paired-baseline,bench,platoon,320x100,late,74,38.154658000000005,39.279261 +paired-optimized,bench,muster,120x40,early,132,0.314437,0.5443239999999999 +paired-optimized,bench,muster,120x40,middle,92,1.291069,1.616819 +paired-optimized,bench,muster,120x40,late,74,4.508149,4.629402 +paired-optimized,bench,muster,240x80,early,132,1.2488050000000002,2.175944 +paired-optimized,bench,muster,240x80,middle,92,5.412014,6.598925 +paired-optimized,bench,muster,240x80,late,74,19.344772000000003,20.117789000000002 +paired-optimized,bench,muster,320x100,early,132,2.143454,3.84497 +paired-optimized,bench,muster,320x100,middle,92,8.865928,10.836077 +paired-optimized,bench,muster,320x100,late,74,29.75821,30.48668 +paired-optimized,bench,platoon,120x40,early,132,0.31550799999999996,0.546209 +paired-optimized,bench,platoon,120x40,middle,92,1.270649,1.582517 +paired-optimized,bench,platoon,120x40,late,74,4.61921,4.727048 +paired-optimized,bench,platoon,240x80,early,132,1.257525,2.20287 +paired-optimized,bench,platoon,240x80,middle,92,4.97411,6.22303 +paired-optimized,bench,platoon,240x80,late,74,18.551178,18.991566 +paired-optimized,bench,platoon,320x100,early,132,2.08295,3.5705880000000003 +paired-optimized,bench,platoon,320x100,middle,92,8.353258,10.299159 +paired-optimized,bench,platoon,320x100,late,74,30.944943,31.610889999999998 +preformat-baseline,bench,muster,120x40,early,132,0.534497,0.7636499999999999 +preformat-baseline,bench,muster,120x40,middle,92,2.347575,2.6933380000000002 +preformat-baseline,bench,muster,120x40,late,74,6.239109999999999,6.425339 +preformat-baseline,bench,muster,240x80,early,132,2.0130909999999997,2.921944 +preformat-baseline,bench,muster,240x80,middle,92,8.880082,10.208646 +preformat-baseline,bench,muster,240x80,late,74,23.373333,24.023397 +preformat-baseline,bench,muster,320x100,early,132,3.401217,4.930726 +preformat-baseline,bench,muster,320x100,middle,92,14.865005,16.924876 +preformat-baseline,bench,muster,320x100,late,74,39.352767,40.518309 +preformat-baseline,bench,platoon,120x40,early,132,0.504709,0.73914 +preformat-baseline,bench,platoon,120x40,middle,92,2.385461,2.683006 +preformat-baseline,bench,platoon,120x40,late,74,5.659844,5.828850999999999 +preformat-baseline,bench,platoon,240x80,early,132,2.05379,2.9623809999999997 +preformat-baseline,bench,platoon,240x80,middle,92,8.941232,10.219541 +preformat-baseline,bench,platoon,240x80,late,74,22.965392,23.482817999999998 +preformat-baseline,bench,platoon,320x100,early,132,3.316125,4.828563 +preformat-baseline,bench,platoon,320x100,middle,92,14.738764999999999,16.762687000000003 +preformat-baseline,bench,platoon,320x100,late,74,37.81885,38.968283 +preformat-optimized,bench,muster,120x40,early,132,0.31942200000000004,0.5505789999999999 +preformat-optimized,bench,muster,120x40,middle,92,1.3571769999999999,1.6707049999999999 +preformat-optimized,bench,muster,120x40,late,74,4.569152,4.68936 +preformat-optimized,bench,muster,240x80,early,132,1.277586,2.2003530000000002 +preformat-optimized,bench,muster,240x80,middle,92,4.9872700000000005,6.162525 +preformat-optimized,bench,muster,240x80,late,74,18.026232,18.456292 +preformat-optimized,bench,muster,320x100,early,132,2.090149,3.6668119999999997 +preformat-optimized,bench,muster,320x100,middle,92,8.370047000000001,10.420117 +preformat-optimized,bench,muster,320x100,late,74,29.929819,30.645993999999998 +preformat-optimized,bench,platoon,120x40,early,132,0.314784,0.541779 +preformat-optimized,bench,platoon,120x40,middle,92,1.311628,1.631488 +preformat-optimized,bench,platoon,120x40,late,74,4.671868000000001,4.771348 +preformat-optimized,bench,platoon,240x80,early,132,1.267431,2.193727 +preformat-optimized,bench,platoon,240x80,middle,92,5.125152,6.279982 +preformat-optimized,bench,platoon,240x80,late,74,18.525365,18.910443 +preformat-optimized,bench,platoon,320x100,early,132,2.101493,3.5958699999999997 +preformat-optimized,bench,platoon,320x100,middle,92,8.443858,10.373355 +preformat-optimized,bench,platoon,320x100,late,74,31.103033,31.881512999999998 diff --git a/docs/performance/motion-low-hanging/preformat-baseline/bench-120x40-muster-0.csv.gz b/docs/performance/motion-low-hanging/preformat-baseline/bench-120x40-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..2772ebcc066882aafc925145427687cca7f29ec4 GIT binary patch literal 5534 zcmV;P6=CWhiwFP!000021BF}dlHInB{J+nlQV}2s5>JzIl1c2U#7WuC-P*U`ZtzS@ zODpcZKkUpLABZ5(-T2U-fBpJ){O7}$Pai&iJAVG>(;vSczy1C7`0dMwKi`i3{`Bj& zkH^QiPrrZscKrSE!`HXt*H2&Ge);z4ug}M)&)?p@{O7|TKmGHSAN>988~^s#Ki~fT zC;#^4?d$x}x4*v4PyPDox8HvH`^#THzwy6*`S{`U?{B~U^vl~He|$YYeE$0Br=S1l z+Z(>@%cpN|KmGCnKmMJkI?4(IigM zIHdQpS3l}$Lyum{S*;(<&nkY{$WK};heogM(U2^Lq~d?y4Vl_GMm@y!EKO;sjH3k& z)uYQPz49sWn_ff@Eu-~EL%JAJckhcKDW_|Pp>}o`8VWppk8|{KbjOpyA4750-da6W zRO+Llx)`z_U1wrv?+!!#EHTn`akSCS>Nt^}O${fCe$-JMu9Mcrqaj-iwTtVjpUuZ1 zZQzdZbua)!F;4Gxc)){j{h(8$7e7?ZpAEIekY8M<_)54;9EM7sNaSz?Lm%bncGf~e z2#gxF;Eq%`cjSwqadq7|r3tU$fe+%M9trGTVs4s@%>N*Vi9tK}*ez zmdbO0%K{GK7w-Yl8r@&oX*FP};be{zHbfk*X*7I&0T5bixG@DlZO*iy1K{gN?=?AF zFEb#FFjV0quW>4zj(e&&FhGuejsl|%zJ9i}z=Mpd_r{4I@hXtfmiGi$a9}q)2EbE9 zq83C6PH(gnzOl66gI>tO=qKF01iloY3QGha#s{-$oD=5Y7F-YjR=t;awzL3*UfBZC zZG#yD*tU#vWT!iVuE0{9(Qr9HUT_m5MuCf)Gc5?ASGsTkLeP77e2Y92pa?8ATxkhl zNK5!6egLE0!=EiJ5TRGTz&&|dD(`19PfI}%i_?>hfWHU`9r4n;B{Fr1uU>M;nvxWq<$2X(-^0IQ9q1taQ(HNb*UONB51FJ?Z4gKJ0rba;ZH zIyL&hNe{$+*~sJtBkWpY6zI83&Vk2I+*7hTv7+-#R7Ki|5katprSW{Gx?qIKJ##ak z6tYY7h2>o-#*j}PnOo^SrAi0U)!O7a_UeKWc4ZAw*z>WsO0_LQ6n}k=}#y?$wa8jc2ONT!+$gfrN#nh>fKMBkal=frxOb zdI5U#OpO>Wh`rDwreIRXS0KjeT?>20h`L~e`8D=Xq9yJTc(O!;54%x71S6v3xpUyAPCZ>`q;30T`;0uSp!O?ie*F~STgpIxd!cwI05__ z1JlWlxGmm9Y_Pm87||}Q;lT1vL5!Qxy=Am**)nHu#T&In!0-&EAy&z5Y#h<0HO z=tNcp_*lsXM9qpLp!W*y29Lp_6JHKxHahbybW^9i|EM!c4A`3cYSjEjZy9<{+R!L{MUZ`E)iUU<UkhgVg+&AfB9b;30dVJR^i?)2D(8psj^qcI+}Rp4}XHyQerIMwM!#0P4UQa5?l76j=RUQvn}_S-Vgrl2Oix60lva)1?( zlDTk`2>ix)^SbGtE(p>u)Pl=l6-+g(fXG>qfVNmVvgqQ;gh}0z7Kp`QfV7>l1ws0? zCMl2>A_R4NwdWwT0ZD}cg2;ky>+I1C&>HiMfHZb_wjfBqmLLVQvk&?D{^6;weHW+=nI03TUQI&J1BVB#OQf4 zd@rd^rQSkf4PSjl|&{YFyxf*|A8*lLkzsBPBC%rl~d^iy#`A|s0xC;=#990|e0 z_V=@~1wn>gYdplbWWC*RXYoGX0ZS%GGW5%gMm7vl6G4`u2zxfRAjr5-4B#MeIjmIh zXYVfrY0734LAA`ILSi$lgV!g0(+%6G=fJ%%oX|_@Kz97iBP)uXU zv;3my?ynZL;Te$BqVvwE$zg2Zse6`Mx*<d6VuyFu;wC-*vEo#$(UIXe6-yY-IdPj1IRk0%Y^vXG>IYMmI{XFc z*(PEl$6#L`r|M~{GjN3GMNzm(tZ@s#)fCvHQ7TmCPZ;GCEH`DzKwot zn>lgZGHW%)RRppJ&S!O2WCh_4wJKCK5FPA2ww_>N=}CJ|t#OBp#TXYX3Y(^!l#ID{ z(dpZfNEKjBI*?;rP$n)`W#`5rH!xg`fp38h_z0lLq`#CR0E*WeiH6x$1`n`2qRfK? zenzOFH=JLsA(IfG3G{q&!UoqOe1O8Hyk{SiY6TxINCfcZra>_3jl$L(1Ap|KD2&$# zC8Yp@0pfU8F4T-wH~@pnw``d|qtvh)JFnJ=66|?F9ma$yVF3bE=G2pkuIw3AZZoi= z!C%J)KgL~nEY_6eL}lxjiae7V$670DI9DdVO->q46#fjNM zf}ok>l*SR4_Jl1C!zhoz9AboJ%|d{|fqpr4q#Ib413ydRdIwYmq@YRBrwn^%{!H)5jEy z+;l-wFq3kH0?D?qCbz~k%J~;_0}%$OG(qqGW8I{hiMKj%}jEZ~dLs8WMmCl#SFr$t~w@ zh{d3cL6YYh8{6;@`Z#whV^c9jzqPKuTa!TLNzm0C(9e|~K18r%q1lzAimlwP82GRd zed@;AxOL^0vlY>lq9`5a{bk<_);xt4+XXqX@`MSldl2h3Q4+U?<8ro6jYtpT{*q1R z5Wk@IRGWO$oTapAW`J=7Dz;hox;Il7a}8=Fa>-MYYFryRn|1##?lvP!)*_*ZiVc#0gl^8hu%yD|53=ZzeWQQ(${KhHMnC2RL6T)>w02<)Sdfl134`x<#3Uiz@BJg{T z6!PvkEXk=!DHB9Fl7zFN1Fd%3-JRb?PT$Q1n+7bc$<#gbAVp|}i?g1$+ukd07=T0T(m25=yR}g^4X;ze)tcwLMBTFg zGIdv4W0xHMrT26Il)>uk3B|7X<=pK${QPbVX$-kQZSwCX3#Xrh(Nd}LWJWA!znKiN zb)(!zx~nZbdaic#*G!V#aLOQV3sRuu+6|!Fdk!CE|9h>=YSSarCEyCI*YeK znqpaQY{7Jv94t(|ksbgk);G5FHhy2lt7Q1GM>k%x>d5)K`Q>>#Z;Im3HpH_18u&e8@KjO74s0+8Q_08ju6ef;io5PV0SPY_(O>cRbhhA;*zjxt~N4 z2eHb1yBOIbQc|{W;CEdst+$#6wR_=xK?~a`ua0}CXDxS;Sj8wQwDl}Ppv88!^tRl$ z*kVD$!Im(Y%lj@Dd;VxKIR~tBb*$uyA78csyMT?kAX$&rn9@~x-8u2TU;5*P zarKwoteA^dq!64IDuJtan(rbA-(Jd9R#4jRWdXl!&8`Usy}=b8s3)#{)KrRG>gquE z!EqDY`N1i|JeTwhUH-6RdZiUE`tda)O#+#(s(8MMMcg0yz9~#^=guFvb(dh{w&A?m zYPcE8R|d3XGNaCP7~$$#{xOKml^!rIh+EmkVchn%*M5kfBjXT)xAYfCfu-^_F!+!) zJh$>;i)A6|xU#8W>U|r1wN+D2G@2h+xxlQt$Zy|xpLNR)8UbI<5X{? z0)gfnqHxJ&?vmwvxaNBUNC>{|p_H`dEXeSzyO^){cUOM2#h#+zYEs&QPq~aKIRNT5 z8@mP6hRT*bE{k0*uUn@w{x2VL38qgtV#l4aG0SS&VplJEzRopr+`Gg1b?;Peq|!(m zEwx~u(wBIsmg@|-ufjStmra!255oKg=hw|sxp4|=mBFI9`%6esxO22S5*JUljwD#A zYw7ID$F5#qcTeTYDFzYBjz->BZ|^S~k!dX7sN)76JkMA6@+Fp9brXknf75MkY`$6@ zES}w7EnCm_3Sz!wYRlm341+Cc#pyQpweFwFl~eepV4_(2S7hh-X=H2KJ^SL4NC|hd zAL6^Nz`B7dH%_S>UMWXpr_Uw-&RLyiBLud%Xu=K%B`-B_0ncx2)!UnvKl(5S!jQTW z@8SkJCKnobF6uBADis&WFzL3@0P6~Bxp4{?xQQFBzL$HUc`o*VII&}XIT5AtJ!ag2 zZ{pDI@5HXQEMI~~S&~b&vt)LPwO~%4!RC>ZMeA&rg>OpBbp^HDI7L`*4x$SSIf%^eeBne7Dqx`A45oWhu=f~+I!gt^Vw_-10^%VKBN9_%dELJX6x zyIfuuP|J-|P!#c%H=!?8-q%_hL=B$N=jOa*mKTnLprYyqd)NKba^;lDO(ZIk*0Uv0 g^W_uh&TRStH(o)?Zc^l%@7x{xUmbA|p4vYE0KCPm7XSbN literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-baseline/bench-120x40-muster-1.csv.gz b/docs/performance/motion-low-hanging/preformat-baseline/bench-120x40-muster-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..c4d88c9f230528a0450501779f75a9a8926076c7 GIT binary patch literal 5572 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-baseline/bench-120x40-platoon-1.csv.gz b/docs/performance/motion-low-hanging/preformat-baseline/bench-120x40-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..8eac94c1bcf7d7988d87c1acd0f277f06b8f0eb4 GIT binary patch literal 5536 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-baseline/bench-240x80-muster-0.csv.gz b/docs/performance/motion-low-hanging/preformat-baseline/bench-240x80-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..79d0e6b52ff04f787fdf8727a4f5783b25dcf4c6 GIT binary patch literal 5987 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 RtQP&}{{W@2{8)KI0082Ul$-zn literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-baseline/bench-240x80-muster-1.csv.gz b/docs/performance/motion-low-hanging/preformat-baseline/bench-240x80-muster-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..0537b6007a60b60f05666a97da9a53abb8b5f2b2 GIT binary patch literal 5998 zcmV-!7m?^6iwFP!000021AUy^avnFXh41HC{_5hH#M7jlSczSgu~W7@Q~T}rx4>UE z)jdsLM2AR?CJ8L81%UeZ*N-oc|9trN`NNmj$L~Kr|NZgt=Re;ce}4P$@0Z7aKYx7v z^!W7h`L9o}kAFUW`2OV`TOthj}KqIfBx3P&uhx1$QYep>%28X<>Ubkrt4ANvt;N!@ zR#;Vyp%hte;nrGStd-MV_K}aqgIXR(Vbv_DrOq#8tOdhbI!4Hk(O5A?Vs8%%DcwcJ|ki#0p#Wap{f@}pTea-Kdpw39YCH-2;AlW{yO>Q#EtI&I|5+Qu(y zF`Rd@R$NCB*IA378*VBuX@mlc9PLPz^+b6|Z}$5t{HF^sA45p}-dtSp#KZf&R}NMY9-Rm)HusXpr&{{a@CmJM5Ytu% zPa3%kb3z_r11Aff#B$orfnQeZ*yH(p)NbkpStQ;sdv=)4uIXS$64+obS-ZElAPS!R zem@6Dl6a$LoKo`jwd(d1AD{!iRQYI~%>^`T;6vb?`@OvdQ}F!v`)L^9B_1P2_R}N5 zOyLH`w1S^m_x0<{c$8K19gBqCy}<=m;y7<8a8mgWj(_wrH+1j|wIwW%M`pu`Lkvd3 z0Cy|G9{ix?dxHzIq;m!u#aP+&m|;)U5i2VP-B~!O!}doUVH1CG0he@6 zL6!i_ZjWAZ)#L#<1sj{T#Gvu z26Z%mdyw0MbDJ$)P$r#okrkYSxKU2BHlso;qLW`M2%2L%iguAK#Ct^Z6>^g0KJ3#1 zGwGa;1~j7Z?f}-&tA_=V%9akima_w#S!t0$p+QQPahlX(yg$RV;7mGaBv!`*J%c)2 z%V4R3PZ&gn7qA1x&#*O~LxdBCf;=REIY4SNc84s>N!yqh#C2t1xwfqv42E65^-AO+2K#b(fnco{+kS1T!6G&6w zO3+xmb%M8+G76B!$}%5|elXbR;%_l4c52^k>4G%*oSq0PXS>8RoGglmcCjaeDTh^KFU3z$qUkyQ+gubh?YTYaT1GDLNw)hK2acK;xonJTk1Pi1Z`x) zalgX6AWb=?r-VR(qDHo~A6XBsz@K&nM$8Z|Vt5YJO0LWX+&fKPkfxOX5%>~D1Ek^go!x6o2Rys7 z#WJV}gg1G34N#qZ=gZ9s7o;hd^aQaNq?r;hiA-lG(q?3Q9akP@lH)Ln^L{?cV2Sr6 zDlbS=&gsddVvAHP;61~lDxVGI$)dN7Q&r=o(%8Tp2VHXMn-wldQ!eR=03R;D>f0Gk zErHj{KY%8rr>7?Xj{NPZgOf>{uvn0$*x5_LQh*VIE4;*Ql46?u` zgL#vH^MW+>lAgNGh!t{XlIbqe>U5eGs&g9oCkBNF6=jiqg>7SSL7I9>Pic^TKn<9@ zd4`wMh>i~OU=XM2O3>oI(epscg0@1=xObYeAWc1`Ckzr6A-b2wVs9(NAWoEZ9!MPV zQqc;LxuA?+YY+EvSQezIr}PBf;|xI*gP+bsz)O)N(83-jpr)9Y*nKVHR*)GCA_eZn zOj(eop3+kmJ5xv#XHf9;WKr!w3@TA#QR+}BA8+A778*Vs8!JoI z=d?M;1#Q|XMU_UjPf7v=_hIR$>aK9mqYu^yOO66m5ppc%f&)eNd~DXZz)d^lsH(JH zC9ax`Z5x zuJbA-C89=a&%!*sDm!Ipn+kVbFsGj~6&5S3LI_YqFWjQE=(GqMK)AwPl~IWOhsu`F zEoIbr?>TkBoPJ7GuzNO58+&(@(hy zQXRb9OFWW0+$Y_z4X3M$N7$<;MC02TG9uwZ-rOXsx?oN}B`YhY?5N&@sV-Ee#W3}+ z>&TKN!Icsr#h7ebE0PHBxi`6hPCu)uCa3fR3>eSxm(32phcU3RfI-pn0jJ>Z>NdfQ zjk_+e)6aqm8c|40s{erADbK8oaFK)@~L`MDuQVMlHE;`^pw6NzgiSY!Nc2zYPAJ}##v`Y zJvoRy1u|nTUVw0w%0JiE4{sca<7VMTk}QyC7a;fE=7K>ME(HP7J|WJ|l9Yo>pQthr z!hAS0VLuOVPbF`HQ?uA2621H=Ji z(5A#)C#Nq6WM{dRvbT(2I}&uya-b9;5lGl5{E67Y@eVPRShM8M*ml1A0zY<^Tcktv z+A_i0K-s7FxWB=}Sf7`6nm6mToq6P}F2$}L-52b!Q~uHd$rLC9h#qol){rG$@=$XJ zSC>kMO>j0UnSpjR$2?>ABu?;c3RW3pE@ zn{tNrh@$g!r$d~?fO|{l!Rqp+6W%W;xERa<%BWgx37~77=}L1T;0ar)Q4NkV^8mIs z=p5C>Kn34(tUfM2`p#fg8f?6K@|KR+vY%lUjOSUF53tA906Fa?)L;-e_Xh0}g{whD znIfx+Uv!U(B7vP%wNuGoCEY*{Ze1)sVY_J(VbdHNSD;xBF*&=yB3l@;4^Joyt1C6@ zgOayhQm+css25ie-ES|pW&nurmgtc^6=#=v63_R88yUg?rN35R;%4X2$b`JISStUxH(Jy1*@A;gOM+(aj~hsy1R}_ z<7HMoySMv7p2@Pxl_~(RE@TK!1S;&IxhTtF*?YIC{_uPRG#G(n5?PdJd)~rPU?Dhwye5~ zxQDAIxX-;&y9klhC?0s&oTQ7-63o#>`%QBfgIt}h`lOC1y2^y4G?Nku8)a!%#kCj( z>x*Z7WL}F1YCf>aZGs;H@PXmL(eij0S%vC2L- zS8-gE@^?eBOMT)_n{~EJforkZ$!AeYR#g#I%{)lc18%2z(%`~9_=Km`p$b=31O`;+ z#)KS=<0Uq2N*k9_kI zj`F-r)kLYOJr|xNI}7@f4|@W~sct5}LcTOgR+|la-sgx1DdvenXu#?`yEqRsAHR}B z$w@^D?^}%B-j+){=$Fk>SzajqYKVu~oYgp1<HV-NXC+K|lDc58hoBh(jTx~W)iO-iPThGc!lk#dRla}W?y|C3>l|dD- z*<MYQ9F0_s-*NZaKqr10Gz4|-exO~<`W0LsPB?8arIeF7P1#fAD9Sp4_ z%k`qoLTJ9Oq2grvHM^*RpU(1f8$Q~gUc> z)92^oq|vIg%OrZ9EJ@yiLTC&os+)>K`2>ZYvx|~`nbvyeK5CHal8h=dv*uO&o`Shh z(&%e=kR|7odH9%FrhY#q40=0OfvIhS%Kr@m-ME zW$Nyo`y^f@A&WI>U~fYdX=tQUl}kLvx|g_RQnF^K>ZY+RRc}NZLRDN6 zBV|@HHZ|zD&N1hU7z4!J)F{=j)x?Q!K7FLxjK+Lj6a{Y#K@NlqaLu|o%XgE^7b#{{ zgAyt?m`_ysu!!fFG3VctE}LnUO%Fn%dcFy}3qT9XWc>4Ka-ggIdW{zwv&zLjk+XB3 zcA3~dxesaZp}B(4d_qNIK1nwmYD~V$tV|M$im)krhD)62=K9OKiRN&Hg5W@>s|3w2 zulT(|O@n)1RUSL$B_eg0(B89^fezc49GA)ackTnm5{P0usXXs6X>3~_tW~Oh>x1cD z>5tt@CJ6i;<65Vh(=~Ys*n0D`d|uOPDt@ASj;K2+sXXs9B%Nh!f|jV!-HrR?>kW!^ zmFi{6W0TGCvFxqAr2A>&0czEB4-(DAq*!bczP`CZ7}v?>R4-*OXmTypZ{B#thmBQ_ zw`t}n02-}U2BScj!&!OmF=ne>fG4kxq99{!lZejad?$s zw6R-dzTEa%S2@&(RxzKroI@kZ$h-xgXsAg8-p=Tq;c3WOCcD*5zFg;<)3u%`4cjo; zRrmhM*Auyutb@XR^#;o~4N3Sq>l7?xp$F1{Wpl z3!Llc4MXGC&1Xh57bWk37w){rE>|d5iyAy`y8qfa%310c61c>!-oW&hplMn~Q#8pr zN!a;oxn2@oEoz2R{)%>wY6EGA-0%EF@YwuTV^(9w2WCcfch${`jqj|Z&he7DMu0El zh^?#B_H*(lsZ;GOOx;BwXPI|(p{{;U6f(ZS*LBu8UJ{qO2hzy8RotJd%X?_54htuT z%Ed!^MTPweA7Y2oPK~Ui&f$`_6p3o!BhU|@rb^BGEg*AR$uDZADU(Im;NEuz z%jJ^xYEXkq#82bY%JasUD^Xpi(3IQrnv?l`(VkSe1dlfZKe1fzpsxmN@FmIMTUFl& zT=OjV>oT*hADU-JZ`ooTxY!tMmn-(~x);d@Vm;iSh~uL(F+6Wn4zdVFf{$z!&2^h@ z8Ey>r%U=*!4T|1W%{7O&%di?iOp@rTG(qkT{jGwbu0>=obd826+Qr4V{DFkEYw_%D zX{1|icb|^6`4xY-)KkvSMdiUk^`18l7&mWGz{`r3V_3hoiUylF#^x^g6 z@$u!;-ydI(e?GqZ{&IZy^zG&S>!+_@j!$1+U%vh4-RD1keCHegetG3rUw^#*^CQ3d z_VRtc^!oL6zU#xMzyA8;pKo9PeBpQRKfe3&_sfSr-oJeQ{QY?M<@={U{`~*f7kt>a zPp>b3ynlz6|Mlm~m-io!e?Gr^{R)%cUOvC@A*3JWkX8;aM>$LW!}H9qk2=~oOZUTy zpWVh$^|XjXbokj+4-q@P;q?%{JzDE=)G8tU_Xg`?uqyto2ECtN^cYP~iB5yP4;XB6 zj@}Njc6!L+z3Ne0bivoHTKwLeEaqg4VXHawv*>_1Keg0p&R|XhW~RBW0do!O>b0~+ z)1&;}oG#|tbvr}O+U&3zr#3F&6t1pGKMmU`VOTYOdvNKaRBU+^shiDgi@AQ;Ofxwf zRxyU0B`VEnIX8TW+TE`2?@i zS+Lo?ILw*TT&oS{x@OnWk8Uc$$M7admliG}kLu7X!=1dBI6wt_L1A6i)Pe zbGDd^%Vv7*XE@KU<5{Mw47hS{?Hq!bh;}wBM^wk^tSJsQTz9MUH*>XIH*>&6uuoPI zX;Nse;SJJDJ!Rk+qMi)4sB{&)8;=kXzFA!?=H$AW!*DhMb68fB^h~3xL_bwpnq%BW z8|he$?oSBTfe>NpwUS_;n6 z^W5-J(IfY)A_O-U7l5gL-BZv&#hMJLo!f>p!^(iNhW!v&tS23_mP(i_r2%Uzd|~Lu z;({@9B_szA*k}h_=Ij&FDuaIXfuM&)fu9;r4xR*y(%=*o&ajKay1MV?NzQt15Rb+@Yv z-blasDtr>V-~yl-WfE`lEznfCtBBUla~ueK!TY&JoMzj^zbt?wS9St=!DDcahyr75 zgD$v6Lm0-0qrro85M%~{O8`Jvu#8$a=O_!}$d#aCU~Nvp0On{Zo(99o6)prJq1au^ zcpM}W(Fmi(Xd42S1#;xdQGrM=08?{BL!Y|};gSeYLHIzklQamA0Un4n&;~35TQ{B~ z3+CvRrlNv|5I>IH6PXeNn+U2$$GTi%tniZTf8-R*tNI1vAAH4 zjvE5t;NT&Q%h9H~$u)MwBOp|j2>=lwm7L-=ZiHIwEH0R%H?|VS8!Re4BozlZ8ovYd zGty(%jGkJkx)2-{@}O$B?XE7EqZhUU87LkD3{MW}8IPUu7#1geMH|l32;PN3)9@(V zRYR<9!1#{Y!tzv+Q5qIuLP#*}u zU+}@m2a>k{`qlJRCLuyCU7I%Bt#QGec4sT@Ch`~UNmGbNV~z-|JTb>euBLf3l4JfaYC}&ja$T~FFICd5n%;^`l5^_JuBAi^G78}EmuS1i7q&tYPmoD&z!!8% zI4icb87m#79S}A%AmK9jAg~(kgV=UZ-WJg57rN5S;^+;?(0-Zf+&T*I!%J68w(a7)s4voc*cdYkS8JNhNfTx^G}mF+tDjx z2K3bMOh)&S)UZ#7mGr1toxNufy$!)NbfsKO%eW(jVe7^l>{izXw+qOm$~)@d&Y&e zV6r4vApP|eIE1^-5(og7MtGKuYy%N6C@Pbh0~@;ulD>e?xX_l-5(pnAf!$JOAqn4m zvInC@SiqYA6za( zD12yRbHN|GCR?K*s}cftWs+kFvxB_8l)>dq?i>59>4#Y-9r$Vr7CSiM%u4{HJ;E_A<8w(Qo zty0)oV#-1_)JKtw7-f1F?27QsnygAkYD_qRgxrYHeJ4xCf<@l$Ni8LrPE9*IA%o~u z_yg9k@Edq4+Em8787o8x*-|!zt+9ZS-^zssH7kVF(phdzKQhgFE3*Zs^CH6?Oo9gM zxpZpc#4y|7{8-?~$2D7^&hjoPrG2uQ@duz~WMM$h2LCb=0M|zK-dTD^8n3&BE^y=* zI)lz(Ig&*RFUchtq^z7VvxgkWcp0g(ok=g;o7zP2#qK~CIPz;AR`CfS5!kf)vuMC< z7oZETqDmo$CIpJIDXJ9I_y(u6L8GytQCu@IEXP^-K7!(;%(4NAUYLivlearCQd!uJ zTt9&jdR~0D&IOF(nu`G#klwLjOrEY&DrChDFo?Y^87zP-#xQGOfZHrxf{r#UY6}*{ zH5;oe_OdAo)d7h2Uwtm=$RpspOaP@LH?uuS8F9*x&`Tlx!n>d(20uRmUYVNVMdC7I*JBv4HO z1cf^&>)Ae>En3iYfDfCoPB(V^W#hKQ#UlJebM&IIG*MC>&@&|a6+$YhIA;1@0IPwn zNC&lS%RgqfQ(P^QFF2O~&%|0E7$7`G0uhtF!m<$?bSwdzle&7@WklvTM_nzlX~(WT z{4ncjiRiQl?9OtRQgX64;@I=SGz=RI*WFl*TQDvb725Iyz#dF3?J*RQ11+2zV8;+L zf)%EUUXvdp&`{nD)Y=v7b?x2vQ2byEy{V zcDU;GhO1Am!_G42T4MHtNgx@I6{Oq}Sg{L$@la-m$f%e|l-T)>%Z)x(lZEMCXW7|O z2-G=!!BsNnWOmDSXICa0b#OFlU)}0T*Bei+LFphZt+NiC@`5u8gUpi6jL5hw3xELHr!9Rq1ML9iN)=*g6j24La(s5~VlV$m#Tk}3z)Y*r7YMP>g>+qOOHcj@!A zRAhN=9&jOL7i|Du`Suxd%>uhLC2dmI>!Z`}nwtyf>qGYWAVCb_oGL+RwB| z*mTMkT+8-UP;l|1ybLA_9U1X1UhJl3SEGZ??c86;gEpr8Ve`6>K`Z4CVmHSa5Z>(H zHX%HA-O2*@n{Z#OI;Ep)&R+nMWEO-bUC}-6>DXe`QsQtW$nmmYl9GfKH4fh} zpcV42%jjyJ)Z5VnnCVYiyHjY`ZOIJt(2ArgdarXty#8b^3R{i#mZOZdaw=~IYaa>8L@XLD?DJ${ikbdEf=vWzZI^w9-AaCMMlGAiHRo*V znWfn|BLn`OWih&MO87?64f^rInjci-Mg)f6Dx0fKB(}2!PD$poasqz|7Uz*6WHBsv zq7kfcqRMzE@T%SB#;t(6*euRsUr)|F^{oNm%2B|~cx{%(+4*C4x3hx`CAuBWEB8Y6 zo6!OJ^#DSDj5cY`06=*eaIj6+WdTl8_ai+fZUsqVXSCi5@~cs#D@kjWz44hSfkh5Z zQ(~nfSE`xLa}YqABoad=?Yi@|$gT14W)ul!%X|U$O3Ld;CNT!ZOiX0Rff8MEQsgN)zRDy6KFp3Q+a2t%NP0Rbz_;7mZjGcjqktZY zd*TlVI#P|Ck@erkv1>_|QHHGqNDa7~wHu2qqtiwmsWMkXjoO$Q6W@Macr zvW}5`K~9t^i+-FBMi$~bqvO^Xd^4&Xn$5f@yGgT=jhy&s4o4!ZFicCHbzzACI*sK} zSCiNowOa#pHOj#`+F}Q^&EzR~lwMeF)db#1@e40R?uN|9$iu_7-s`tU@5SiI2~rSS z)mcAbR|im)q@E?4M2{RXMP|WZ9z)u8rE%+LFXGp!SKvr&Xq(&50Za(pI4cKClK4u3 z2WJ)`1SwsB$vfw*_pbeFlQ%7}oqhHD zbid_o9GICyT~LEQ>nMflAmGcH-iOR$Yt0#OXeH7OK4^r`~VWp0IW0l^rE)~b)e zZ_Z#K=N~ybm)%#kCjaFTs*mIZR2hAmnk^48{kXy~bG zgoH3BW}MUYImF|v5mgRNGAPHGO1xN(9>g4Qsd)OG(Q%uNdP-0!jwBB>rp$IuD6vux zotdLbG14zM2+(`ZV(@de(PFm=u&2%CkRY|t_&KKFbC3rbn?u>H&z@zm93*khQzLTB zx0~y?Ik%^jSaKeLHmMMJpj=)N$uTDF99iZ#uRSi=q<%tNZG$Cl(|oH`@; zW|kL(L$DlR%4<>C|FIlkLoOxR8Q7`%D)*ViH6iwvEoBgM3I$Sm+EmYqB)e-IJLRA> zuY%2S9_{dfoy~fi%zScOatZJ1l&KpC3d(gNSXj?hnO&?xn&bFsmJ9JgJHK6LrS+Do zanLPC?2v;NdDO`(iwc}k;0y*BC({`xM?o%Rxx8*`to3PHdffMR4q@e0jd+YMa?Cb5 zlS!--v6Q3zOqf_bOv)?UTTAt6Ui!vng&ZXr2u8CgB(B4GxD}nUY)SKUm?1k%c$$* zwD`?$NzTm4xSpvuon^H-ke>5ObELX(mPr7UyeT6BskXb!bic3hw71wpwy8WouM_(? zY+$T*a^i%S9msKoQ#MFW@e9Nm+udKR>-4nTE09R3D=+y4CEvWDNx(5yT6wtu;)VA` zk?7UbGFi{&T;oohtn<@yFF-0seCGwD$Hg>fY0DrGsO@=Aj7>qZS z$Qj7qCEJDB66FQva8?>yqziGBYiBZUS2&+cmb_(Tq-<8|+3AvbX_Q+n>^~KnB)5R@ zWZse4dTqO3Q++Db`$VD9A4RB4(}Z1vTyA)#PQj6>>OGy7_c(SAw2o6(xos?KBLpF3 zU3(U6BnRNxiXrM+4sHe6y8<55nK&A_Gby*r#;Zx8Ho(RLb7fw}5gtYVIf@UQSKd`^ z9Gif5SKc<3ZK|@4Q&-q&LoiiG>$VF^}S}fo>gTejJv9QZTI`|t3{}DP9qo#BzZsMoMlP6 zujfsNtW!m@<$!uGytvc1=QwT`{#T36J{e<@?NI-9#ffFN`nZB$l=WPK!DtPjAH3tZ zvuL-!Xz z1KvL*A$%IkQmb3i?7zQ$csl;`?)#^AU!IRYe}4M>;rQ#@kK?cJ@BaOC{P)v`=a0w7 zr%!)>d_KN?eD~w&`0(lb)BER7U%womzC1sD|IfS6fBgKxU;O*&nO}YV`TXr?e)aw7 z$NbUr*XQ|LA3pu{*B{@$fBo}`-@X6%?#tg#AO3j%^!f9T}c@e)s$pCci&@e&R!DJIbL}4lhSJOa6!FnO`3=M9&fR=rYc* zdPqBq`k~d@Il3Jxa_Z=Zg!0$Jti>Usq3!nuWicof|1Ac)x3j7oz4g=G52>dI4dQz# zG;=8@H7@p^>C9Bzc;6gIqkiV^?XIo;&yb4)7!u&o~;MW^?o*iXNI3zI?Nf) zg`b$wbT7X*R~K`3b*INk5A^{**2dGdh9@+bDX^gYdGW)0;4ga-xHgK)#+kO5YZqto zbUw<_yThqHoykk9aB}H99e!YPxR;>0jvEd&VGwt#oL`*j`23J@3h*Vvq2;JDtCplX7)tFK0D9Mv=46 zM8H8AD#$!*Y0eEN5{Am?p>afnZ%!ABIlVYD>h#_yej=IkbOZl@d59#3xq7POGmIBI zaMf~1DLOXxWI>k9^Ed8{kqJH|@WE-YBSaNG1>)cfAIJ^FV}n)rcfc1?s+S$GEXX2u zai|yMHa>XZq%^=($44uSoPqGsh*RL<=oOY+8~s|UM&B4*umu5qb!nOL2?GQbW*J(MyBfV71K>5Z&IrXn=yd>SahcKJHoil82rZB?9Ne;e>Hh zM_yyY8OMRE1lloH3{a}YMS(>~k+ut*1!?qJlxR^=bfY5mac{8LStYzW0%qhH3j?aO z(pZ8E@f7!IJFhNaqu06=DD#fT_A;`pGZ`z(5$;uiX;pBab#4754#S^tbuXZH9O5_=Fo3_b+T>wX~)hSRW1SWg{r)2^T zLR1|9JMiv1GJrBeDWRO&?vrYp0@i|%} z1}%nd3a~Daqt_Z01T|zhBc(p>5#Odo(it$TQ`6!=#aFdXs0WDaCUSJaoO&%&0cxR% z06f#oM`nl1IaYha(01)Odc-@$%@M`+Xh;pcozByxEFvl*{N(&D~UJZ9XP|g`SL9YU| zD)gd^ zT`3)G^ePeUKUxT=;$GKkhocT|BeQ^RW!y?#{Sij$Nx2Ef!#lH&`H{z>%1E zkc@ytM2-z008!2f@bD><7WW_pu=vHpu##d%2Yli*~vqNXXRVuRUXXR0>DD&nD` zGUAsYd&cgJ3+9+#W3?gEjrs+WzgWg<5wcWjQ$8*ti%$aT;pFLE=v4z2Z!9jDW4CGr zEsrG4SS^|axfSx_QWIw@h;vU|9i0|&MACMvyNX;F%xRZu1tkv?f$T`j8LNTNtOXh_ zs}*868acqAA^_!K&jV-dJBthEv`e)Dn!$uK9}zh|IRKA_s+2kldh|3DOwjNw3R;PB zh6=KY99uA_U8)tTl0Ry^f+9~{j2whxdY!;Z{m}_?+Oy?QNCHr#%O)Xh0iAX!SHwvi zPM|+=sF8$~?S<+N1*H5!0JyYR0SMY13yW#i?Kpek>$pYo$Kkp>v>DX_}Xl9(fqjZB@)xUwBrk;L>q#I^43asi%xDOsq20G4bQfYJFw)4?ye zbbPNoB`QlxYMgqj8h;6x;JZ^U$kQ)13ps;;oZ-`F?}(?=gR~UV8J7wOs-yxM0em1h zR-RI~j$NRqUy4>sa#5zdn8^TOz-M=}mP*I+*o7t;zp9O`R0pTqId;LGeyLiJyc0*E zU;ycDHg&+9!8M@eVVfp3y9!D1paS?@p|X>%Z2_NtDO+$f9m}+9;Kn1nWP@!bR3_A` z0h3_ooneJ*N130sIpEk$lC%YU`lW6SAPr2;N{Ca&OJfcS1bK<1G0LxGHF z3aw?~p7lxyS4OuH3UjNS1xO|ZDhrpyOd2}57u9rh>N1!&_Iw0S zgW{s3x+%sWwRg0nFIeO^{e@e8H0MUn)Urbv+5CiT(U^f$iFr_a>^uyU%-K>lt*ySG zk>4a3fsXBLc6JfAnWrP0ekh}$N#qG6VuYj4_6+`#*^HPQ8=&tC9C^R$1!!j=T}jN# zs={*tec6x%#3S^f4N!Sy9*zV)9Rnp_cPCu{$!|i89j>5C0byr?@JcC&vrQ|gzodPd zNaZC*LJ1`mU+k`Q0VI!W+kpL_4&D(^LR}}*>}gZU;Ze9NIRratH8?^frN%e7kqsX8 z1&`t?#=H87cjsK-D6Vo086K!Qa=5k^ z1=u(?0=4w)TOio+XNpdf1Y8P-!Xe6LZn&UPTm>0i2w|Wcb+PB2G;HK~z}T|&Rioty z5uAi616QN4tL;!>EKn3zJywfR;&u1}!D&erSWCd~kVFaX$Wuog4`Kq2$l3P*Anj(O z3l7DlplNnOVt}-BTshe-pNVo7cPN&PVD=NNvCfmkQ*5-IQx^=1OEFXB0EnaXbj0akSb1!KXVxD+x4DJJv4Q>y{Y%cKeH$2S5kkN~IT z)RE<<6L=kq@~NueHjL{K}+oHVxL3it;}DUK-YRk2V*NE91v z)%9Hk8~t{~#iCm0-IDRZz*N;F>&j$5v(bb{Dtrd^-2ku3iQBdVG{)@~SBtKltlI<<_xe~>O4%m9|NqMQ66h(z*lxs~0uTiB17Ku$2B2Sd;NdgeW!qTvJK!u9 zC7B)s3Q9c?c6LWvqFkf$b8>ZLC3FRg8RQ|Nn{DwOuDaZC^^HkF4GuSA#%2mX&R-y! zPvqS}Y0bqCFlw%2;18i-+Qp9Rt$eJ0rIKa~i^0hT3|UBy?!X*zN??u7%mg{gSsj!q zrD@$VORu*&xh5slagLYRh%I$CpE)Q&Wyu|YNeI}C#qTn8MvkfR=XMjsZiL{C(Z(4G z55np+8_?Vu(446(KV-wAX3sT*L?02ho6!25`>aG1rDbCt<&} z2e;(oP#9{XX3XCH*pMIZH=6fql?NgiTF#ntL`?d_HW>`plUhE_p1(~z-W!W|DvhPqW`9ygt`T5Ul0I#)kNE*h|t$(dhtPEOdr5Z*z& zXa>YKA8ORL>%7NZk}Xytzv^s{QfwBsym6akLjWjXzerNA?1i_%x`H$%nMVlhigw6N zeXdpu_XzowpjL7+&1jO`9vj^2(CkPF8=dU&?OO41 z?-IQlb=DN+4wrD@VI;xLNfK8scz;H!&63cRmkJ1G`70G-e`B-Xx?zh=E~;e{6|wQM zyxA2V;E2xH+C+ITL|ubaWrc0bL)`vOe#W>p{a$SjRL8TB6{(Eb{$o3gOMk5;!DsNM z+y~Hijzzo>DZA}Po#D6M=4umcQ>hskyIh##-VEz@cBa^`fg*$mBoK0-+zYvl7R1!f zw{dIXE;iL9H&ca1**E}Tzm$wwnj*#)Zj`I z!9JHtE8Bit5pJM~JEQ$J8hkZcNmxjK0QQk#o2%={PIfkwCq>H4#oC<3Y9nxPkyc}8 zblgUutI;+d-A2w|>toguFxt7QNa6snAbC?nA*3Nx|6uL!V;jAG8}%+mx#!KS$LBJQ z=X?-?!g4!GH2I+Bur9Yu!JSya!DVcF(zs2u7o&w7Niv-+7u<4o#`aK~bOE4;s3vuD zlJ|kq#}Wscwu@f5Pwp4S&1C_}#ZGRNv54X-Ihpe)smF;Po-Jl$bc|Nnk%Lm)2GY6~ z-L7>FLR+$}K-~AaiOGXjRQ5B+IslK{2VsMe!+R}RSIZWV*3Ia4lWv8B$9&nKo#{8r zbtvvLo|1uPQ@F8#kI##oco_)j4v*I5XuBylp)&{TwdGXjp~4{?sinAy;b)8_E^Gv$ zGPET7P+vQnc3Y`g&)K>8nVa%9iT+5|2M#uAC=Lne%yleA5tnLM%;Eg4(fj7mdQgO} z0{X%vc}X6WyV%}S6<6olX%4t@`yl3$3;5d(0@odBYd2ZUU;&p2ZF9Ab3sMZOGG$cd zqIk~r_+-GMT*u(&Y_nzDw!l`Kt!97MI}W}73I`{z=B%MGIHT&w1w4o>&11q?@AdP#ZQx7iZ6mA=(xVaKJ-mV?d< zB~B;tWW%a*FEuypa*GXmO>;J|WA&o<#l<%lI_o93rc07NJQ()~`3?cQIY5hCbT8Rs zt#hTPLYD8|C0N&`>#hA*fa9Fn5eDlV#5PV!IButvT7iC+<(L_YTuEhx584Ipx-eaD zQjNR4WIjj;I5p3iy*X#^gDoWX?ov}Zt5oGXRh(sRyR7nNWxD?=aJlo&5mGjcfquE8 z$z5uh8_Z=gr|f70Ej`P4+uo<$7K-2ab^sHD^d3+AC@a1E@@{+#nRI3(nzNo}NX`C1PmqW)eSy2~u>r3)xb-Mh@x1{~}T(*|x>?1dsAzDhV58+9( ztaCUeK8TR`z`ngtzb*Q|@h!OzdRJzpBT9ksCB!VA?y0I z`mIUEmn8WDq|BV5Z^@ztgcKz|&)KFL$yY-=F$Ve9WEVsA{?f*q{PdJV4mF|j`jX!O zzb}nAB(u{}IC@uTZ_T}&v3rS8))i{Kw;)+q5Gw;L%;pZY@n3W>ZEA|j?kk(RCHWj` z9PyUBjXQR-E>Y{f0m&vwv}~XAQ;B`l>3oLDxaD$FY7AjNri6R;T)J=1S#Pfyy@^}N zmuuZ6# zXj|50YPr|4#&_;uGuN|T=b?OOgp9BPGji3pP@PG5zHKCAMmwA1_WIwOxYZk$gSN+uSX+zKtQjz2mt0me|g??c8}u93n)(w`0!rc%Or-!MT)T z$(eAuvJIiQy~p_m5`=n~eVVDZfp{E;57MMD@})x+5`C^);_{PUvnRWI%kloM>UzrT zT>ufl?#P65af+`R56!B|SB=?MiCnMpmO;yxId%cGu2hTO9E+fY^vY9O67>8wO=^y} z0StV_xG`8kY4deeJlqaz*PUu9w{b+D@&$&In+Q3hEh*>c`!hi%D2Qy~E62K( zD(gyhiMwCHbU>(jjNF^dA^w;z0VmEmSAF=}HnW2Z3Z1+AV{6fF?~Jblf!=e*z(qqg zPzmMC*T&ja=S#Wy7DRS9hvpmIW80M%yT26wcF2v@*$7OXVr*7fo5{&Hb-3$8*TW)Tf(pLqxU)EJ|67AM!<`4J z17W1i;aQ5*`f^5&N!Ym0esZIV@lj)&9)A1(HoUQ@xzX2i?d`FzL{Y%HlJBcOxF=

    y8a@gO38qjDP(fY_JGt H8AJd8XYz)m literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-baseline/bench-320x100-muster-0.csv.gz b/docs/performance/motion-low-hanging/preformat-baseline/bench-320x100-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..659d14ed57806ab596c235ce504750d211d0fcc6 GIT binary patch literal 6219 zcmV-R7_{dfiwFP!000021AUz9ZXGwWh5yg9Y&3W&-kv6KVkI_^u>)J4!Fl`ht)e{U z?pD*7K_qLtt4UU^wdz9s`|HP-$A3P2`~2a{>*Mzypa1^&`17Cdk3YYC`1i}>zn?$8 zetLX*`TWwPer%Q~j-deQPVma+<@9}7beTw=b7p<}K0}F#s^zkS$9VsS^G)^<|5$$T>=i}C5 zSuNJnu8xL-u%?J(9DFy|$nnL|jwaJ}un8P=jhUZz+=@?Ejwjw)tgFR--qqL+(;8F8 zRCdp4&9KzTR%J?2o=sJmn_H zDOzNV$B4xb(%9DA>QQiB>y5=mt*iRyQw4Nd%e~y2Tu~?5XSc6tsMOrO!mYi*| z437eKZSa&_0+EeL-ewadEB2&xMuIX3be@vfYzNT+t_$^Ty&G zQ9sVL5)4@;aSlud@oMq7Y+{ktSstua5G5((w9y}FMW1vcu8jY~OSlj4it9%ASlGlG zgw;A53$s;6RcQG^pcwx?1&;C_ebS0P>BL+t8LtUaF)@Sr%{32UXbo7hDD*)vm`t|B ze${IFP-y(`-sFltXPW8R#qt|3?OY`80ss(tVJm6@BuV zyAq2T=30$I%(zd7Qbm$b42Z+V4xm6@7z(R|RGM}!)o_nKX+@uWCNE%`#Ynk9iyaDa zCShYcvQ_a|DjqAfiAmh2qgeP*Y+(ZhX+@u$FCHsl9JI=Gl62C%Gl!8k; zZpPs$iezR=J@@-n<`sSHLSBSj%~Df@d_`7~4k1*fT?rC+s-kkUtAeH{jb0iMm3WhT zz{@N8*qOXw4GAKx5*5&$NxFnx2aQUu?mjM+oBuUCsisMOTPy~o;$KIKGSHKf5J6a!JI z>ns%@myobZi_)WU#*IKFI>50Kk~s$_a?g8{EBe$Ec{P9+%-Ul;R?B zI7`8OaJ4LxwW(+VzopH_uIN)wi3V=N(;3Z5NijN;uM5R+?P%d4h1lfJ? zVBBjTThXVU$ZG^afocUK%662;2BCQ5p)8MZQISpH8|7V`B<_k$0(xU}g`aw2FOWx3 zqO+17Kr{o(N2JswrkuKA&@JcTDcg|Z@Bx)xjL$fustK?osE95t$l3FzZ2o(%~ zK@p~kUTHEYyeS4*w%x1RvSLv?Q5mNM7%444;iy>bklUST(1z@c&b5JSnv4pKg@R2U`)>5lgDUbLoV&jF)qD*;h*s0u7ZQkIfbmJv9Z zbRG0(_baU{BK30%Y$S*@xX}WO1*OJElyr;G7yy~v=+qI2VT_h2H4t#Td+e<%BK31l z#-oQeosdDe$JstHY5y!Lupk(OYzZois;U4A1`%6?mhO$Nh}177MIZ?#Q^^htD6LFz zP$4)A90(>AG4xtV2ndu5)YK)6o9wf$h}6${8QjQ9B^oN?z2`g&CKyFp&&~pZ7q^xi zQa8>@Dpj-q_TI;7T@k6DGc#bYdn!hr6lT(rU5{nY%~UYOgJ;Ev7*{nRs=UF0qaf~$ zu87pnxmm$!a4+@P&<9p0pDN6-#eOHeSKXWL*sEGvuWEbXawXm;5p_kRe$LKH?s{~S z(Q(+%&W4h@G4N}lZ7Z&4NUwvWa}f!pgb3b*%!)|;oSzki{xEOn0YEA#bZ42228-VP zs~r)l9$i#H+`wl*j$`k(@!l1Y#yLY9QuAVEARVEgZRuXVU@uh%6U%h!$0tBGNdQ z7-aJZecyTHn zMwGD5d9vd27<%56Q`?G2<6LO$>JO=M+pS?-DK&8-3}7<>BB|@_!hfjMLu!{hV&tH0IIX2108kGQ{!uaDh>A{u7I0hUiEIr1f};3ytmEsC*Z)N* zIvbdiqo4<8WiyG>Kz*Tb@wRU8hB9%>PN-T`c74EBuS;AklAjIlShG<+F`^b3dLirC zd_<*`>@y0uYJWgZO&#Bw?oG1Cd+~$oE~9gEVrfD?awzF)wa9Q`bpfo(qBIm| zxvBTHe)ZPXVk0$Fn%PNWa+~r*LozVg@Zz;17sBQVnlJ%}JtIe9Z?Iro!*a1XqM@k; z@Sy-bGhrexAuf~ZL+EH#!_*p#(eaL*Qnnfl;e9`a@D2j4r%8?ijw|fgOAyuxRO+qE zhlAu_WG{plB#PR5bMdY8>7G`4yn^kMRml(`jEatLB{9UEfUn}m@Rlcu!E3HbVifOH z^A-r&tTkPEWwojnSt#E3BsaCG#Z*Y^WMT)%I+5sTqeJ z)V%}k5x@6V>s13TRuS3C5XWo@DA`rAHY5TYT&Mg2We8BrT-d~PV)&#0UNhLQxf| zWhiwrg!#~*RM=?y@lL+>%c`K%Y&Huz!rNZ) zD=4eQF{}Ai&_#enk4CfI9GYEgE5EEp9-)j^B~EoLy`1sZSW;FY)Z+ZS|C0pxi5n&NhGyLOaJ^Q{R;xvW zx8?&ofvV6(p}X&`_G=w}r1_+F)aWRo0o9mcG-4=`o4oZ<(Wr=i$lhyW)i(J|4DXb; z7qg+NP&MAbsm_K)5aGgi*;|aNg=R0PMfGKBRc(M=;TAs zuy~$oVl+Q{cwNQjiahi=p|VklLfK2#;+I)4Q9V2#2p7proCw8-yXRP`)Z%EvM?;$M zziRLVWbC`e=4*duwW^sgwfYA~n(7>l)4UxJ#b2~A`%r2jMDG^!-kLoLId58DG1#>c z^~(MxDnTK!IR! zg6c{7(1@PT;SfPSwHsQ}Bzu!+Pnyr)8LijG;xD754Vn|FJ{smDtG>S|L%3!3zlwU| zE=;R>Zl>%*yxexK)UFNGC!@v7%u#JiH51aC97Ti!%X|V{RMS@Rtn}5q8whf=-5hei zHi}oH_)GQ47lcfocqlg}&(q*O+iPm42)c@z(@n{&isNB38WY2~HpG7!wWj&sEP~PC z#E3K9P)8j7pq5wFXuSq@NZhL?_B2Bx%G(qmVtl9ZzZ#7yVXGxWW>w~u1QpM!%05+O zn(LIUBOr3T4X-Yw@sb;(@jBqJ8pVjjU#uW)GEX*i{h_L1REkQI5_ocNm3qKkH62r_ zY10*tPh;2RlFn%=xcdDOjRTucKB^~dL#c*3#=7I;jq{KddqA)s)Jbb2%F{WN-Qmt-!BY80oMGwRWcXX05R zV-}*T3M1-dcQ34~nW-@up~J@LI|E3oQ8i#%oGT4wPOY#oBSL(*LZg^N)BU`WCXj${ zox#{*@6-6TT~awY>6kiYcnQ+05i-gdYs^(u!lJrM*ZezKM)T$oh`%%1t^;LHncQ3d zwrFHF`#5ycgj3g4;80&_HWh@E8iP@Roj1#tc5<gLA7PI{L3f;Y-2QC2U}O8byo2?)9Ae#Cl`%>BU4lcDVk;J zKH2K^%dC03lv3Z6(&Fq>R8r+KT1?5($Xk11-H5TFn0mej*5Q7gWHF;9zcJxCWh<_VQ}!DZx-7c6JoV1Skf$>((@*f@qt7`DZ(NAdqPABF zqY~Fy28P1D-roDBXB?k~v(tszLPvS3_?&*;CzyiXbZLaGd@8D*?Gv3A|{!l-Vh!e}Z{M0{h1NKXUW=~|<-pJ$rj zgEnuB>fV-l=eqfgrtT~=jm9cW94a$zjN0|$)>Dbnybc;QtgTy1>KRqPg{RTB;zpZp zt&rGgdxtN3K!2N%$?sfHd)i))<-~f#R3*5KJ4R_RdAw zr|oTXuuc;Wab5>j!wYbjbpdS5TY}ADoYXTpCYGHeJq>KfGqoj^*EO?;$HFGf{uif7 z-7vfv0j%boR$8ay=@lE)x53`0k?nY)wxH1@uPqF&vUq zzr4o3+hpQTL)+m@ZRpqJ#ccLKbIbEgHJ+_&iMmoybahugjh2f!N%x2m-U~F2A`JJ^w=@; zUCy-W?!3wY(k&XZ@Kjx!-*u(JXNorU{P;Aw9nRFoo1?#y_mGjCb68T-1{U6K3aTwQ zd`C5jfC})dphffe8>8*|s~6UlssrysD&#K8oE(w#dkM%PlfGcv)o|0VB7hEB)NlZw zK#OjS_Umt$SXY{DszIU<{+z=PDjAGky?tX<+v}rYnp8y?)|qbAUC4~*>d-ZZ;j=T{S;tDBJ^WIucWRvSt%q#?`hRkbQ`F5w006NMCDs4{ literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-baseline/bench-320x100-muster-1.csv.gz b/docs/performance/motion-low-hanging/preformat-baseline/bench-320x100-muster-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..af63574ca6a16aa38eaebcfef6b0a3ea3be90fc2 GIT binary patch literal 6189 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 L*vPJX%|rkI7P|*! literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-baseline/bench-320x100-platoon-0.csv.gz b/docs/performance/motion-low-hanging/preformat-baseline/bench-320x100-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..f83a31887f5aa00e6e2dc8ac66a65ac197e0a6d4 GIT binary patch literal 6177 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-baseline/bench-320x100-platoon-1.csv.gz b/docs/performance/motion-low-hanging/preformat-baseline/bench-320x100-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..6fc28d2b4a8a1187f81cfecc0e4fae303930b64d GIT binary patch literal 6134 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-optimized/bench-120x40-muster-1.csv.gz b/docs/performance/motion-low-hanging/preformat-optimized/bench-120x40-muster-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..4c58b29637e9c0aa606ec03393d42b2e92457294 GIT binary patch literal 5558 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 E0Mw4wod5s; literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-optimized/bench-120x40-platoon-0.csv.gz b/docs/performance/motion-low-hanging/preformat-optimized/bench-120x40-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..6bc0d5966b5fd14b627b083ce6b8785336ace568 GIT binary patch literal 5527 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

    Ej3j3`MJ8bH7Qb_J!007&}l0g6f literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-optimized/bench-120x40-platoon-1.csv.gz b/docs/performance/motion-low-hanging/preformat-optimized/bench-120x40-platoon-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..3b3d0206c37a841bc7189a50eaa45e4a3086e736 GIT binary patch literal 5514 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 MUwY{0YE?i00IHmf0{{R3 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-optimized/bench-240x80-muster-0.csv.gz b/docs/performance/motion-low-hanging/preformat-optimized/bench-240x80-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..79fb66bc5856aa12d550b27af2ed6dc33324900d GIT binary patch literal 5991 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 V)vzIF-pBaY{{x?v{)|>b004C1k$M0C literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-optimized/bench-240x80-muster-1.csv.gz b/docs/performance/motion-low-hanging/preformat-optimized/bench-240x80-muster-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..dc5040e73696295be904722a8021e87d6acb92c0 GIT binary patch literal 5978 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 I&R9bL0Qq06g#Z8m literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-optimized/bench-240x80-platoon-0.csv.gz b/docs/performance/motion-low-hanging/preformat-optimized/bench-240x80-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..204ab4bffbcaa06c3632ee12a3bb9250d9157aae GIT binary patch literal 5982 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 MFG+-AHtRzG07QBI&+ao}`jaNhoWMeW4$ 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 QuHFCj|G-VhA@D;00NbLxp8x;= literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-optimized/bench-320x100-muster-0.csv.gz b/docs/performance/motion-low-hanging/preformat-optimized/bench-320x100-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..16128ef0298c658582d1c5ae6166c900c448c80b GIT binary patch literal 6199 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 V&eGsGO339u{|7^?5sR)w008VK9QptN literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-optimized/bench-320x100-muster-1.csv.gz b/docs/performance/motion-low-hanging/preformat-optimized/bench-320x100-muster-1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..101fb3649d6d44701a522d0b261e2174746d37e2 GIT binary patch literal 6167 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 E07s)Ee*gdg literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/preformat-optimized/metadata.json b/docs/performance/motion-low-hanging/preformat-optimized/metadata.json new file mode 100644 index 000000000..688c850aa --- /dev/null +++ b/docs/performance/motion-low-hanging/preformat-optimized/metadata.json @@ -0,0 +1,132 @@ +{ + "binary": "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "sha256": "eb7a991260f91759c378cef119ea86b9d559a79f6730d6d80e86fc59bece5c0c", + "runs": [ + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "240x80", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-240x80-muster-0.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "320x100", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-320x100-platoon-1.csv" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "120x40", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-120x40-muster-0.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "120x40", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-120x40-muster-1.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "240x80", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-240x80-muster-1.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "120x40", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-120x40-platoon-1.csv" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "320x100", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-320x100-muster-1.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "240x80", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-240x80-platoon-0.csv" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "120x40", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-120x40-platoon-0.csv" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "320x100", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-320x100-platoon-0.csv" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "320x100", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-320x100-muster-0.csv", + "--muster" + ], + [ + "/home/clifford/Documents/source/nori/cli/nori-rs/target/release/examples/motion_storybook", + "--bench", + "--size", + "240x80", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/paired-optimized/bench-240x80-platoon-1.csv" + ] + ] +} diff --git a/docs/performance/motion-low-hanging/run.py b/docs/performance/motion-low-hanging/run.py new file mode 100644 index 000000000..833dfe81b --- /dev/null +++ b/docs/performance/motion-low-hanging/run.py @@ -0,0 +1,48 @@ +"""Bounded, sequential baseline/candidate runs; all artifacts persist after each case.""" +import argparse, csv, hashlib, json, os, pathlib, random, shlex, subprocess, time +p=argparse.ArgumentParser() +p.add_argument('--trace',action='store_true'); p.add_argument('binary',type=pathlib.Path); p.add_argument('label'); p.add_argument('--live',action='store_true'); p.add_argument('--repeats',type=int,default=3); p.add_argument('--sizes',help='Comma-separated WIDTHxHEIGHT list') +a=p.parse_args(); root=pathlib.Path(__file__).resolve().parent/a.label +root.mkdir(exist_ok=True); binary=a.binary.resolve() +env=dict(os.environ,TERM='xterm-256color',COLORTERM='truecolor'); env.pop('NO_COLOR',None) +mode='live' if a.live else 'bench' +sizes=['120x40','240x80'] if a.live else ['120x40','240x80','320x100'] +if a.sizes: sizes=a.sizes.split(',') +cases=[(size,muster,rep) for size in sizes for muster in [False,True] for rep in range(a.repeats)] +random.Random(911).shuffle(cases) +metadata={'binary':str(binary),'sha256':hashlib.sha256(binary.read_bytes()).hexdigest(),'mode':mode,'runs':[]} +if (root/f'{mode}-metadata.json').exists(): raise RuntimeError('choose a new label; existing metadata is immutable') +(root/f'{mode}-metadata.json').write_text(json.dumps(metadata,indent=2)+'\n') +scripts=pathlib.Path(os.environ.get('TUI_PUPPETEERING_DIR','/home/clifford/.nori/profiles/public/clifford/skills/tui-puppeteering-with-tmux')) +for size,muster,rep in cases: + variant='muster' if muster else 'platoon'; output=root/f'{mode}-{size}-{variant}-{rep}.csv' + if output.exists() or output.with_suffix('.csv.gz').exists(): raise RuntimeError(f'refusing to overwrite {output}') + command=[str(binary),'--frames','150','--profile',str(output)] + if muster: command+=['--muster'] + if a.trace: + assert a.live, 'tracing requires a live terminal' + command=['strace','-c','-e','trace=write,writev','-o',str(output.with_suffix('.strace.txt')),*command] + start=time.monotonic() + if not a.live: + command+=['--bench','--size',size] + subprocess.run(command,env=env,check=True,capture_output=True,timeout=60) + else: + session=f'motion-perf-{os.getpid()}' + # Wait for input so the size is set before initialization and frame zero. + launcher=root/'live-launch.sh' + launcher.write_text('#!/bin/sh\nread -r ready\n'+shlex.join(['env','-u','NO_COLOR','TERM=xterm-256color','COLORTERM=truecolor']+command)+'\nmotion_exit=$?\nprintf "\\nMOTION_DONE_%s\\n" "$motion_exit"\nread -r done\n') + def tool(name,*args): return subprocess.run([str(scripts/name),*args],check=True,capture_output=True,text=True,timeout=45) + try: + tool('tui-start',session,shlex.join(['sh',str(launcher)])) + width,height=size.split('x'); tool('tmux-isolated','resize-window','-t',session,'-x',width,'-y',height) + tool('tui-send',session,'--keys','Enter') + tool('tui-assert',session,'·','5') + tool('tui-assert',session,'MOTION_DONE_0','35') + finally: + tool('tui-stop',session) + launcher.unlink(missing_ok=True) + rows=list(csv.DictReader(output.open())); assert len(rows)==150,(output,len(rows)) + assert all(f"{r['width']}x{r['height']}"==size for r in rows) + metadata['runs'].append({'command':command,'size':size,'muster':muster,'repeat':rep,'wall_seconds':time.monotonic()-start}) + (root/f'{mode}-metadata.json').write_text(json.dumps(metadata,indent=2)+'\n') + print(f'{a.label} {mode} {size} {variant} repeat {rep}: saved',flush=True) diff --git a/docs/performance/motion-low-hanging/summarize.py b/docs/performance/motion-low-hanging/summarize.py new file mode 100644 index 000000000..fbdf40870 --- /dev/null +++ b/docs/performance/motion-low-hanging/summarize.py @@ -0,0 +1,29 @@ +"""Summarize each stage separately; never pool baseline and candidate samples.""" +import csv, gzip, math, pathlib, statistics +root=pathlib.Path(__file__).resolve().parent +summary=[]; phases=[] +def percentile(values,q): + values=sorted(values); return values[math.ceil(len(values)*q)-1] +for directory in sorted(root.iterdir()): + if not directory.is_dir() or directory.name.startswith('trace-'): continue + groups={} + for path in sorted(list(directory.glob('*.csv')) + list(directory.glob('*.csv.gz'))): + for row in list(csv.DictReader(gzip.open(path,'rt') if path.suffix=='.gz' else path.open()))[1:]: + key=(row['mode'],row['variant'],f"{row['width']}x{row['height']}") + groups.setdefault(key,[]).append(row) + for (mode,variant,size),rows in sorted(groups.items()): + totals=[float(r['total_us'])/1000 for r in rows] + widget=[float(r['widget_us'])/1000 for r in rows] + output=[float(r['output_us'])/1000 for r in rows] + intervals=[float(r['interval_us'])/1000 for r in rows] + result=dict(stage=directory.name,mode=mode,variant=variant,size=size,frames=len(rows),median_ms=statistics.median(totals),p95_ms=percentile(totals,.95),p99_ms=percentile(totals,.99),max_ms=max(totals),over_40ms_pct=100*sum(x>40 for x in totals)/len(totals),widget_p95_ms=percentile(widget,.95),output_p95_ms=percentile(output,.95),produced_fps=1000/statistics.mean(intervals) if mode=='live' else '',interval_p95_ms=percentile(intervals,.95) if mode=='live' else '',gaps_over_60ms_pct=100*sum(x>60 for x in intervals)/len(rows) if mode=='live' else '') + summary.append(result) + for name,low,high in [('early',0,.45),('middle',.45,.75),('late',.75,1.01)]: + selected=[r for r in rows if low<=float(r['phase']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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/trace-baseline/live-240x80-muster-0.strace.txt b/docs/performance/motion-low-hanging/trace-baseline/live-240x80-muster-0.strace.txt new file mode 100644 index 000000000..56fa4f7cd --- /dev/null +++ b/docs/performance/motion-low-hanging/trace-baseline/live-240x80-muster-0.strace.txt @@ -0,0 +1,5 @@ +% time seconds usecs/call calls errors syscall +------ ----------- ----------- --------- --------- ---------------- +100.00 0.085307 2 33957 1 write +------ ----------- ----------- --------- --------- ---------------- +100.00 0.085307 2 33957 1 total diff --git a/docs/performance/motion-low-hanging/trace-baseline/live-240x80-platoon-0.csv.gz b/docs/performance/motion-low-hanging/trace-baseline/live-240x80-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..2bbc696c39e74eb279c1387fb7be4dd4de18a18b GIT binary patch literal 4747 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 Z{>3BebeT*{{MUNy|9>f{Im_HQ007J#SR()c literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/trace-baseline/live-240x80-platoon-0.strace.txt b/docs/performance/motion-low-hanging/trace-baseline/live-240x80-platoon-0.strace.txt new file mode 100644 index 000000000..e913e3406 --- /dev/null +++ b/docs/performance/motion-low-hanging/trace-baseline/live-240x80-platoon-0.strace.txt @@ -0,0 +1,5 @@ +% time seconds usecs/call calls errors syscall +------ ----------- ----------- --------- --------- ---------------- +100.00 0.075883 2 34119 1 write +------ ----------- ----------- --------- --------- ---------------- +100.00 0.075883 2 34119 1 total diff --git a/docs/performance/motion-low-hanging/trace-baseline/live-metadata.json b/docs/performance/motion-low-hanging/trace-baseline/live-metadata.json new file mode 100644 index 000000000..574ef1859 --- /dev/null +++ b/docs/performance/motion-low-hanging/trace-baseline/live-metadata.json @@ -0,0 +1,46 @@ +{ + "binary": "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "sha256": "6af8b0db3173a9fadd6393edfdd3b30e8dbf166dd8abf998d21598f81e3bfdc4", + "mode": "live", + "runs": [ + { + "command": [ + "strace", + "-c", + "-e", + "trace=write,writev", + "-o", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/trace-baseline/live-240x80-platoon-0.strace.txt", + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/trace-baseline/live-240x80-platoon-0.csv" + ], + "size": "240x80", + "muster": false, + "repeat": 0, + "wall_seconds": 8.579383844000404 + }, + { + "command": [ + "strace", + "-c", + "-e", + "trace=write,writev", + "-o", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/trace-baseline/live-240x80-muster-0.strace.txt", + "/home/clifford/Documents/source/nori/.local/motion-performance/549032f3/motion_storybook", + "--frames", + "150", + "--profile", + "/home/clifford/Documents/source/nori/cli/docs/performance/motion-low-hanging/trace-baseline/live-240x80-muster-0.csv", + "--muster" + ], + "size": "240x80", + "muster": true, + "repeat": 0, + "wall_seconds": 8.625405619000958 + } + ] +} diff --git a/docs/performance/motion-low-hanging/trace-optimized/live-240x80-muster-0.csv.gz b/docs/performance/motion-low-hanging/trace-optimized/live-240x80-muster-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..cad966114ae04eaa8102e273b3b8cd2d635f6a06 GIT binary patch literal 4716 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 literal 0 HcmV?d00001 diff --git a/docs/performance/motion-low-hanging/trace-optimized/live-240x80-muster-0.strace.txt b/docs/performance/motion-low-hanging/trace-optimized/live-240x80-muster-0.strace.txt new file mode 100644 index 000000000..4b5e062d4 --- /dev/null +++ b/docs/performance/motion-low-hanging/trace-optimized/live-240x80-muster-0.strace.txt @@ -0,0 +1,5 @@ +% time seconds usecs/call calls errors syscall +------ ----------- ----------- --------- --------- ---------------- +100.00 0.034065 54 629 1 write +------ ----------- ----------- --------- --------- ---------------- +100.00 0.034065 54 629 1 total diff --git a/docs/performance/motion-low-hanging/trace-optimized/live-240x80-platoon-0.csv.gz b/docs/performance/motion-low-hanging/trace-optimized/live-240x80-platoon-0.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..2371c5dd8669476d35629b34bead7c872094d9c0 GIT binary patch literal 4754 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 i64 { + let mut buffer = Buffer::empty(clip); + widget.render(area, &mut buffer); + let mut hash = -3_750_763_034_362_895_579_i64; + let mut encoded = String::new(); + for cell in buffer.content { + encoded.clear(); + write!(&mut encoded, "{cell:?}").unwrap(); + for byte in encoded.bytes() { + hash = (hash ^ i64::from(byte)).wrapping_mul(1_099_511_628_211); + } + } + hash +} + +fn main() { + for (width, height) in [(36, 20), (120, 40)] { + let area = Rect::new(0, 0, width, height); + for formation in [MotionFormation::Platoon, MotionFormation::Muster] { + for frame in 0..150 { + let leg = f64::from(frame) / 75.0; + let progress = if leg <= 1.0 { leg } else { 2.0 - leg }; + let widget = MotionBackground::new( + MotionScene::Dots, + Duration::from_millis((12000 + frame * 40).try_into().unwrap()), + ) + .transition_to(MotionScene::Formations, progress) + .formation(formation) + .palette(MotionPalette::nori()); + println!( + "zoom {width}x{height} {formation:?} {frame} {:016x}", + fingerprint(widget, area, area) + ); + } + } + } + let area = Rect::new(3, 2, 48, 24); + for scene in MotionScene::ALL { + for time in [0, 12, 36, 60, 84, 94, 86399] { + for progress in [0.0, 0.37, 0.8, 1.0] { + for policy in 0..4 { + let mut widget = MotionBackground::new(scene, Duration::from_secs(time)) + .transition_to(MotionScene::Blueprint, progress); + let clip = if policy == 3 { + Rect::new(10, 7, 25, 14) + } else { + area + }; + match policy { + 0 => {} + 1 => widget = widget.palette(MotionPalette::nori()), + 2 => widget = widget.ascii(true).palette(MotionPalette::nori()), + 3 => { + widget = widget + .quiet_area(Rect::new(16, 9, 12, 8)) + .palette(MotionPalette::nori()) + } + _ => unreachable!(), + } + println!( + "suite {scene:?} {time} {progress} {policy} {:016x}", + fingerprint(widget, area, clip) + ); + } + } + } + } +} diff --git a/nori-rs/tui-components/examples/motion_storybook/README.md b/nori-rs/tui-components/examples/motion_storybook/README.md index 3ccf9316f..90c53dea0 100644 --- a/nori-rs/tui-components/examples/motion_storybook/README.md +++ b/nori-rs/tui-components/examples/motion_storybook/README.md @@ -64,3 +64,10 @@ The example timeline now supplies explicit time/progress to `MotionBackground`. It does not require `MotionState`; that controller remains available to consumers that want its default linear transitions. Sampling and art direction are unchanged by the API cleanup. + +The [optimization report](../../../../docs/performance/motion-low-hanging/README.md) +contains a durable baseline, interleaved before/after data, syscall counts, and +visual-equivalence fingerprints. `motion_equivalence` is a separate example that +prints deterministic glyph/style fingerprints; run it outside timed measurements. +The terminal helper now buffers ANSI writes while retaining Ratatui's incremental +diff. Changes to write batching affect live timings, not the headless counting sink. diff --git a/nori-rs/tui-components/examples/support/mod.rs b/nori-rs/tui-components/examples/support/mod.rs index f1de049d3..60dc505ab 100644 --- a/nori-rs/tui-components/examples/support/mod.rs +++ b/nori-rs/tui-components/examples/support/mod.rs @@ -1,4 +1,5 @@ -use std::io::Stdout; +use std::io::BufWriter; +use std::io::StdoutLock; use std::time::Duration; use anyhow::Result; @@ -13,14 +14,16 @@ use ratatui::Terminal; use ratatui::backend::CrosstermBackend; pub struct StorybookTerminal { - pub terminal: Terminal>, + pub terminal: Terminal>>>, pub theme: Theme, } impl StorybookTerminal { pub fn enter() -> Result { enable_raw_mode()?; - let mut stdout = std::io::stdout(); + // Ratatui still diffs consecutive frames. Batch the encoder's small writes + // and hold stdout's lock once for the terminal's lifetime. + let mut stdout = BufWriter::with_capacity(64 * 1024, std::io::stdout().lock()); execute!(stdout, EnterAlternateScreen)?; let terminal = Terminal::new(CrosstermBackend::new(stdout))?; let theme = Theme::for_terminal_background(relative_terminal_background()); diff --git a/nori-rs/tui-components/src/motion/fields.rs b/nori-rs/tui-components/src/motion/fields.rs index 144221665..dc7d51704 100644 --- a/nori-rs/tui-components/src/motion/fields.rs +++ b/nori-rs/tui-components/src/motion/fields.rs @@ -30,7 +30,14 @@ pub(super) struct Field { scale: f64, shape: f64, lines: f64, - formation: MotionFormation, + formation_segment: i32, + formation_fade: f64, + zoom_mix: f64, + braille_mix: f64, + fade: f64, + noise: math::Noise, + islands: [Option; 64], + muster_rows: [Option; 4], } impl Field { @@ -40,6 +47,12 @@ impl Field { } else { 0.55 + (phase - 3.0) * 0.45 }; + let segment = match formation { + MotionFormation::Cycle => (time / 24.0).floor() as i32, + MotionFormation::Platoon => 0, + MotionFormation::Muster => 3, + }; + let local = time.rem_euclid(24.0) - 8.0; Self { width: f64::from(area.width) * 2.0, height: f64::from(area.height) * 4.0, @@ -52,16 +65,29 @@ impl Field { }, shape: smooth(morph / 0.6), lines: smooth((morph - 0.55) / 0.45), - formation, + formation_segment: segment.rem_euclid(4), + formation_fade: match formation { + MotionFormation::Cycle => smooth(local / 1.6) * smooth((16.0 - local) / 1.6), + MotionFormation::Platoon | MotionFormation::Muster => 1.0, + }, + zoom_mix: smooth((phase.min(1.0) - 0.75) / 0.25), + braille_mix: smooth((phase.min(1.0) - 0.45) / 0.55), + fade: if (1.0..2.0).contains(&phase) { + 1.0 - smooth(1.0 - (2.0 * (phase - 1.0) - 1.0).abs()) + } else { + 1.0 + }, + noise: math::Noise::new(time * 0.1), + islands: [None; 64], + muster_rows: [None; 4], } } - pub fn cell(&self, x: i32, y: i32, ascii: bool) -> Sample { + pub fn cell(&mut self, x: i32, y: i32, ascii: bool) -> Sample { let threshold = (f64::from(BAYER[y.rem_euclid(4) as usize][x.rem_euclid(4) as usize]) + 0.5) / 16.0; - let braille = !ascii - && ((self.phase < 1.5 && threshold < smooth((self.phase.min(1.0) - 0.45) / 0.55)) - || self.lines > 0.5); + let braille = + !ascii && ((self.phase < 1.5 && threshold < self.braille_mix) || self.lines > 0.5); let mut sum = 0.0; let glyph = if braille { let mut bits = 0; @@ -90,11 +116,7 @@ impl Field { let level = (sum.clamp(0.0, 0.999) * 4.0 + threshold).floor() as usize; if ascii { ASCII[level] } else { DOTS[level] } }; - let fade = if (1.0..2.0).contains(&self.phase) { - 1.0 - smooth(1.0 - (2.0 * (self.phase - 1.0) - 1.0).abs()) - } else { - 1.0 - }; + let fade = self.fade; let eye = if self.phase >= 2.0 && self.lines < 0.7 { self.eye(x, y) } else { @@ -111,7 +133,7 @@ impl Field { } } - fn value(&self, fx: f64, fy: f64) -> f64 { + fn value(&mut self, fx: f64, fy: f64) -> f64 { if self.phase < 1.5 { self.zoom(fx, fy) } else { diff --git a/nori-rs/tui-components/src/motion/fields/math.rs b/nori-rs/tui-components/src/motion/fields/math.rs index 7c6b73406..daa5de031 100644 --- a/nori-rs/tui-components/src/motion/fields/math.rs +++ b/nori-rs/tui-components/src/motion/fields/math.rs @@ -14,23 +14,106 @@ pub(super) fn hash(x: i32, y: i32, z: i32) -> f64 { f64::from((h ^ ((h as u32 >> 16) as i32)) as u32) / f64::from(u32::MAX) } -pub(super) fn noise(x: f64, y: f64, t: f64) -> f64 { - let mut value = 0.0; - let sx = smooth(x - x.floor()); - let sy = smooth(y - y.floor()); - let st = smooth(t - t.floor()); - for dz in 0..2 { - for dy in 0..2 { - for dx in 0..2 { - value += hash( - x.floor() as i32 + dx, - y.floor() as i32 + dy, - t.floor() as i32 + dz, - ) * if dx == 0 { 1.0 - sx } else { sx } - * if dy == 0 { 1.0 - sy } else { sy } - * if dz == 0 { 1.0 - st } else { st }; +/// Small frame-local cache of the eight lattice corners used by noise samples. +/// Direct mapping bounds memory; collisions only recompute a cell. +#[derive(Clone, Copy)] +struct NoiseCell { + x: i32, + y: i32, + corners: [f64; 8], +} + +pub(super) struct Noise { + time: i32, + weight: f64, + cells: [Option; 16], +} + +impl Noise { + pub fn new(time: f64) -> Self { + Self { + time: time.floor() as i32, + weight: smooth(time - time.floor()), + cells: [None; 16], + } + } + + pub fn sample(&mut self, x: f64, y: f64) -> f64 { + let ix = x.floor() as i32; + let iy = y.floor() as i32; + let slot = (ix.rem_euclid(4) + iy.rem_euclid(4) * 4) as usize; + let cell = match self.cells[slot] { + Some(cell) if cell.x == ix && cell.y == iy => cell, + _ => { + let cell = NoiseCell { + x: ix, + y: iy, + corners: std::array::from_fn(|index| { + let dx = (index % 2) as i32; + let dy = ((index / 2) % 2) as i32; + let dz = (index / 4) as i32; + hash(ix + dx, iy + dy, self.time + dz) + }), + }; + self.cells[slot] = Some(cell); + cell + } + }; + let sx = smooth(x - x.floor()); + let sy = smooth(y - y.floor()); + let st = self.weight; + let mut value = 0.0; + // Retain the original multiply/add order to preserve threshold decisions. + for dz in 0..2 { + for dy in 0..2 { + for dx in 0..2 { + value += cell.corners[dz * 4 + dy * 2 + dx] + * if dx == 0 { 1.0 - sx } else { sx } + * if dy == 0 { 1.0 - sy } else { sy } + * if dz == 0 { 1.0 - st } else { st }; + } + } + } + value + } +} + +#[cfg(test)] +mod tests { + use super::*; + use pretty_assertions::assert_eq; + + #[test] + fn noise_cache_preserves_values_through_hits_collisions_and_negative_coordinates() { + for time in [0.0, 1.25, 8639.9] { + let mut noise = Noise::new(time); + // The distant points deliberately collide in the direct-mapped cache. + for (x, y) in [ + (0.2_f64, 0.7_f64), + (0.4, 0.9), + (4.2, 4.7), + (0.2, 0.7), + (-0.2, -4.7), + ] { + let sx = smooth(x - x.floor()); + let sy = smooth(y - y.floor()); + let st = smooth(time - time.floor()); + let mut expected = 0.0; + for dz in 0..2 { + for dy in 0..2 { + for dx in 0..2 { + expected += hash( + x.floor() as i32 + dx, + y.floor() as i32 + dy, + time.floor() as i32 + dz, + ) * if dx == 0 { 1.0 - sx } else { sx } + * if dy == 0 { 1.0 - sy } else { sy } + * if dz == 0 { 1.0 - st } else { st }; + } + } + } + assert_eq!(noise.sample(x, y), expected); } } } - value } diff --git a/nori-rs/tui-components/src/motion/fields/zoom.rs b/nori-rs/tui-components/src/motion/fields/zoom.rs index e08a8b0c1..9aa9217b2 100644 --- a/nori-rs/tui-components/src/motion/fields/zoom.rs +++ b/nori-rs/tui-components/src/motion/fields/zoom.rs @@ -2,31 +2,62 @@ use std::f64::consts::TAU; -use super::super::MotionFormation; use super::Field; use super::math::hash; -use super::math::noise; use super::math::smooth; +#[derive(Clone, Copy)] +pub(super) struct Island { + x: i32, + y: i32, + drift_x: f64, + drift_y: f64, + pulse: f64, +} + +#[derive(Clone, Copy)] +pub(super) struct MusterRow { + y: f64, + depth: f64, + row: f64, +} + impl Field { - pub(super) fn zoom(&self, fx: f64, fy: f64) -> f64 { - let z = self.phase.min(1.0); + pub(super) fn zoom(&mut self, fx: f64, fy: f64) -> f64 { + let mix = self.zoom_mix; + if mix == 1.0 { + return self.formations(fx, fy); + } let scale = if self.phase >= 1.0 { 1.0 } else { self.scale }; let wx = (fx - self.width / 2.0) / scale + self.time * 0.02; let wy = (fy - self.height / 2.0) / scale + self.time * 0.008; - let phase = hash(wx.floor() as i32, wy.floor() as i32, 0) * TAU; - let speed = 0.5 + hash(wx.floor() as i32, wy.floor() as i32, 1) * 0.9; - let t = self.time * 0.5; + let ix = wx.floor() as i32; + let iy = wy.floor() as i32; + let slot = (ix.rem_euclid(16) + iy.rem_euclid(4) * 16) as usize; + let island = match self.islands[slot] { + Some(island) if island.x == ix && island.y == iy => island, + _ => { + let phase = hash(ix, iy, 0) * TAU; + let speed = 0.5 + hash(ix, iy, 1) * 0.9; + let t = self.time * 0.5; + let island = Island { + x: ix, + y: iy, + drift_x: 0.26 * (t * 0.43 * speed + phase).sin(), + drift_y: 0.26 * (t * 0.31 * speed + phase * 1.7).cos(), + pulse: 0.5 + 0.5 * (t * speed + phase).sin(), + }; + self.islands[slot] = Some(island); + island + } + }; let u = (wx - wx.floor() - 0.5) * 2.0; let v = (wy - wy.floor() - 0.5) * 2.0; - let mx = 0.26 * (t * 0.43 * speed + phase).sin(); - let my = 0.26 * (t * 0.31 * speed + phase * 1.7).cos(); let window = ((1.0 - u.abs().max(v.abs())) * 2.2).clamp(0.0, 1.0); - let dots = (1.0 - (u - mx).hypot(v - my) * 0.85).max(0.0) - * (0.5 + 0.5 * (t * speed + phase).sin()) + let dots = (1.0 - (u - island.drift_x).hypot(v - island.drift_y) * 0.85).max(0.0) + * island.pulse * 1.15 * window; - let mix = smooth((z - 0.75) / 0.25); // Avoid paying for dense formations until the zoom reaches them. if mix == 0.0 { dots @@ -35,26 +66,19 @@ impl Field { } } - fn formations(&self, x: f64, y: f64) -> f64 { + fn quiet(&mut self, x: f64, y: f64) -> f64 { + 0.1 + 0.3 * (0.5 + 0.5 * (x * 0.01 + y * 0.014 + self.time * 0.12).sin()) + + 0.2 * self.noise.sample(x * 0.022, y * 0.013) + } + + fn formations(&mut self, x: f64, y: f64) -> f64 { let t = self.time; - let quiet = 0.1 - + 0.3 * (0.5 + 0.5 * (x * 0.01 + y * 0.014 + t * 0.12).sin()) - + 0.2 * noise(x * 0.022, y * 0.013, t * 0.1); - // Four 16-second formations, each separated by eight seconds of quiet. - let segment = match self.formation { - MotionFormation::Cycle => (t / 24.0).floor() as i32, - MotionFormation::Platoon => 0, - MotionFormation::Muster => 3, - }; - let local = t.rem_euclid(24.0) - 8.0; - let fade = match self.formation { - MotionFormation::Cycle => smooth(local / 1.6) * smooth((16.0 - local) / 1.6), - MotionFormation::Platoon | MotionFormation::Muster => 1.0, - }; + let fade = self.formation_fade; if fade == 0.0 { - return quiet; + return self.quiet(x, y); } - let formation = match segment.rem_euclid(4) { + let mut quiet = None; + let formation = match self.formation_segment { 0 => { let lane = (y / 22.0).floor() as i32; let speed = [-11.0, -5.0, 5.0][lane.rem_euclid(3) as usize]; @@ -67,7 +91,9 @@ impl Field { 0.34 } } else { - quiet * 0.35 + let value = self.quiet(x, y); + quiet = Some(value); + value * 0.35 } } 1 => { @@ -86,7 +112,7 @@ impl Field { } } 2 => { - let mut value = quiet; + let mut occupied = false; for k in 0..6 { let angle = f64::from(k) * TAU / 6.0 + t * 0.11; let px = x - self.width * (0.5 + angle.cos() * 0.32); @@ -95,14 +121,34 @@ impl Field { if (px - size * 0.4).abs().max((py + size * 0.4).abs()) < size || (px + size * 0.4).abs().max((py - size * 0.4).abs()) < size { - value = 0.65; + occupied = true; } } - value + if occupied { + 0.65 + } else { + let value = self.quiet(x, y); + quiet = Some(value); + value + } } _ => { - let depth = 50.0 + y; - let row = 14.0 * depth.ln() - t * 0.9; + let slot = (y as i32).rem_euclid(4) as usize; + let cached = match self.muster_rows[slot] { + Some(cached) if cached.y == y => cached, + _ => { + let depth = 50.0 + y; + let cached = MusterRow { + y, + depth, + row: 14.0 * depth.ln() - t * 0.9, + }; + self.muster_rows[slot] = Some(cached); + cached + } + }; + let depth = cached.depth; + let row = cached.row; let col = (x - self.width / 2.0) * 22.0 / depth; if (col.floor() as i32).rem_euclid(7) == 0 || (row.floor() as i32).rem_euclid(8) == 0 @@ -115,6 +161,12 @@ impl Field { } } }; - quiet + (formation - quiet) * fade + // An opaque pattern does not need its invisible ambient field. + if fade == 1.0 { + formation + } else { + let quiet = quiet.unwrap_or_else(|| self.quiet(x, y)); + quiet + (formation - quiet) * fade + } } } diff --git a/nori-rs/tui-components/src/motion/mod.rs b/nori-rs/tui-components/src/motion/mod.rs index 79725769e..5e39be2e7 100644 --- a/nori-rs/tui-components/src/motion/mod.rs +++ b/nori-rs/tui-components/src/motion/mod.rs @@ -169,6 +169,10 @@ impl Widget for MotionBackground { fn render(self, area: Rect, buf: &mut Buffer) { // Keep coordinates relative to the original area when the buffer clips it. let visible = area.intersection(buf.area); + if visible.is_empty() { + return; + } + let palette = self.palette.prepare(); // Bound the floating-point clock even for a caller supplying Duration::MAX. let (position, time) = if self.reduced_motion { (self.scene.position(), 0.0) @@ -179,7 +183,7 @@ impl Widget for MotionBackground { + f64::from(self.elapsed.subsec_nanos()) / 1e9, ) }; - let field = fields::Field::new(area, time, position, self.formation); + let mut field = fields::Field::new(area, time, position, self.formation); let quiet = self.quiet_area.filter(|rect| !rect.is_empty()); for y in visible.top()..visible.bottom() { for x in visible.left()..visible.right() { @@ -203,10 +207,7 @@ impl Widget for MotionBackground { continue; } cell.set_char(sample.glyph); - cell.set_style( - self.palette - .style(sample.intensity * fade, sample.highlight), - ); + cell.set_style(palette.style(sample.intensity * fade, sample.highlight)); } } } diff --git a/nori-rs/tui-components/src/motion/palette.rs b/nori-rs/tui-components/src/motion/palette.rs index 97bea0524..198829968 100644 --- a/nori-rs/tui-components/src/motion/palette.rs +++ b/nori-rs/tui-components/src/motion/palette.rs @@ -14,7 +14,41 @@ pub struct MotionPalette { pub highlight: Style, } +/// Prepared once per frame. Non-RGB styles retain the exact dimming threshold. +pub(super) struct PreparedPalette { + ramps: [[Style; 17]; 2], + rgb: [bool; 2], +} + +impl PreparedPalette { + pub fn style(&self, intensity: f64, highlight: bool) -> Style { + let ramp = usize::from(highlight); + let index = if self.rgb[ramp] { + (intensity.clamp(0.0, 1.0) * 16.0).round() as usize + } else if intensity < 0.3 { + 0 + } else { + 16 + }; + self.ramps[ramp][index] + } +} + impl MotionPalette { + pub(super) fn prepare(self) -> PreparedPalette { + PreparedPalette { + ramps: std::array::from_fn(|ramp| { + std::array::from_fn(|level| self.style(level as f64 / 16.0, ramp == 1)) + }), + rgb: [self.ink, self.highlight].map(|ink| { + matches!( + (ink.fg, self.surface.bg), + (Some(Color::Rgb(..)), Some(Color::Rgb(..))) + ) + }), + } + } + /// Terminal-compatible default; never invents a background color. pub fn from_theme(theme: Theme) -> Self { Self { @@ -61,3 +95,38 @@ impl Default for MotionPalette { Self::from_theme(Theme::default()) } } + +#[cfg(test)] +mod tests { + use super::*; + use pretty_assertions::assert_eq; + + #[test] + #[allow(clippy::disallowed_methods)] + fn prepared_styles_preserve_custom_colors_modifiers_and_dimming_thresholds() { + for palette in [ + MotionPalette::default(), + MotionPalette::nori(), + MotionPalette { + surface: Style::new() + .bg(Color::Rgb(230, 220, 210)) + .add_modifier(Modifier::ITALIC), + ink: Style::new() + .fg(Color::Rgb(20, 30, 40)) + .remove_modifier(Modifier::DIM), + highlight: Style::new().fg(Color::Magenta).add_modifier(Modifier::BOLD), + }, + ] { + let prepared = palette.prepare(); + for step in -10..=1010 { + let intensity = f64::from(step) / 1000.0; + for highlight in [false, true] { + assert_eq!( + prepared.style(intensity, highlight), + palette.style(intensity, highlight) + ); + } + } + } + } +} diff --git a/nori-rs/tui-components/src/motion/tests.rs b/nori-rs/tui-components/src/motion/tests.rs index 8d2a138f7..36c435044 100644 --- a/nori-rs/tui-components/src/motion/tests.rs +++ b/nori-rs/tui-components/src/motion/tests.rs @@ -213,3 +213,32 @@ fn explicit_time_can_seek_and_matches_controller_frames() { } } } + +#[test] +fn cached_zoom_is_independent_of_clip_and_previous_frames() { + let area = Rect::new(3, 2, 100, 40); + let clip = Rect::new(19, 9, 41, 19); + for time in [12, 94, 36, 12] { + for progress in [0.4, 0.8, 1.0] { + for formation in [ + MotionFormation::Cycle, + MotionFormation::Platoon, + MotionFormation::Muster, + ] { + let widget = MotionBackground::new(MotionScene::Dots, Duration::from_secs(time)) + .transition_to(MotionScene::Formations, progress) + .formation(formation) + .palette(MotionPalette::nori()); + let mut full = Buffer::empty(area); + widget.clone().render(area, &mut full); + let mut clipped = Buffer::empty(clip); + widget.render(area, &mut clipped); + for y in clip.top()..clip.bottom() { + for x in clip.left()..clip.right() { + assert_eq!(&full[(x, y)], &clipped[(x, y)]); + } + } + } + } + } +} From 2892d40bee59ae698cf6c9124f66409892e26f00 Mon Sep 17 00:00:00 2001 From: Clifford Ressel Date: Fri, 11 Sep 2026 16:40:17 -0400 Subject: [PATCH 4/4] test(tui-components): snapshot motion storybook at fixed times --- nori-rs/tui-components/examples/README.md | 8 +- .../examples/motion_storybook.rs | 3 +- .../examples/motion_storybook/README.md | 22 +++++ .../examples/motion_storybook/e2e.rs | 88 ++++++++++++++++++- .../examples/motion_storybook/profile.rs | 14 ++- ...ok_motion__muster_braille_100x34_ansi.snap | 37 ++++++++ ...ok_motion__muster_braille_100x34_text.snap | 37 ++++++++ ...ybook_motion__muster_dots_100x34_ansi.snap | 37 ++++++++ ...ybook_motion__muster_dots_100x34_text.snap | 37 ++++++++ ...ook_motion__muster_return_zoom_100x34.snap | 38 ++++++++ ...otion__muster_return_zoom_100x34_ansi.snap | 37 ++++++++ ...otion__muster_return_zoom_100x34_text.snap | 37 ++++++++ ...book_motion__muster_return_zoom_36x20.snap | 24 +++++ ...ybook_motion__muster_zoom_100x34_ansi.snap | 37 ++++++++ ...ybook_motion__muster_zoom_100x34_text.snap | 37 ++++++++ ...rybook_motion__muster_zoom_36x20_ansi.snap | 23 +++++ ...rybook_motion__muster_zoom_36x20_text.snap | 23 +++++ ...k_motion__platoon_braille_100x34_ansi.snap | 37 ++++++++ ...k_motion__platoon_braille_100x34_text.snap | 37 ++++++++ ...book_motion__platoon_dots_100x34_ansi.snap | 37 ++++++++ ...book_motion__platoon_dots_100x34_text.snap | 37 ++++++++ ...ok_motion__platoon_return_zoom_100x34.snap | 38 ++++++++ ...tion__platoon_return_zoom_100x34_ansi.snap | 37 ++++++++ ...tion__platoon_return_zoom_100x34_text.snap | 37 ++++++++ ...ook_motion__platoon_return_zoom_36x20.snap | 24 +++++ ...ybook_motion__platoon_zoom_36x20_ansi.snap | 23 +++++ ...ybook_motion__platoon_zoom_36x20_text.snap | 23 +++++ .../tui-components/examples/support/e2e.rs | 11 ++- 28 files changed, 873 insertions(+), 7 deletions(-) create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_braille_100x34_ansi.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_braille_100x34_text.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_dots_100x34_ansi.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_dots_100x34_text.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_return_zoom_100x34.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_return_zoom_100x34_ansi.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_return_zoom_100x34_text.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_return_zoom_36x20.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_100x34_ansi.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_100x34_text.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_36x20_ansi.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_36x20_text.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_braille_100x34_ansi.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_braille_100x34_text.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_dots_100x34_ansi.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_dots_100x34_text.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_return_zoom_100x34.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_return_zoom_100x34_ansi.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_return_zoom_100x34_text.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_return_zoom_36x20.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_36x20_ansi.snap create mode 100644 nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_36x20_text.snap diff --git a/nori-rs/tui-components/examples/README.md b/nori-rs/tui-components/examples/README.md index d407529ec..bd5ed93ed 100644 --- a/nori-rs/tui-components/examples/README.md +++ b/nori-rs/tui-components/examples/README.md @@ -12,9 +12,11 @@ test-only; it is not exported by `nori-tui-components`. ## Prerequisites The focused `motion_storybook` is a bare scene 1 ↔ 2 zoom loop, with no text -or UI. The E2E case presses `s` to freeze an 80%-zoom frame before capture; -`--still` instead starts at the dot endpoint. Buffer snapshots cover both fixed -formation variants at wide and narrow sizes. Its +or UI. Its E2E cases use `--at-ms` to pause at exact story times, with one case +also exercising `s` to freeze an 80%-zoom frame; `--still` starts at the dot +endpoint. Text and ANSI snapshots cover both formation variants at the endpoints +and during both zoom directions, plus narrow viewport captures. Buffer snapshots +cover the same four timestamps at wide and narrow sizes. Its [profiling guide](motion_storybook/README.md) describes headless and live timing. Install tmux and jq, and use a compatible checkout of diff --git a/nori-rs/tui-components/examples/motion_storybook.rs b/nori-rs/tui-components/examples/motion_storybook.rs index 992359ebf..18fc3a56c 100644 --- a/nori-rs/tui-components/examples/motion_storybook.rs +++ b/nori-rs/tui-components/examples/motion_storybook.rs @@ -27,7 +27,8 @@ fn main() -> Result<()> { } let mut terminal = StorybookTerminal::enter()?; let mut story = Story::new(options.muster); - let mut paused = options.still; + story.advance(options.at.unwrap_or_default()); + let mut paused = options.still || options.at.is_some(); let mut previous = Instant::now(); let period = Duration::from_secs_f64(1.0 / options.fps); let mut dirty = true; diff --git a/nori-rs/tui-components/examples/motion_storybook/README.md b/nori-rs/tui-components/examples/motion_storybook/README.md index 90c53dea0..e3b148d36 100644 --- a/nori-rs/tui-components/examples/motion_storybook/README.md +++ b/nori-rs/tui-components/examples/motion_storybook/README.md @@ -20,6 +20,28 @@ Hidden development keys: Space pauses, `s` freezes a repeatable 80%-zoom frame, and `q`, Escape, or Ctrl-C quits. `--still` starts paused at the dot endpoint. The default cadence remains 25 FPS; `--fps 60` changes the requested cadence. +## Deterministic snapshots + +`--at-ms N` starts paused at an exact elapsed story time, including ambient +motion. Space resumes from that point. This makes frames reproducible without +depending on terminal speed or when a key reaches the event loop: + +```console +cargo run --release -p nori-tui-components --example motion_storybook -- --muster --at-ms 3600 +``` + +The snapshot fixtures use 0 ms (dots), 2400 ms (80% inward zoom), 3000 ms +(formations), and 3600 ms (80% outward zoom). Ambient time is story time plus +12 seconds, so the return frame intentionally differs from the inward frame. +Buffer snapshots cover all four times for both platoon and muster at 100×34 and +36×20. Real terminal text and ANSI snapshots cover all four times at 100×34, +plus the inward zoom at 36×20 for both variants. The platoon inward terminal +case also exercises the `s` key. Fixtures stay paused while the capture settles. + +Run and review these through the [storybook snapshot workflow](../README.md). +`--at-ms` cannot be combined with `--bench` or `--frames`; timed profiling keeps +its existing timeline and cadence. + ## Profile Live timing uses the actual terminal size and writes CSV only after leaving the diff --git a/nori-rs/tui-components/examples/motion_storybook/e2e.rs b/nori-rs/tui-components/examples/motion_storybook/e2e.rs index 300a488a2..eeef62a3c 100644 --- a/nori-rs/tui-components/examples/motion_storybook/e2e.rs +++ b/nori-rs/tui-components/examples/motion_storybook/e2e.rs @@ -16,7 +16,12 @@ use ratatui::backend::TestBackend; fn bare_zoom_snapshots() { for (width, height) in [(100, 34), (36, 20)] { for muster in [false, true] { - for (name, time) in [("dots", 0), ("zoom", 2400), ("braille", 3000)] { + for (name, time) in [ + ("dots", 0), + ("zoom", 2400), + ("braille", 3000), + ("return_zoom", 3600), + ] { let mut story = story::Story::new(muster); story.advance(Duration::from_millis(time)); let mut terminal = Terminal::new(TestBackend::new(width, height)).unwrap(); @@ -54,3 +59,84 @@ fn bare_zoom_terminal() -> Result<()> { assert_screen!(tui, "platoon_zoom_100x34"); Ok(()) } + +// Fixed story time includes both transition progress and ambient motion, so the +// outward 80% frame differs from the inward one. No wall-clock sleeps select it. +macro_rules! terminal_fixture { + ($test:ident, $name:literal, $cols:literal, $rows:literal, $time:literal, $glyph:literal $(, $arg:literal)?) => { + #[test] + #[ignore = "requires built storybooks and TUI_PUPPETEERING_DIR; run scripts/storybook-e2e.sh"] + fn $test() -> Result<()> { + let tui = TuiSession::start_with_args( + "motion_storybook", $cols, $rows, &["--at-ms", $time $(, $arg)?], + )?; + tui.expect($glyph)?; + assert_screen!(tui, $name); + Ok(()) + } + }; +} + +terminal_fixture!(platoon_dots, "platoon_dots_100x34", 100, 34, "0", "·"); +terminal_fixture!( + platoon_braille, + "platoon_braille_100x34", + 100, + 34, + "3000", + "⠝" +); +terminal_fixture!( + platoon_return_zoom, + "platoon_return_zoom_100x34", + 100, + 34, + "3600", + "⠂" +); +terminal_fixture!(platoon_narrow, "platoon_zoom_36x20", 36, 20, "2400", "⠁"); +terminal_fixture!( + muster_dots, + "muster_dots_100x34", + 100, + 34, + "0", + "·", + "--muster" +); +terminal_fixture!( + muster_zoom, + "muster_zoom_100x34", + 100, + 34, + "2400", + "⠂", + "--muster" +); +terminal_fixture!( + muster_braille, + "muster_braille_100x34", + 100, + 34, + "3000", + "⠝", + "--muster" +); +terminal_fixture!( + muster_return_zoom, + "muster_return_zoom_100x34", + 100, + 34, + "3600", + "⠂", + "--muster" +); +terminal_fixture!( + muster_narrow, + "muster_zoom_36x20", + 36, + 20, + "2400", + "⠁", + "--muster" +); diff --git a/nori-rs/tui-components/examples/motion_storybook/profile.rs b/nori-rs/tui-components/examples/motion_storybook/profile.rs index ea1d8205f..548a071a8 100644 --- a/nori-rs/tui-components/examples/motion_storybook/profile.rs +++ b/nori-rs/tui-components/examples/motion_storybook/profile.rs @@ -22,6 +22,7 @@ use super::story::Story; pub struct Options { pub muster: bool, pub still: bool, + pub at: Option, pub bench: bool, pub output: Option, pub frames: Option, @@ -35,6 +36,7 @@ impl Options { let mut options = Self { muster: false, still: false, + at: None, bench: false, output: None, frames: None, @@ -47,6 +49,12 @@ impl Options { match arg.as_str() { "--muster" => options.muster = true, "--still" => options.still = true, + "--at-ms" => { + let millis: i64 = args.next().context("--at-ms needs milliseconds")?.parse()?; + options.at = Some(Duration::from_millis( + millis.try_into().context("--at-ms must be nonnegative")?, + )); + } "--bench" => options.bench = true, "--profile" => { options.output = Some(args.next().context("--profile needs a CSV path")?.into()) @@ -63,7 +71,7 @@ impl Options { options.height = height.parse()?; } _ => anyhow::bail!( - "Unknown option {arg}. Options: --muster --still --fps N --frames N --profile FILE --bench --size WIDTHxHEIGHT" + "Unknown option {arg}. Options: --muster --still --at-ms N --fps N --frames N --profile FILE --bench --size WIDTHxHEIGHT" ), } } @@ -91,6 +99,10 @@ impl Options { !options.still || options.frames.is_none(), "--still cannot be combined with --frames" ); + ensure!( + options.at.is_none() || (!options.bench && options.frames.is_none()), + "--at-ms starts paused and cannot be combined with --bench or --frames" + ); Ok(options) } } diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_braille_100x34_ansi.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_braille_100x34_ansi.snap new file mode 100644 index 000000000..9399f7f5e --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_braille_100x34_ansi.snap @@ -0,0 +1,37 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│\x1b[38;2;38;64;49m\x1b[48;2;10;15;12m⠝⠁⠕\x1b[38;2;45;77;58m⠔⠝⠕⠝⠕⠝\x1b[38;2;38;64;49m⠁⠅\x1b[38;2;45;77;58m⠔⠕⠕⠝⠕⠝\x1b[38;2;38;64;49m⠑⠁\x1b[38;2;45;77;58m⠔⠕⠕⠝⠅⠍\x1b[38;2;38;64;49m⠕⠁\x1b[38;2;45;77;58m⠔⠕⠕⠝⠅⠝⠕\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⠔⠕⠕⠝⠕⠝⠕\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠔\x1b[38;2;45;77;58m⠕⠅⠝⠕⠝⠕\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠐\x1b[38;2;45;77;58m⠕⠅⠝⠕⠝⠕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠐\x1b[38;2;45;77;58m⠕⠕⠕⠕⠝⠕\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;45;77;58m⠝⠕⠕⠕⠝⠕\x1b[38;2;38;64;49m⠅⠁\x1b[38;2;45;77;58m⠝⠕⠕⠕⠝⠕\x1b[38;2;38;64;49m⠅⠅⠙\x1b[38;2;45;77;58m⠕⠕⠕⠝⠅⠕\x1b[38;2;38;64;49m⠅⠙\x1b[38;2;45;77;58m⠕⠕⠕⠝⠕\x1b[38;2;38;64;49m⠕⠅│ +│\x1b[38;2;45;77;58m⠝⢕⠍⠕⠝\x1b[38;2;38;64;49m⠕⠉⠅\x1b[38;2;45;77;58m⠕⢕⠝⠕⠍⢕\x1b[38;2;38;64;49m⠕⢁⠕\x1b[38;2;45;77;58m⢅⠝⢕⠝⠕⠍\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠔\x1b[38;2;45;77;58m⠝⢅⠝⠕⠕⢕\x1b[38;2;38;64;49m⠍\x1b[39m \x1b[38;2;45;77;58m⠝⢕⠕⢅⠝⢕⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢕⠝⢕⠕⠅⠝⢕\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠐\x1b[38;2;45;77;58m⠅⢕⠝⠕⠝⢅⠝\x1b[39m \x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⢕⠅⢕⠝⢕⠝⢅\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⠑⠝⢕⠍⠕⠝⢕\x1b[38;2;38;64;49m⠅⠁\x1b[38;2;45;77;58m⠕⢕⠝⢕⠍⢕⠕\x1b[38;2;38;64;49m⢄⠙⠅\x1b[38;2;45;77;58m⠝⢕⠕⠕⠍\x1b[38;2;38;64;49m⢔⠍⠑\x1b[38;2;45;77;58m⠝⢅⠝⠕│ +│⠝⠕\x1b[38;2;38;64;49m⠝⠁⠕\x1b[38;2;45;77;58m⠔⠕⠕⠝⠕⠕⠕\x1b[38;2;38;64;49m⠉⠁\x1b[38;2;45;77;58m⠕⠕⠝⠕⠕⠕⠍\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠔\x1b[38;2;45;77;58m⠝⠕⠕⠕⠝⠕⠕\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⠕⠕⠕⠝⠕⠝⠕⠝\x1b[39m \x1b[38;2;45;77;58m⠝⠕⠝⠕⠝⠅⠝⠕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⠝⠕⠝⠅⠝⠕⠝⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⠕⠝⠅⠕⠕⠝⠅⠕\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠅⠕⠕⠝⠅⠕⠕\x1b[38;2;38;64;49m⠅⠁\x1b[38;2;45;77;58m⠕⠕⠝⠕⠕⠕⠝\x1b[38;2;38;64;49m⠔⠅⠑\x1b[38;2;45;77;58m⠝⠕⠕⠕⠝⠕⠕\x1b[38;2;38;64;49m⠄⠙⠑│ +│⢉⢄\x1b[38;2;45;77;58m⢝⢕⢝⢕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢝\x1b[38;2;38;64;49m⠕⢉⢄\x1b[38;2;45;77;58m⢝⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕⢍\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢄\x1b[38;2;45;77;58m⢝⠕⢝⢕⠝⢕⢝⠕\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢀\x1b[38;2;45;77;58m⠝⢕⢕⢕⢝⢕⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;31;52;39m⠁⢀\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢝\x1b[38;2;53;89;67m⢕⢝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕⠕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢝⠕⢕⢕\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;45;77;58m⢝⢕⢝⢕⠝⢕⢕⢕\x1b[38;2;38;64;49m⢅\x1b[39m \x1b[38;2;45;77;58m⢝⢕⢝⢕⢝⢕\x1b[38;2;53;89;67m⢕⢕\x1b[38;2;45;77;58m⢅\x1b[38;2;38;64;49m⠁\x1b[38;2;45;77;58m⠕⢕⢝⠕⢝⢕⠝⢕\x1b[38;2;38;64;49m⢅⠁⠑\x1b[38;2;45;77;58m⢕⠝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⢕⢝⢕│ +│⢕⠕⢕⢕⢕⢕⠕\x1b[38;2;38;64;49m⠁⢁\x1b[38;2;45;77;58m⢔⢕⢕⠕⢅⢕⠕⢅⠕\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢀\x1b[38;2;45;77;58m⠕⢕⢕⢕⢕⢕⠕⢕⠕\x1b[39m \x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢕⢕⢕⠕⢕⢕⠕⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢕⢕⢕⢕⢅⢕⢕⠕⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⢕⢕⢕⢕⠕⢕⢕⠕⢕\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[38;2;45;77;58m⢕⢕⢕⢕⢕⢕⢕⠕⢄\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠑\x1b[38;2;45;77;58m⢕⢕⢕⢅⠕⢕⢕⠕\x1b[38;2;38;64;49m⢅\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⠕⢕⢕⢕⢕⢕⢕⢕⠕\x1b[38;2;38;64;49m⢄⠑\x1b[38;2;45;77;58m⠕⢕⢕⢕⢕│ +│⠝⢕⢕⢅\x1b[38;2;38;64;49m⠝\x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢔⢝⢕⠕⢅⢝⠕⢍⠕\x1b[38;2;38;64;49m⠉⢀\x1b[38;2;45;77;58m⠕⢅⢝⢕⢝⠕⢝⢕⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢔⢝⢕⢕⠕⢝⢅⢝⢕⠝\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[38;2;45;77;58m⢕⢝⠕⢝⢅⢝⢕⠕⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⢝⢅⢝⢕⢕⢕⠝⢕⢝\x1b[38;2;38;64;49m⢅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢑\x1b[38;2;45;77;58m⢕⢕⢝⢕⠝⢅⢝⢕⢕\x1b[39m \x1b[38;2;31;52;39m⠙\x1b[38;2;45;77;58m⢕⢝⢅⠝⢕⢕⢕⢝⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⠝⢕⢕⢕⢝⠕⢝⢕⢝\x1b[38;2;38;64;49m⢄\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠑\x1b[38;2;45;77;58m⢝⢕│ +│⢝\x1b[38;2;38;64;49m⠕⠉\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢕⠕⢅⢝⢕⢝⠕⢍⠕\x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m⢀\x1b[38;2;45;77;58m⢕⢕⠝⢅⠝⢕⢝⢕⢝⠕\x1b[38;2;31;52;39m⠁⢀\x1b[38;2;45;77;58m⢕⢕⢝⢅⠝⢕⠝⢕⢝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⢝⢅⢝⢕⢝⢕⠝⢕⠕⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⢝⠅⢝⢕⢝⢕⢕⢕⠕⢕\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;45;77;58m⢝⢅⢝⠕⢕⢕⢕⢕⢝⢕\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;45;77;58m⠝⢅⢝⢕⢕⠕⢝⢕⢝⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⠝⢕⠕⢕⢝⢕⢝⠕⢝⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;31;52;39m⠁│ +│⠁⠄\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⠅⠝⠕⠝⠕⠝⠕\x1b[38;2;38;64;49m⠍\x1b[38;2;45;77;58m⠕\x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⠕⠕⠕⠕⠅⠝⠅⠝⠕⠝\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;45;77;58m⠕⠝⠕\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⠕⠕⠕⠝⠕⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠐\x1b[38;2;45;77;58m⠝⠕⠝\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⠝⠕\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⠕⠕⠕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠝\x1b[38;2;45;77;58m⠕⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m⠝⠕⠝\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⠝\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⠕\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;45;77;58m⠕\x1b[38;2;38;64;49m⠝\x1b[38;2;45;77;58m⠕\x1b[38;2;38;64;49m⠝\x1b[38;2;45;77;58m⠕⠝⠕⠝⠅⠝\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠑\x1b[38;2;45;77;58m⠕⠕⠕⠕⠝⠕⠝⠕⠝⠕\x1b[38;2;31;52;39m⠅⠁\x1b[38;2;45;77;58m⠝⠅⠝⠕⠕⠕⠕⠕⠝⠕│ +│\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│\x1b[38;2;38;64;49m⢕⠄⢕⠄⢕⠄⢅⢄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢅⢄⢅⢄⢅⢄⢅⢄⢅⢄⢅⢄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢅⢄⢅⢄⢕⢄⢕⢄⢕⢄⢕⢄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢕⢄⢕⢄⢕⢄⢕⢄⢕⢄⢕⢄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢕⢄⢕⢄⢕⢄⢕⢄⠕⢄⠕⢄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⢄⠕⢄⠕⢄⠕⢄⠕⢄⠕⢄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⢄⠕⢄⠕⢄⠕⢄⠕⢄⠕⢄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⢄⢕⢄⢕⢄│ +│\x1b[38;2;45;77;58m⢝⠕⢝⠕⢍⢕⠝\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢁\x1b[38;2;45;77;58m⢔⢝⢕⢝⢕⢝⢕\x1b[38;2;53;89;67m⠝\x1b[38;2;45;77;58m⢕⠝⢕⠝\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⢔\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⠕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⢝⠕⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⢕⢅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢕⢕⢕⢕⢕⢕⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢝\x1b[38;2;38;64;49m⢄\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠑\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕⢝⢕⢝⢅⢝⢅⠝⢅⠝⢄\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;45;77;58m⠝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢕│ +│⢕⠕⢅⢕\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m⠁⢁\x1b[38;2;45;77;58m⢔⠕⢕⠕⢕⢕⢅⢕⢅⢕⢕⢕⠕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⢕⢕⢕⢕⢕⢕⢕⢕⠕⢕⠕⢕⢕\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⢔\x1b[38;2;45;77;58m⢕⢅⢕⢅⢕⠕⢕⢕⢕⢕⢕⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[38;2;45;77;58m⢕⠕⢕⢅⢕⢕⢕⢕⢕⢕⢕⢕\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⢕⢅⢕⢕⢕⢕⠕⢕⠕⢕⢕⢕⢅\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;45;77;58m⢕⢕⢕⢕⠕⢕⢕⢕⢕⢕⢅⠕⢄\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢕│ +│⠍⢕⠝\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⢔\x1b[38;2;45;77;58m⠝⢅⠝⢅⠝⠕⠕⠕⠕⢕⠝⢕\x1b[38;2;38;64;49m⠍\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢔⠝⢕⠝⢅⠝⠅⠝⠕⠕⢕⠕⢕\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢕⠝⢕⠝⢕⠝⠅⠝⠅⠝⢕⠝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;45;77;58m⢕⠅⢕⠝⢕⠝⠕⠝⠅⠝⢅⠝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⢕⠕⢕⠅⠕⠕⠕⠝⢕⠝⢅⠝⢅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⢕⠝⢕⠝⠕⠅⠕⠕⢕⠝⢕⠝\x1b[38;2;38;64;49m⢄\x1b[38;2;31;52;39m⠁⠁│ +│\x1b[38;2;38;64;49m⠝\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⢄\x1b[38;2;45;77;58m⢝⢕⢕⢕⢕⠕⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢝⢕⠝⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠁⢀\x1b[38;2;45;77;58m⢕⠕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⠕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅⢝⢕⠝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⢕⢕⢕⢕\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠑\x1b[38;2;45;77;58m⢝⢅⠝⢕⢝⢕⢝⢕⢅⠕⢕⢕⢝⢄│ +│\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢄\x1b[38;2;45;77;58m⠝⢕⠕⠕⠝⢕⠝⢕⠝⢕⠝⢕⠝⠕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;45;77;58m⢕⠝⢕⠝⢅⠝⠕⠕⢕⠕⢕⠝⢕⠝\x1b[38;2;31;52;39m⠁⠁⢀\x1b[38;2;45;77;58m⠝⢕⠕⢕⠕⢕⠝⢕⠝⢕⠝⢕⠝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;45;77;58m⢕⠝\x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⠝⠅⠝⢕⠝⢕⠕⢕⠕⢕⠝\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⠝⢕⠝⢕⠕⢕⠕⠕⠝⢅⠝⢕⠝⢕\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⠕⠝⢕⠝⢅⠝⢕⠝⢕⠝⢕⠕⢕│ +│⢕⢕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢝⢕⠝⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕⢕⠕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠝\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢄\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⠅⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⠅\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅⢝⢕⠝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⢕⢕⠕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠙\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⢕⢕⢕⢝⢅⠝⢕⢝⢕│ +│⠝⢕⠝⢕⠝⢕⠕⠕⠝⢕⠝⢕⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢕⠝⢕⠝⢅⠝⠕⠕⢕⠍⢕⠝⢕⠝⠕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;45;77;58m⢕⠝⢕⠝⠕⠝⢕⠕⢕⠝⢕⠝⠅⠝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢕⠝⠅⠝⢕\x1b[38;2;38;64;49m⠝\x1b[38;2;45;77;58m⢕⠕⢕⠝⠕⠝⢕⠝⢕\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠑\x1b[38;2;45;77;58m⠝⢕⠝⢕⠕⢕⠕⠕⠝⢅⠝⢕⠝⢕⠕\x1b[39m \x1b[38;2;31;52;39m⠁⠁\x1b[38;2;45;77;58m⠝⢕⠝⢕⠕⠕⠝⢕⠝⢕│ +│⠝⢅⢝⠕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅⢝⠕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢔\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠍⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⠅\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⠅⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;31;52;39m⠄⠁\x1b[39m \x1b[38;2;45;77;58m⠝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕⠝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅⠝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢝⢕⢕⠕│ +│⠕⠕⠍⠕⠝⠅⠝⠕⠕⠕⠝\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;45;77;58m⠕⠕⠝⠕⠝⠅⠝⠕⠕⠕⠝⠕⠝⠕⠕⠕\x1b[38;2;38;64;49m⠍\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⠝⠕⠕⠕⠝⠕⠝⠕⠝⠕⠕⠕⠝⠅⠝⠕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⠕⠝⠕⠝⠕⠕⠕⠝⠅⠝⠕⠕⠕⠝⠕⠝⠕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;45;77;58m⠕⠝⠅⠝⠕⠝⠕⠕⠕⠝⠕⠝⠕⠕⠕⠝\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠕⠕⠕⠝⠕⠝⠕│ +│⠕⢕⢕⢕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢁\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢅⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢅⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢅⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢅\x1b[38;2;53;89;67m⢕⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕⢕\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕⢕\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢅⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;38;64;49m⢅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠁\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠕⢕⢕⠕⢕⢕⢕⢕⢕⠕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢅\x1b[39m \x1b[38;2;31;52;39m⠁⠁\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕│ +│⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢝⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢄\x1b[38;2;45;77;58m⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢝⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;38;64;49m⢕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠝\x1b[38;2;53;89;67m⢕⢝\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⠕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕⠝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⠕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕⠝\x1b[38;2;53;89;67m⢕│ +│\x1b[38;2;45;77;58m⠕⢅⢕⠕⢕⢕⠕\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢕⢕⢅⢕⢕\x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢕⢕⢅⢕⢕\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢕⢕⢅⢕⢕\x1b[38;2;38;64;49m⠕\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⢕⢕⠕⢕⢕⢕⢕⢕⢕⢅⢕⢕\x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢀\x1b[38;2;45;77;58m⢕⢕⠕⢕⢕⠅⢕⢕⠕⢕⢕⢅⢕⢕⢕⢕⢕⢅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢕⢕⠕⢕⢕⢕⢕⢕\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢕⢕⠅⢕⢕⠕⢕⢕\x1b[38;2;38;64;49m⢄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;45;77;58m⢕⢕⢅│ +│⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⠕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢔\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢄\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕⠝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⠕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⠝\x1b[38;2;53;89;67m⢕│ +│\x1b[38;2;38;64;49m⠙⠁⠙⠑⠉\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⠑⠙⠑⠙⠑⠑⠑⠙⠁⠑⠑⠙⠑⠙⠑⠑⠑⠙\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠑⠙⠑⠑⠑⠙⠑⠙⠑⠑⠑⠙⠁⠙⠑⠙⠑⠙⠑\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠙⠑⠁⠑⠙⠑⠙⠑⠙⠑⠙⠑⠑⠑⠙⠁⠙⠑⠙\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑⠑⠙⠁⠙⠑⠁⠑⠙⠑⠙⠑⠙⠑⠙⠑⠑⠑⠙\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠑│ +│\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│\x1b[38;2;38;64;49m⠕\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢅⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m⢕⢅⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢅⠕\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢅\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢅⢕⠅\x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢅⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢅\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢅⢕⢅\x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢅⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m⢕⢅⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢅\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m⢅⢕⢅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢅⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m⢕⢅⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢅\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢅⢕⢅\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢅⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m⢕⢅⢕\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;45;77;58m⢅⢕⢅\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢅⢕⢅\x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢅⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m⢕⢅⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢅\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢅⢕\x1b[38;2;38;64;49m⢄│ +│\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢄\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⢕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠝\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⠅⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;38;64;49m⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢅⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠑\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢝\x1b[38;2;45;77;58m⢕⠝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⠝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕│ +│\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⠝⢅\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⠅⢕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;38;64;49m⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⠅⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⠅⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;38;64;49m⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⠝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⠅⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⠕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢅⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢕⢕│ +│\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢅⢕⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m⢅⢕⢕\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢕⢕⢕\x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢕⢕⠕\x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢕⢕⠕⢕⢕⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢀\x1b[38;2;45;77;58m⢕⢕⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢕⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢕⠕⢅⢕⢕\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢅⢕⢕⠕⢕⢕⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢕⢕⢕\x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢕⢕⢅⢕⢕⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m⢕⢕⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m⢕⢕⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢕⢕\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢕⢕⢕⢕⢕⢕\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢕⢕⢕\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢕⢕⢕\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢕⢕⢅│ +│⢕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⢕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;53;89;67m⢝⢕⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠝\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠍⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕\x1b[38;2;53;89;67m⢕⢝⢕\x1b[38;2;38;64;49m⠕\x1b[38;2;53;89;67m⢕⢝⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢕⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠁\x1b[38;2;45;77;58m⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⠅⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⠕⢝\x1b[38;2;53;89;67m⢕\x1b[38;2;45;77;58m⢕⠕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢕⠕\x1b[38;2;53;89;67m⢝⢕│ +│⢝⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕⢝⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕⢝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕\x1b[38;2;53;89;67m⢕⢝⢕\x1b[38;2;38;64;49m⠕\x1b[38;2;53;89;67m⢕⢝⢕\x1b[38;2;38;64;49m⠕\x1b[38;2;53;89;67m⢕⢝⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕⢝⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕⢝⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕⢝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕\x1b[38;2;53;89;67m⢕⢝⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕⢝⢕\x1b[38;2;45;77;58m⠕\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢕⠝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢕⠝\x1b[38;2;53;89;67m⢕│ +│\x1b[38;2;45;77;58m⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢅⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢅⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢅⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢅⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m⢕⢅⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢅⢕⠅\x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢅⢕⢅\x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m⢅⢕⢅\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢅⢕⢅\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢅⢕⢅\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢅⢕⢅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;45;77;58m⢅⢕⢅\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢅⢕⢅\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢅⢕⢅\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m⢅⢕⢅⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢅⢅\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢅\x1b[38;2;38;64;49m⢅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢅⢕\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m⢕⢅⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m⢕⢅⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m⢕⢅⢕\x1b[38;2;38;64;49m⠅│ +│\x1b[38;2;45;77;58m⢕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠝⢕\x1b[38;2;53;89;67m⢝⢕⢝\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢄\x1b[38;2;45;77;58m⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⠅⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢕⢝⢕\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢕⢝⢕\x1b[38;2;38;64;49m⠕\x1b[38;2;53;89;67m⢕⢝⢕\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⠕⢕\x1b[38;2;53;89;67m⢝⢕\x1b[38;2;45;77;58m⢅⢕\x1b[38;2;53;89;67m⢝⢕⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝⢕⢝\x1b[38;2;45;77;58m⢕\x1b[38;2;53;89;67m⢝⢕⢝\x1b[38;2;45;77;58m⠅⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;45;77;58m⢝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢅⠝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢕⠝\x1b[38;2;53;89;67m⢕⢝\x1b[38;2;45;77;58m⢕⠕\x1b[38;2;53;89;67m⢕⢝⢕│ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_braille_100x34_text.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_braille_100x34_text.snap new file mode 100644 index 000000000..31a0a56d5 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_braille_100x34_text.snap @@ -0,0 +1,37 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│⠝⠁⠕⠔⠝⠕⠝⠕⠝⠁⠅⠔⠕⠕⠝⠕⠝⠑⠁⠔⠕⠕⠝⠅⠍⠕⠁⠔⠕⠕⠝⠅⠝⠕⠁⠔⠕⠕⠝⠕⠝⠕⠁⠔⠕⠅⠝⠕⠝⠕⠁⠐⠕⠅⠝⠕⠝⠕⠅⠐⠕⠕⠕⠕⠝⠕⠅ ⠝⠕⠕⠕⠝⠕⠅⠁⠝⠕⠕⠕⠝⠕⠅⠅⠙⠕⠕⠕⠝⠅⠕⠅⠙⠕⠕⠕⠝⠕⠕⠅│ +│⠝⢕⠍⠕⠝⠕⠉⠅⠕⢕⠝⠕⠍⢕⠕⢁⠕⢅⠝⢕⠝⠕⠍⠕⠁⠔⠝⢅⠝⠕⠕⢕⠍ ⠝⢕⠕⢅⠝⢕⠝⠅⠁⢕⠝⢕⠕⠅⠝⢕⠁⠐⠅⢕⠝⠕⠝⢅⠝ ⠙⢕⠅⢕⠝⢕⠝⢅⠁⠑⠝⢕⠍⠕⠝⢕⠅⠁⠕⢕⠝⢕⠍⢕⠕⢄⠙⠅⠝⢕⠕⠕⠍⢔⠍⠑⠝⢅⠝⠕│ +│⠝⠕⠝⠁⠕⠔⠕⠕⠝⠕⠕⠕⠉⠁⠕⠕⠝⠕⠕⠕⠍⠕⠁⠔⠝⠕⠕⠕⠝⠕⠕⠁⠁⠕⠕⠕⠝⠕⠝⠕⠝ ⠝⠕⠝⠕⠝⠅⠝⠕⠁ ⠝⠕⠝⠅⠝⠕⠝⠅⠁⠕⠝⠅⠕⠕⠝⠅⠕⠄⠙⠅⠕⠕⠝⠅⠕⠕⠅⠁⠕⠕⠝⠕⠕⠕⠝⠔⠅⠑⠝⠕⠕⠕⠝⠕⠕⠄⠙⠑│ +│⢉⢄⢝⢕⢝⢕⢕⢕⢝⠕⢉⢄⢝⢕⢝⢕⢕⠕⢍⠕⠁⢄⢝⠕⢝⢕⠝⢕⢝⠕⠁⢀⠝⢕⢕⢕⢝⢕⢝⢕⠁⢀⢝⢕⢕⢕⢝⢕⢝⢕⠁ ⢝⢕⠕⢕⢝⠕⢕⢕⠅ ⢝⢕⢝⢕⠝⢕⢕⢕⢅ ⢝⢕⢝⢕⢝⢕⢕⢕⢅⠁⠕⢕⢝⠕⢝⢕⠝⢕⢅⠁⠑⢕⠝⢕⢕⢕⢝⢕│ +│⢕⠕⢕⢕⢕⢕⠕⠁⢁⢔⢕⢕⠕⢅⢕⠕⢅⠕⠁⢀⠕⢕⢕⢕⢕⢕⠕⢕⠕ ⢕⢕⢕⢕⠕⢕⢕⠕⢕⠅⠁⢕⢕⢕⢕⢅⢕⢕⠕⢕⠁ ⢕⢕⢕⢕⠕⢕⢕⠕⢕ ⠑⢕⢕⢕⢕⢕⢕⢕⠕⢄⠁⠑⢕⢕⢕⢅⠕⢕⢕⠕⢅⠁⠕⢕⢕⢕⢕⢕⢕⢕⠕⢄⠑⠕⢕⢕⢕⢕│ +│⠝⢕⢕⢅⠝⢁⢕⢔⢝⢕⠕⢅⢝⠕⢍⠕⠉⢀⠕⢅⢝⢕⢝⠕⢝⢕⢕⠅⠁⢔⢝⢕⢕⠕⢝⢅⢝⢕⠝ ⢑⢕⢝⠕⢝⢅⢝⢕⠕⢕⠁ ⢝⢅⢝⢕⢕⢕⠝⢕⢝⢅⠁⢑⢕⢕⢝⢕⠝⢅⢝⢕⢕ ⠙⢕⢝⢅⠝⢕⢕⢕⢝⢕⢅⠁⠝⢕⢕⢕⢝⠕⢝⢕⢝⢄⠁⠑⢝⢕│ +│⢝⠕⠉⢀⠕⢕⠕⢅⢝⢕⢝⠕⢍⠕⠉⢀⢕⢕⠝⢅⠝⢕⢝⢕⢝⠕⠁⢀⢕⢕⢝⢅⠝⢕⠝⢕⢝⢕⠁ ⢝⢅⢝⢕⢝⢕⠝⢕⠕⢕⠁ ⢝⠅⢝⢕⢝⢕⢕⢕⠕⢕⠅ ⢝⢅⢝⠕⢕⢕⢕⢕⢝⢕⠅ ⠝⢅⢝⢕⢕⠕⢝⢕⢝⢕⢅⠁⠝⢕⠕⢕⢝⢕⢝⠕⢝⢕⢅⠁│ +│⠁⠄⠕⠅⠝⠕⠝⠕⠝⠕⠍⠕⠉ ⠕⠕⠕⠕⠕⠅⠝⠅⠝⠕⠝⠁⠁⠕⠝⠕⠕⠕⠕⠕⠝⠕⠝⠅⠁⠐⠝⠕⠝⠕⠝⠕⠕⠕⠕⠕⠁ ⠝⠕⠝⠅⠝⠕⠝⠕⠝⠕⠕ ⠑⠕⠝⠕⠝⠕⠝⠕⠝⠅⠝⠄⠁⠑⠕⠕⠕⠕⠝⠕⠝⠕⠝⠕⠅⠁⠝⠅⠝⠕⠕⠕⠕⠕⠝⠕│ +│⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ │ +│⢕⠄⢕⠄⢕⠄⢅⢄⠁ ⢅⢄⢅⢄⢅⢄⢅⢄⢅⢄⢅⢄⠁ ⢅⢄⢅⢄⢕⢄⢕⢄⢕⢄⢕⢄⠁ ⢕⢄⢕⢄⢕⢄⢕⢄⢕⢄⢕⢄⠁ ⢕⢄⢕⢄⢕⢄⢕⢄⠕⢄⠕⢄⠁ ⠕⢄⠕⢄⠕⢄⠕⢄⠕⢄⠕⢄⠁ ⠕⢄⠕⢄⠕⢄⠕⢄⠕⢄⠕⢄⠁ ⠕⢄⢕⢄⢕⢄│ +│⢝⠕⢝⠕⢍⢕⠝⠁⢁⢔⢝⢕⢝⢕⢝⢕⠝⢕⠝⢕⠝⠁⠁⢔⢝⢕⢝⢅⢝⢅⢝⢅⢝⢅⢝⠕⠁ ⢝⠕⢝⢕⢝⢕⢝⢕⢝⢕⢝⢕⠁ ⠑⢕⠕⢕⠕⢕⠕⢕⢕⢕⢕⢕⢅ ⠁⢕⢕⢕⢕⢕⢕⢕⢝⠕⢝⠕⢝⢄⠁⠑⢝⢕⢝⢕⢝⢅⢝⢅⠝⢅⠝⢄⠁⠁⠝⢕⢝⢕│ +│⢕⠕⢅⢕⠕⠁⢁⢔⠕⢕⠕⢕⢕⢅⢕⢅⢕⢕⢕⠕⠁ ⢕⢕⢕⢕⢕⢕⢕⢕⠕⢕⠕⢕⢕⠁⠁⢔⢕⢅⢕⢅⢕⠕⢕⢕⢕⢕⢕⢕⠁ ⠑⢕⠕⢕⢅⢕⢕⢕⢕⢕⢕⢕⢕⠄⠁ ⢕⢅⢕⢕⢕⢕⠕⢕⠕⢕⢕⢕⢅ ⠑⢕⢕⢕⢕⠕⢕⢕⢕⢕⢕⢅⠕⢄⠁⠁⠕⢕│ +│⠍⢕⠝⠁⠁⢔⠝⢅⠝⢅⠝⠕⠕⠕⠕⢕⠝⢕⠍ ⠁⢔⠝⢕⠝⢅⠝⠅⠝⠕⠕⢕⠕⢕⠅ ⠁⢕⠝⢕⠝⢕⠝⠅⠝⠅⠝⢕⠝⢕⠁ ⠑⢕⠅⢕⠝⢕⠝⠕⠝⠅⠝⢅⠝⢕⠁ ⠙⢕⠕⢕⠅⠕⠕⠕⠝⢕⠝⢅⠝⢅⠁ ⠙⢕⠝⢕⠝⠕⠅⠕⠕⢕⠝⢕⠝⢄⠁⠁│ +│⠝⠁⠁⢄⢝⢕⢕⢕⢕⠕⢝⢕⢝⢕⠝⢕⢝⠁⠁⢀⢕⠕⢕⢕⢕⢕⠝⢕⢝⢕⢝⢅⢝⠕⠁ ⢕⢕⠕⢕⠝⢕⢝⢕⢝⢅⢝⢕⢝⢕⠁ ⠑⢕⢝⢕⢝⢕⢝⢅⢝⢕⢝⢕⠕⢕⢅ ⠁⢕⢝⠕⢝⢅⢝⢕⠝⢕⢕⢕⢕⢕⢕⠄⠁⠑⢝⢅⠝⢕⢝⢕⢝⢕⢅⠕⢕⢕⢝⢄│ +│⠁⢄⠝⢕⠕⠕⠝⢕⠝⢕⠝⢕⠝⢕⠝⠕⠁ ⠑⢕⠝⢕⠝⢅⠝⠕⠕⢕⠕⢕⠝⢕⠝⠁⠁⢀⠝⢕⠕⢕⠕⢕⠝⢕⠝⢕⠝⢕⠝⢕⠁ ⠑⢕⠝⢕⠝⠅⠝⢕⠝⢕⠕⢕⠕⢕⠝⠄⠁ ⠝⢕⠝⢕⠕⢕⠕⠕⠝⢅⠝⢕⠝⢕⠅ ⠁⠕⠝⢕⠝⢅⠝⢕⠝⢕⠝⢕⠕⢕│ +│⢕⢕⢕⢕⢝⢕⠝⢕⢝⢕⢕⠕⢕⢕⠝ ⠁⢄⢝⢕⢕⢕⢕⢕⠝⢕⢝⢅⢝⠕⢕⢕⠅ ⠁⢕⢝⢅⢝⢕⢕⢕⠕⢕⢝⢕⢝⠅⢝⢕⠁ ⠁⢕⢝⢕⢝⢕⢝⢕⠕⢕⢕⢕⢝⠅⢝⢕⠁ ⠑⢕⢕⢕⢝⢅⢝⢕⠝⢕⢕⢕⢕⠕⢝⢄⠁ ⠙⢕⢕⢕⢕⢕⢝⢅⠝⢕⢝⢕│ +│⠝⢕⠝⢕⠝⢕⠕⠕⠝⢕⠝⢕⠝⠅⠁ ⠕⢕⠝⢕⠝⢅⠝⠕⠕⢕⠍⢕⠝⢕⠝⠕⠁ ⠑⢕⠝⢕⠝⠕⠝⢕⠕⢕⠝⢕⠝⠅⠝⢕⠁ ⠁⢕⠝⠅⠝⢕⠝⢕⠕⢕⠝⠕⠝⢕⠝⢕⠅ ⠁⠑⠝⢕⠝⢕⠕⢕⠕⠕⠝⢅⠝⢕⠝⢕⠕ ⠁⠁⠝⢕⠝⢕⠕⠕⠝⢕⠝⢕│ +│⠝⢅⢝⠕⢕⢕⠝⢕⢝⢅⢝⠕⠁ ⠁⢔⢝⢕⢕⢕⢕⢕⠝⢕⢝⠕⢕⢕⠝⢕⢝⠁⠁ ⢕⢕⠍⢕⢝⢅⢝⢕⢕⢕⠝⢕⢝⠅⢝⢕⠁ ⠁⢕⢝⠅⢝⢕⠕⢕⢝⢕⢝⢕⢝⢕⠕⢕⢝⠄⠁ ⠝⢕⢕⢕⢝⠕⢝⢕⠝⢕⢕⢕⢝⢅⢝⢕⠅ ⠁⠕⢝⢅⠝⢕⢝⢕⢕⠕│ +│⠕⠕⠍⠕⠝⠅⠝⠕⠕⠕⠝⠁⠁ ⠕⠕⠝⠕⠝⠅⠝⠕⠕⠕⠝⠕⠝⠕⠕⠕⠍ ⠁ ⠝⠕⠕⠕⠝⠕⠝⠕⠝⠕⠕⠕⠝⠅⠝⠕⠁ ⠁⠕⠝⠕⠝⠕⠕⠕⠝⠅⠝⠕⠕⠕⠝⠕⠝⠕⠁ ⠑⠕⠝⠅⠝⠕⠝⠕⠕⠕⠝⠕⠝⠕⠕⠕⠝⠄⠁ ⠙⠕⠕⠕⠝⠕⠝⠕│ +│⠕⢕⢕⢕⢕⢕⠕⢕⢕⠕⠁ ⢁⢕⢕⢅⢕⢕⢕⢕⢕⢅⢕⢕⢕⢕⢕⢕⢕⠕⠁ ⠁⢕⢕⠕⢕⢕⠕⢕⢕⢅⢕⢕⠕⢕⢕⢅⢕⢕⠁ ⠁⢕⢕⢕⢕⢕⢕⢕⢕⢕⢕⢕⢕⢕⢕⢅⢕⢕⢅ ⠁⠁⢕⢕⠕⢕⢕⠕⢕⢕⠕⢕⢕⢕⢕⢕⠕⢕⢅ ⠁⠁⠕⢕⢕⢕⢕⢕│ +│⢕⢕⢝⢕⢝⢅⢝⢕⠉ ⠁⢄⢝⢕⢝⢕⢝⢅⢝⢕⢕⢕⢝⢅⢝⢕⢕⢕⢝⠁⠁ ⢕⢕⢝⢅⢝⢕⠕⢕⢝⢅⢝⢕⠕⢕⢝⢕⢝⢕⠁ ⠁⢕⢝⢕⠕⢕⢝⢕⢝⢕⠕⢕⢝⢕⢝⢕⠝⢕⢝ ⠁ ⠝⢕⢝⠕⢝⢕⠝⢕⢕⠕⢝⢕⠝⢕⢕⠕⢝⢕⠁ ⠁⠕⢝⢕⠝⢕│ +│⠕⢅⢕⠕⢕⢕⠕⠁⠁ ⢕⢕⢕⢅⢕⢕⢕⢕⢕⢅⢕⢕⠕⢕⢕⢅⢕⢕⠕ ⠁ ⢕⢕⠕⢕⢕⢕⢕⢕⢕⢅⢕⢕⢕⢕⢕⢅⢕⢕⠁ ⠁⢀⢕⢕⠕⢕⢕⠅⢕⢕⠕⢕⢕⢅⢕⢕⢕⢕⢕⢅⠁ ⠁⢕⢕⢕⠕⢕⢕⢕⢕⢕⠕⢕⢕⠅⢕⢕⠕⢕⢕⢄⠁ ⠑⢕⢕⢅│ +│⢕⢕⠝⢕⢝⠕⠁ ⠁⢔⢝⢕⢕⢕⢝⢅⢝⢕⠝⢕⢝⢕⢕⢕⠝⢕⢝⢕⠁ ⠁⢄⢝⢕⠕⢕⢝⢅⢝⢕⠝⢕⢝⢕⢕⢕⢝⢕⢝⢕⠁ ⠁ ⢝⢕⠕⢕⢝⢅⢝⢕⢝⢕⢝⢕⠝⢕⢝⠕⢝⢕⠅ ⠁ ⢝⢕⢕⢕⢝⢕⠝⢕⢕⠕⢝⢕⠝⢕⢝⢅⢝⢕⢅ ⠁ ⠝⢕│ +│⠙⠁⠙⠑⠉ ⠁ ⠑⠑⠙⠑⠙⠑⠑⠑⠙⠁⠑⠑⠙⠑⠙⠑⠑⠑⠙⠁⠁ ⠁⠑⠙⠑⠑⠑⠙⠑⠙⠑⠑⠑⠙⠁⠙⠑⠙⠑⠙⠑⠁ ⠁ ⠙⠑⠁⠑⠙⠑⠙⠑⠙⠑⠙⠑⠑⠑⠙⠁⠙⠑⠙ ⠁ ⠑⠑⠙⠁⠙⠑⠁⠑⠙⠑⠙⠑⠙⠑⠙⠑⠑⠑⠙⠁⠁ ⠁⠑│ +│⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ │ +│⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ │ +│⠕ ⠁ ⢕⢅⢕⠅⢕⢅⢕⢅⢕⢅⠕⢅⢕⢅⠕⢅⢕⠅⢕⢅⢕⠅⠁ ⠁⢅⢕⢅⠕⢅⢕⢅⢕⢅⢕⠅⢕⢅⢕⢅⢕⢅⠅⢅⢕⢅⠁ ⠁ ⢕⢅⢕⠅⢕⢅⢕⢅⢕⢅⠕⢅⢕⢅⠕⢅⢕⠅⢕⢅⢕ ⠁ ⠑⢅⢕⢅⠕⢅⢕⢅⢕⢅⢕⠅⢕⢅⢕⢅⢕⢅⠕⢅⢕⢄│ +│⠁ ⠁⢄⢝⢕⠝⢕⢝⢕⢕⢕⢝⠕⢕⢕⢝⢅⢕⢕⢝⢅⢝⢕⠝ ⠁ ⠑⢕⢝⢕⢕⢕⢝⠕⢕⢕⢝⢅⢝⢕⢝⢕⢝⢕⠕⢕⢝⢕⠁ ⠁ ⢝⢕⢝⠅⢝⢕⢝⢕⢝⢕⢅⢕⢝⢕⠕⢕⢝⢕⠝⢕⢝⢅⠁ ⠁⠑⢝⢕⢕⢕⢝⢕⢕⢕⢝⢕⠝⢕⢝⢅⠝⢕⢝⢅⢝⢕│ +│⠁ ⢕⢕⢝⢕⢕⢕⢝⢅⢝⢕⠝⢅⢝⢕⠝⢕⢝⢕⠝⢕⢝⢕⠁ ⠁ ⢕⢕⢝⠅⢕⢕⢝⢅⢝⢕⢝⢕⢝⢕⠝⢕⢝⢕⠕⢕⢝⢕⠁ ⠁ ⢕⢕⢝⠅⢝⢕⢝⠅⢝⢕⢝⢕⢝⢕⢕⢕⢝⢕⠕⢕⢝⢕⠅ ⠁ ⠝⢕⢝⢅⢝⢕⢝⠅⢝⢕⢕⠕⢝⢕⢅⢕⢝⢕⢕⢕│ +│⠁⢅⢕⢕⠅⢅⢕⢕⠕⢕⢕⢕⢕⢕⢕⠕⢕⢕⢕⠕⢕⢕⢕⠅⠁ ⠁⢀⢕⢕⢕⢅⢕⢕⢕⢅⢕⢕⠕⢅⢕⢕⠕⢅⢕⢕⠕⢕⢕⢕⠁ ⠁ ⠕⢕⢕⢕⢕⢕⢕⢅⢕⢕⢕⠅⢕⢕⢕⠅⢕⢕⢕⢅⢕⢕⢕ ⠁ ⠑⢕⢕⢕⢕⢕⢕⢕⠕⢕⢕⢕⠕⢕⢕⢕⠕⢕⢕⢅│ +│⢕⢕⢝⢅⢕⢕⢝⢅⢝⢕⢝⢅⢝⢕⢝⢅⢝⢕⢝⢕⢝⢕⠝ ⠁ ⠁⢕⢝⢕⠝⢕⢝⢕⠍⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠁ ⠁ ⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⢝⢕⢝⢅⢝⢕⢝⢅⢝⢕⢝⢅⠁ ⠁⠁⢝⢕⢝⠅⢝⢕⢝⠕⢝⢕⢕⠕⢝⢕⢕⠕⢝⢕│ +│⢝⢕⠝⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠁ ⠁ ⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠁ ⠁ ⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠁ ⠁ ⠕⢕⢝⢕⠕⢕⢝⢕⠕⢕⢝⢕⠝⢕⢝⢕⠝⢕│ +│⢕⢅⢕⢅⢕⢅⢕⢅⢕⢅⢕⢅⢕⢅⢕⢅⢕⠅⢕⢅⢕⠅⠁ ⠁ ⢕⢅⢕⠅⢕⢅⢕⢅⢕⢅⢕⢅⠕⢅⢕⢅⠕⢅⢕⢅⠕⢅⢕⢅⠁ ⠁ ⠑⢅⢕⢅⠕⢅⢕⢅⠕⢅⢕⢅⠕⢅⢕⢅⢕⢅⢕⢅⢅⢅⢕⢅⢅ ⠁ ⠁⢅⢕⢅⢕⢅⢕⢅⢕⠅⢕⢅⢕⠅⢕⢅⢕⠅│ +│⢕⢕⢝⢕⠕⢕⢝⢕⠝⢕⢝⢕⠝⢕⢝⢕⠝⢕⢝⢕⢝⠁⠁ ⠁⢄⢝⢕⢝⢅⢝⢕⢝⠅⢝⢕⢝⠕⢕⢕⢝⢕⢕⢕⢝⢕⠕⢕⢝⢕⠁ ⠁ ⠑⢕⢝⢕⠕⢕⢝⢕⢅⢕⢝⢕⢝⢕⢝⢕⢝⢕⢝⢕⢝⠅⢝⢕⢝⠄⠁ ⠁ ⢝⢕⢝⢅⠝⢕⢝⢕⠝⢕⢝⢕⠕⢕⢝⢕│ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_dots_100x34_ansi.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_dots_100x34_ansi.snap new file mode 100644 index 000000000..5860e5352 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_dots_100x34_ansi.snap @@ -0,0 +1,37 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│\x1b[48;2;10;15;12m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘∘\x1b[38;2;53;89;67m∘∘∘\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·······\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;53;89;67m∘∘\x1b[38;2;60;102;76m○○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m·│ +│\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m····∘··\x1b[38;2;31;52;39m··\x1b[39m │ +│ │ +│\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m······\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·····\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m··\x1b[38;2;38;64;49m······│ +│··\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘\x1b[38;2;53;89;67m∘∘\x1b[38;2;45;77;58m∘·∘\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··\x1b[38;2;45;77;58m∘∘∘∘∘·\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m··\x1b[38;2;45;77;58m·∘∘∘∘∘│ +│∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○○\x1b[38;2;53;89;67m○○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘○\x1b[38;2;60;102;76m○○○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·∘\x1b[38;2;45;77;58m·∘\x1b[38;2;53;89;67m∘○○○\x1b[38;2;45;77;58m∘│ +│∘∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘○\x1b[38;2;60;102;76m○\x1b[38;2;67;114;86m●●\x1b[38;2;60;102;76m●○\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··\x1b[38;2;45;77;58m∘∘\x1b[38;2;53;89;67m∘∘○∘\x1b[38;2;45;77;58m∘│ +│∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m·∘∘○∘∘∘\x1b[38;2;38;64;49m∘·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m○\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○○●○\x1b[38;2;53;89;67m○∘\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··∘\x1b[38;2;45;77;58m∘∘∘∘·│ +│\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·│ +│\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ +│ \x1b[38;2;38;64;49m··∘\x1b[38;2;45;77;58m·∘·∘\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·····\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·····∘···\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘·∘·∘·\x1b[38;2;38;64;49m∘·\x1b[38;2;31;52;39m·│ +│·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;45;77;58m·○\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○○●\x1b[38;2;53;89;67m○○\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m···∘··\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·∘·\x1b[38;2;45;77;58m∘∘∘\x1b[38;2;38;64;49m·∘·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘∘○∘∘\x1b[38;2;38;64;49m·∘\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·∘\x1b[38;2;45;77;58m∘○\x1b[38;2;53;89;67m∘○∘\x1b[38;2;45;77;58m○∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·······\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m●○●○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·│ +│\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘∘\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○○○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m··\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··∘\x1b[38;2;45;77;58m·∘·\x1b[38;2;38;64;49m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m··\x1b[38;2;45;77;58m∘∘\x1b[38;2;53;89;67m○∘∘\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○\x1b[38;2;67;114;86m●●\x1b[38;2;60;102;76m●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m∘│ +│\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘\x1b[38;2;53;89;67m○∘○\x1b[38;2;45;77;58m∘∘·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘∘·\x1b[38;2;38;64;49m∘··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m··\x1b[38;2;38;64;49m··∘····\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m●\x1b[38;2;67;114;86m●●\x1b[38;2;60;102;76m○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m··\x1b[38;2;38;64;49m··\x1b[38;2;45;77;58m∘∘∘∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m··\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘○\x1b[38;2;60;102;76m○○\x1b[38;2;53;89;67m○○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·│ +│\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·∘·∘·∘··\x1b[39m \x1b[38;2;38;64;49m·······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○○○○\x1b[38;2;53;89;67m∘\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m·······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;45;77;58m∘∘∘∘·\x1b[38;2;38;64;49m∘·\x1b[38;2;31;52;39m·│ +│·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m····∘··\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ +│ │ +│\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m··\x1b[38;2;38;64;49m·····\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··\x1b[38;2;45;77;58m∘∘∘∘∘∘\x1b[38;2;38;64;49m∘·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ +│\x1b[38;2;45;77;58m·\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘∘∘∘·\x1b[38;2;38;64;49m··\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘∘\x1b[38;2;53;89;67m∘∘∘\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○●\x1b[38;2;67;114;86m●●\x1b[38;2;60;102;76m○○\x1b[38;2;53;89;67m∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘○∘∘\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m··│ +│\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m···\x1b[38;2;38;64;49m·····\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○●○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○\x1b[38;2;67;114;86m●●\x1b[38;2;60;102;76m●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m●●●○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·│ +│··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·····\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;45;77;58m·\x1b[38;2;53;89;67m○\x1b[38;2;67;114;86m○●●\x1b[38;2;60;102;76m●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m·\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○●\x1b[38;2;67;114;86m○\x1b[38;2;60;102;76m●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘∘\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘○\x1b[38;2;60;102;76m∘○\x1b[38;2;53;89;67m∘○\x1b[38;2;45;77;58m∘∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;45;77;58m·\x1b[38;2;53;89;67m○\x1b[38;2;67;114;86m○●●●\x1b[38;2;60;102;76m○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m∘│ +│\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m··\x1b[38;2;38;64;49m···\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m●●●○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m○∘○○○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘∘∘∘·\x1b[38;2;38;64;49m∘·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·│ +│\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m········\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·····\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m······\x1b[38;2;31;52;39m·\x1b[39m │ +│ \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m │ +│ \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ +│\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘·∘∘\x1b[38;2;38;64;49m∘··\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m·∘∘∘∘∘\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·····\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘○\x1b[38;2;53;89;67m∘○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘∘∘∘∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ +│\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘○∘○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;53;89;67m○○\x1b[38;2;60;102;76m○○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m·······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m·∘\x1b[38;2;53;89;67m∘○∘\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘○\x1b[38;2;60;102;76m○○○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ +│\x1b[38;2;31;52;39m···\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m●\x1b[38;2;67;114;86m●\x1b[38;2;60;102;76m●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·∘·\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·∘··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·∘\x1b[38;2;45;77;58m∘∘∘∘∘\x1b[38;2;38;64;49m∘·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○\x1b[38;2;67;114;86m●●●\x1b[38;2;60;102;76m○\x1b[38;2;53;89;67m○∘\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ +│ \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘○∘○∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;38;64;49m·······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m······\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○\x1b[38;2;67;114;86m●\x1b[38;2;60;102;76m○○\x1b[38;2;53;89;67m∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m │ +│ \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m······\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·····\x1b[38;2;31;52;39m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m···∘·∘···\x1b[38;2;31;52;39m·\x1b[39m │ +│ │ +│ \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m···\x1b[38;2;31;52;39m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·∘·∘·∘··\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·····\x1b[39m │ +│ \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m·∘·∘·\x1b[38;2;38;64;49m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m···∘\x1b[38;2;45;77;58m·∘\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;38;64;49m·······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m······\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘○∘○∘○\x1b[38;2;45;77;58m∘∘\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘∘∘∘·\x1b[38;2;38;64;49m··\x1b[38;2;31;52;39m·│ +│\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m·∘\x1b[38;2;53;89;67m∘○∘○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··∘·\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·∘·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··\x1b[38;2;45;77;58m∘∘∘∘∘\x1b[38;2;38;64;49m··\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··∘·\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m∘·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○\x1b[38;2;67;114;86m●○\x1b[38;2;60;102;76m●\x1b[38;2;53;89;67m○○\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·│ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_dots_100x34_text.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_dots_100x34_text.snap new file mode 100644 index 000000000..8d06d1e6f --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_dots_100x34_text.snap @@ -0,0 +1,37 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│ · · ··· · · · · ∘∘∘∘∘∘∘·· ········· ·∘∘○○○∘∘··│ +│ · · · · · ··· · · · · · ····∘···· │ +│ │ +│· ········· · · · · · · · ····· · · · · · · · ········│ +│·· ·∘∘∘∘∘·∘·· · · · ··∘∘∘∘∘·∘ · ····∘∘∘∘∘│ +│∘·· ∘∘○○○○○∘∘·· · · · · · ··∘∘○○○○○∘· · · · · · · · ··∘·∘∘○○○∘│ +│∘∘ ··∘∘○○○∘∘·· · · · · ∘∘○○●●●○○·· · · · · · ··∘∘∘∘○∘∘│ +│∘·· ··∘∘○∘∘∘∘·· · · · · · ··○○○○●○○∘∘ · · · · · · · · · · · ··∘∘∘∘∘·│ +│ · · · · · ······· · · ·│ +│ · · · · · · │ +│ ··∘·∘·∘·· · · · · ····· · · ··· · ······∘···· · · ··∘·∘·∘·∘··│ +│· · ··○○○○●○○∘· ····∘···· ··∘·∘∘∘·∘·· ·∘∘∘○∘∘·∘·· ··∘∘○∘○∘○∘· · · ······· ∘∘●○●○○∘∘·│ +│ · ∘∘○○○○○∘∘· ··∘···· · ··∘·∘···· ··∘○○○○∘∘·· ··∘∘○∘∘∘∘· · ··· · ··○○●●●○○∘∘│ +│· · ··∘∘○∘○∘∘·· ··∘∘∘·∘·· · ····∘······ ∘∘●●●○○∘∘·· ····∘∘∘∘∘·· · ····· · ∘∘○○○○○∘∘·│ +│ · ··∘·∘·∘·· ······· · · · · · ··○○○○○∘∘·· ······· · · · ∘∘∘∘∘·∘··│ +│· · · · · · · · · · · · ····∘···· · · · · · · · · · · │ +│ │ +│· · · · · · ··· · ······· · ··∘∘∘∘∘∘∘·· ······· · │ +│·· · · · · ·∘∘∘∘∘···· ∘∘∘∘∘∘∘·· ·∘○●●●○○∘∘· ··∘∘○∘∘∘∘··│ +│∘·· ········· ∘∘○○●○○∘∘·· ·∘○○●○○∘∘·· · · · · · · · · ∘∘○○●●●○○∘· ·∘○●●●○○∘∘·│ +│·· · ····· ··○○●●●○○·· ·∘○●○●○○∘∘ ∘∘○∘○∘○∘∘ ··○○●●●○○∘∘│ +│· · ······· ∘∘●●●○○∘∘·· ·∘○∘○○○∘∘·· · · · ··∘∘∘∘∘·∘·· ∘∘○○●○○∘∘·│ +│ · ········ · ······· · · ······· │ +│ · · · │ +│ · · · ··· · · · · ······· · · · │ +│· · ··∘·∘∘∘·· ··∘∘∘∘∘·· · · ····· · · · ··· · ··∘∘○∘○∘∘·· ··∘∘∘∘∘∘∘·· · · · │ +│·· ··∘∘○∘○∘∘·· ··○○○○○∘∘·· ······· · · · · · ··∘∘○∘∘·∘·· ·∘∘○○○○○∘∘· · │ +│··· ∘∘○○●○○∘∘·· ∘∘●●●○○∘∘·· ··∘·∘·∘·· · · · · · · · ··∘∘∘∘∘∘∘·· ∘∘○○●●●○○∘∘ · · · · │ +│ · ·∘∘○○○∘∘·· ··∘∘○∘○∘∘·· ······· · · · ······· ∘∘○○●○○∘∘·· │ +│ · ········· · ········· · · · · · · · · · ····∘·∘···· │ +│ │ +│ · ······· · · · ······· · · · · · · · · · ··∘·∘·∘···· · ····· │ +│ ··∘·∘···· ····∘·∘·· ······· · ······· ∘∘○∘○∘○∘∘ ·∘∘∘∘∘····│ +│ ··∘∘○∘○∘∘·· · ··∘·∘·∘·· ··∘∘∘∘∘···· · ··∘·∘·∘·· ·∘○○●○●○○∘· ∘∘○○●○○∘∘·│ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_return_zoom_100x34.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_return_zoom_100x34.snap new file mode 100644 index 000000000..6ffb0d155 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_return_zoom_100x34.snap @@ -0,0 +1,38 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +expression: terminal.backend().to_string() +--- +"⢀ ⢐⢐⢐ ⠑⠑⢁⠄⠄⠕⠅⢄⠄ ⠅⠅⠅⠄⠁⠄⠅⠄⠁⠅⠁⠄⠐⠁⠁⠄⢑⠅⢁⢀⠁ ⠐⠐⢀ ⢑⢁⠁ ⠁⠅⠅⠅⠄⠄⠁⠁⠅ ⠇⠅⠁⠅⠁ ⠁⠅⠅⠔⢁⠔⠑⢤ ⠄⠐⢀⠠⢰ ⠐ ⠄⠕⢅⠁⠄⠅⠅⠅⠅⠄⠄⠅⠄⠅⠁⠅⠅⠅⠁" +"○ ·⢰∘ ·⢄∘⠅· ·⠄·⠅·⠅·⠅·⠅· ⠄·⠅·⢅·⠐·⠄○⢀○⠬●⠐·⢄·⠐∘⢄∘⠅∘⠄ ⠅·⠅·⠅ ·⠅·⠅·⠄·⠄·⠔∘⠄·⠄·⠐·⢀∘⠠·⢄·⠄·⠄ ⠄·⠁·⠅·⠄·⠅·⠅·⠅·⠄" +"⠡·⠁ ⠈·⠅⠄⠉·⠅⠁⠅ ⠅⠄⠁ ⠁⠄⠅ ⠁⠅⠁·⠁⠅⠁·⠥⠄ ·⠁ ⠁○⠁ ⠁○⠑⠤⠝∘⠅⠄⠁·⠄⠅⠅·⠅⠅⠁ ⠅ ⠁·⠅⠅⠁·⠁⠄⠕∘⠑⠠⠉·⠁ ⠉ ⠑⠄⠅ ⠑⠁⠝·⠅⠅⠁·⠁⠅⠅ ⠅⠄⠅·⠅⠄" +"· ○ ∘⠠·⠅●⠅·⠅∘⠄∘⠄·⠁·⠅·⠄·⠄·⠅·⠅∘⠅∘⠅○⠅○ ○ ○ ○ ○⠡·⠄∘⠄· ·⠅·⠄ ⠅·⠅·⠅·⠄·⠅·⠅∘⠅●⠤ · ∘ ∘ ●⠅○⠅·⠅·⠅·⠄∘⠁·⠅· ·⠄·⠄·⠄" +"⠉⠠ ⠡⠉⠉⠤⠁⠍⠉⠅⠅⠅⠅⠁⠁⠄⠅⠅⠁⠅⠅⠅⠅⠅⠅⠅⠅⠄ ⠥⠄⠅⠁⠄⠡ ⠁ ⠄⠁⠄⠉⠥⠅⠅⠅⠅⠁⠄⠁⠅⠅⠄⠅⠅⠁⠅⠅⠅⠅⠅⠅⠥⠅⠅⠥⠅⠁ ⠩ ⠠⠠⠁⠨⠉⠨⠁⠍⠉⠄⠅⠅⠅⠅⠅⠄⠁ ⠁⠄⠅⠅⠅⠅⠅⠄" +"∘⠈○⠤●⠅·⠅∘ ·⠄·⠅∘⠅ ⠁·⠁·⠄·⠅· ·⠅∘⠅●⠅○⠥·⠈∘⠈· ⠠∘⠌∘⠅∘⠁∘⠅·⠄·⠅·⠄·⠅·⠄·⠅·⠅·⠄∘⠥∘⠄∘⠄●⠈· · ·⠤· ∘⠥∘⠄∘⠅·⠅·⠅·⠅·⠅ ⠅·⠄" +"⠁·⠁ ○⠉⠤⠅∘⠅⠅⠅·⠅⠄⠄·⠅⠅⠁·⠅⠄⠅·⠅⠄⠅ ⠁⠄⠅·⠁⠌⠉·⠡⠠ ∘⠁⠬⠁∘⠍⠁⠅ ⠁⠅⠅·⠁⠅⠅·⠅⠅⠅·⠅⠄⠅·⠅⠄⠁∘⠉⠁⠉· ⠉·⠁⠥⠁·⠁ ⠁∘⠄⠁⠁·⠁⠁⠅ ⠁⠁⠅·⠁ " +"● ·⠤· ·⠈∘⠄· ∘⠅·⠅·⠅·⠅·⠁·⠅·⠅·⠄·⠅·⠅●⠅∘⠩●⠠∘ ○⠉○ ○⠄○⠅∘⠅·⠅·⠅·⠅·⠅·⠅·⠄·⠅∘⠅●⠅· ●⠅· ∘ · ○⠁○⠅·⠄∘⠁·⠅·⠅·⠅·⠄·⠅·⠅·⠅" +"⠉⢀⠉⠠⠁ ⠉⢁⠕⠄⠁⠄⠁⠅⠁⠁⠅⠅⠅⠅⠅⠅⠅⠅⠁⠅⠅⠅⠡⢅⠁⠄⠁ ⠁ ⠁ ⠑ ⠁⠅⠥⠁⠅⠅⠅ ⠁⠁⠅⠄⠅⠅⠅⠁⠅⠁⠅⠄⠅⠅⠅⠅⠅⠍⠁⠤⠁⠄⠁⠈⠁ ⠡ ⠁⠁⠁⠅⠅⠅⠅⠔⠅⠄⠅⠅⠅⠅⠁⠅⠁⠁⠅⠄⠁⠅" +"∘⠐·⠈∘ ·⢄·⠁· ·⠅ ⠅·⠅ ⠅·⠅ ·⠅ ∘⠕·⠁∘ ·⠐· · ∘ ·⠉∘⢀∘⠁∘⠅·⠅ ⠅ ⠅ ⠅·⠅·⠅·⠕·⢕∘ ∘⢁∘ ●⠈ ·⢅·⠐∘⢄∘⠅·⠄·⠅·⠅ ⠅ ⠁·⠄·⠅" +"⠐○⠘⠔⠑·⢐⢄⠅·⠅⢄⠅·⠅⠅⠁·⠁⠅⠅ ⠄ ⠁·⠕⠄⠙ ⢁⢄⠱·⠁⠐ ⠈ ∘ ⢔⠐○ ⢄⠄ ⠁⠄⠁ ⠁ ⠁⠅⠅·⠅⠅⠁·⠑⢅⠑∘⢁⢐⢐· ⢐⠐ ⢁ ⠑⢄⠄·⢕⠁⠁ ⠁⠅⠅ ⠁⠅⠅·⠅⠅" +"·⢐∘ · ·⠑· ·⠅·⠄·⠁·⠅·⠅ ⠁·⠄· ·⠅·⠁∘⠄·⢀∘ · ∘ ·⠐·⢁·⠐·⠄·⠄ ⠄·⠄·⠅·⠅·⠄·⠅·⠅∘⠄ ⢑· ·⢁∘⢐·⠐·⠔·⢐·⢀ ⠕· ·⠁·⠄·⠆·⡅· ·⠄" +"⠑⢐⢑⢀⠐ ⠑⢀⢑ ⠕⠅⠁⠄⠁⠄⠁⠄⠁ ⠁⠁⠁⠅⡁ ⠑⠕⠁⢔⠁ ⠁⠐⠁⠐⢀⢀⢑ ⢑⢀⢑⢐⠁⢁⠑⠄⠕⢔⠁⠅⠑⠅⠅⠄⠅⠄⠃⠄⠁⠅⠁⠅⠑⠔⠐⠄⠑⢔⢁⢀⠁⢐⠁⢐⠑⠔⠑⢄⠑⢁⠔ ⢑⠁⠕⢁⠁ ⠁⠄⠁⠅⠃⠅⠃⠄⠁ " +"·⢐· ·⢀·⢀· ·⠄· · · ·⠁·⠄ ⢀· · ·⢐·⠄ ⠐·⢀·⠐·⢐·⢀·⠐·⠄· ·⠄ ·⠅· ·⠁·⠄· ·⢀ ⢀·⠐· ·⠐·⢐·⢀· ·⠄ ⢐· ·⠂·⠁· · ·⠄·⢀" +"⢀ ⠑⠐⢁·⠁⠐⠁ ⢑ ⠑ ⠑ ⠃ ⠁ ⠁⠂⠁ ⢁⢀⢁ ⢑⢐⠑ ⠐⠐⢑ ⢐⢐⢁ ⢁⠐⢑ ⢑⢀⠁ ⠃ ⠃ ⠃ ⠁ ⠃ ⠓ ⠁ ⠁⠐⠑ ⠁ ⢑ ⠑⢀⢁ ⠑⠐⠑ ⢁⢐ ⠁⢀⠑ ⠁⡀⠁ ⠁ ⠃ ⠁ " +"·⢐ ⠐·⢐ ·⢀· · ⠄· ·⢀ ⢐·⢀ ⠐·⢐ ·⢀ ⠐·⢐ ⢐· ·⢀·⢐ ⡀· · · · ⠐·⢀· · ·⢀·⢀·⢐ ⢀· · · · " +"⠁⢀⠁⢐⠑⢐ ⠐⠑⠐⠁⠔⠑⠄ ⠄⠃⠅⡁⠁⠁ ⠁ ⠁ ⠁ ⠑ ⠐⠐⢐ ⢑⢐⠑⢀⠁⢀⠑⢀⠁ ⢁ ⠑⠄ ⠁⡄⠃ ⠁⠄⠁ ⠗ ⠁⠐⠑⢀⢁⠐⢀ ⢑⢐⠁⢐⢐ ⢑ ⠑ ⠑ ⠑ ⠁ ⠁ ⠁⠄⠃⠄⠁ ⠑⠄" +"∘⢐∘⢀∘⢐·⠑·⢀·⠄ ⠄ ⠄·⠁·⠄ ·⠄·⠄·⠕·⢀·⠄·⢀∘⠄· ·⢐·⢐∘⢔·⢄·⠐· ·⠁ ⠄·⡅·⠄·⠁·⠄· ·⠄·⢔· · ·⢐·⢀∘⢀·⢀·⢄∘⠔· ·⠄ ⠄ ⠅·⠄·⠅ ⠅·⠄" +"⠁∘⠙⢀⢑·⢑ ⠁ ⠕⢕⠅ ⠅⠄⠅ ⠁⠄⠁·⠅⠄⠅ ⠑⠅⠅ ⠑ ⠁·⢁ ⠁·⢑ ⢑∘⠁⢔⠅∘⠑⠄⠁·⠕⠁⠁ ⠁⠅⠁ ⠁⠄⠁ ⠅⢄⠑·⠕⢔⠅∘⠄ ⠁∘⢑ ⠁·⠑⢄⢁·⠁⠄⠑·⠅⠅⠅· ⠃ ⠇⠄⠅·⠁⠅" +"·⢐·⠴∘ ∘⠁·⠵∘⠕○⠄·⠅·⠅·⠅·⠁·⠅·⠄·⠄·⢅ ⢁·⠠·⠐∘⠘·⢠∘⠐∘⢀·⢄∘⢕○⠄·⠄·⠅·⠄·⠅·⠄·⠄·⠅○⠅∘⢄·⠐∘ ⠐○⢀∘⢀∘ ·⢄∘⠁·⠑·⢄·⠄·⠅·⠅·⠅·⠅·⠄" +"⢁⢀⠁⠠⠁ ⠑⠄⠱⠄⠁⠄⠉⠅⠅ ⠁⠅⠅⠄⠅⠄⠅⠅⠁⠄⠁⠄⠁⠁⠁⠁ ⢵⠑⠐⠡⠔⠉⠠⠁ ⠙⠈⠁⠄⠁⠁⠁⠄⠁⠅⠅⠅⠁⠄⠁⠄⠅⠁⠅⠅⠅⢄⠅⠤⠍⠍⠉⢍⠙⠄⠘⠄⠡⠈⠡⠠⠁⢤⠁⠄⠍ ⠁⠄⠑⠄⠅ ⠅⠄⠁⠅⠁ ⠁⠄⠁⠄" +"●⠠·⠠○⠉●⠅○⠅·⠅○⠁·⠅·⠅·⠅·⠅·⠄·⠄·⠄·⠅∘⠅·⠅○ ∘ ○ ·⠨○⠅·⠥○⠄·⠅·⠅·⠄·⠅ ⠄·⠄·⠅·⠄·⠥· ∘⠥· ∘ · ∘⠌∘⠉·⠅·⠅·⠅·⠅·⠅·⠄ ⠅ ⠄·⠅" +"⠁●⠁⠠⠉∘⠁⠁⠁·⠉⠄⠅·⠅⠄⠅ ⠅⠅⠅ ⠅⠅⠁·⠅⠁⠅· ⠅⠉·⠁ ⠁·⠡⠠⠁·⠉⠅⠁∘⠅⠅⠁·⠅⠁⠁ ⠅⠄⠅ ⠅⠅⠅·⠅⠅⠅·⠅⠁⠅·⠉⠈ ∘⠉⠠⠁∘⠉ ⠁∘⠁ ⠅·⠁⠁⠅·⠁⠅⠅ ⠅⠅⠅ ⠅⠅" +"· ·⠈∘⠄·⠅○⠄·⠥·⠅∘⠁·⠁·⠅·⠅·⠅· ∘⠅ ⠈· ·⠁○⠡● · ○⠄·⠄·⠁·⠍∘⠥·⠅ ⠅·⠁·⠄·⠄·⠄·⠅·⠁·⠅○⠅∘⠄·⠠○ ·⠈∘⠤· ○⠄·⠁∘⠅·⠅·⠅· ·⠅·⠄·⠁" +"⠩⠠⠁⠨ ⠅⠅⠅⠁⠅⠅⠅⠅⠅⠁⠅⠁⠅⠅⠅⠅⠅⠁⠅⠅⠅⠁⠁⠁⠄⠅⠄⠁⠄⠩⠬⠁ ⠩⠤⠉⠄⠁⠄⠅⠥⠁⠄⠅⠅⠁⠄⠁⠄⠅⠅⠁⠅⠅⠄⠅⠅⠅⠄⠍⠉⠍⠩⠁ ⠁⠄⠁⠨⠨⠈⠁⠄⠍⠅⠉ ⠁⠄⠅⠅⠅⠅⠅⠄⠅⠅⠅⠅⠅⠅⠅⠅" +"○ ∘ ⠈·⠤·⠁ ⠥·⠅·⠅ ⠁ ⠁ ⠅·⠄ ⠅·⠄ ⠁○⠅·⠭ ⠠·⠈· ·⠤· ∘⠍∘⠥∘⠄·⠅ ⠄·⠄ ⠅ ⠁·⠅∘⠅·⠁ ∘⠅●⠬·⠠∘⠨● ·⠄○⠤○⠤ ⠁·⠄·⠅ ⠅ ⠅·⠅·⠅" +" ∘⠈ ⠈∘⠁⠅⠍·⠄⠅⠁·⠅⠅⠅ ⠄⠅⠄ ⠅⠅⠄·⠅⠁⠁·⠅⠄⠁●⠁⢤⠈· ⠈⠉∘⠁⠈⠁∘⠁⠄⠁∘⠁⠅⠅·⠄⠅⠅ ⠁⠁⠁ ⠁⠅⠁ ⠉⠅⠕ ⠩⠤⠁ ⠈ ∘ ⠈⠁∘⠄⠤⠁∘ ⠄⠁·⠁⠅⠅ ⠅⠄⠅ ⠁ " +"∘⠈·⢀· ·⠅·⠅·⠄·⠅·⠄ ⠅·⠅ ⠅· ⠁∘⠅·⢄○⢤○⠠∘ ∘⢘·⢀·⢠·⠅·⠄·⠅·⠁·⠅ ⠄·⠅·⠅·⠁·⠄·⠅· ·⠁○⢠● · ○ ●⢀∘⠄·⠅·⠅·⠄· ·⠄·⠅ ⠅·⠁·⠅" +"⠈⢐⢈⠘⠉⢄⢉⠔⠁⠅⠁⠅⠁⠄⠅⠅⠅⠁⠁⠅⠁⠄⠁⠅⠁⠅⠁⠅⠁⠤⠵⠄⠁⢄⠑⠜⢙⠤⢙ ⠉⢀⠁⢅⠁⠕⠝⠕⠅⢁ ⠁⠁⠄⠅⠁⠁⠁⠅⠅⠅⠅⠅⠕⠅⠐⢅⠅⠑⠅⠉⢀⠱⢐⠑⢠⢐ ⠉ ⠑⠄⢑⠑⠁⠄⠕⠕⠅⠅⠅ ⠅⠅⠅⠄⠅⠄⠅⠅" +" ·⢀ ⠍∘⠁∘⢁∘⠄ ·⠄·⡁·⠅·⠅·⠅ ·⠁·⢄∘⢔·⠍∘⠐·⠐·⢐·⢀·⠔·⢀∘⢅·⠅ ⠄ ⠅·⠅·⠅·⠄·⠄∘⠄·⡄·⢄·⠐· ∘⢐∘⢀· ·⢐∘⢕·⠄ ⢄∘⠅·⠅·⠄ ⠁·⡅·⠄·⠄" +"⠑·⢑⢀⢑·⢑⢀⠁·⠕⢔⠁·⠁⠁⠅ ⠅⠆⠅ ⠁⠅⠁ ⠁⠁·⠕⠐⠁·⠙⢄⠁·⠁⢀⠑ ⢁ ⠁·⠑⠁⠕·⠄⠄ ⠃⠅⠇ ⠁⠅⠁·⠁⢀⢑ ⠑⠔⢁∘⠁⢀⠑·⠑⢐⢑·⠁⢐⠑·⠁⠐⠁·⠁⢐⠁ ⠁⠄⠁ ⠁⠅⠁ ⠅⠅" +"·⠐ ⢐· ⢐·⢀·⠔·⠁ ⠄·⠄ ⠄· ·⡄·⠄·⠐· ·⢀· ·⢐·⠐·⢐· ·⢀·⢀· ·⠅ · · ·⠁ ⠅· ⠐·⢔·⢐·⢐·⢐·⢀·⢀·⢀·⢄·⢄·⠔·⠕· ·⠁·⠁· ⠄· " +"⢁ ⠑⢐⠑ ⠁⢀⠑⢀⢁ ⠁ ⠃⠄⠁⠄⠁ ⠁ ⠂⠁ ⢑⢀⠑⢀⠑⠐⠑⢐⠑⢀⢑⢀⢀⢐⠑⢀⢐ ⠑⠐⠐⢄⠓⣐⠁ ⠁ ⠁ ⠃⡀⠁ ⠁⠐⠑⢀⠑ ⢁⢀⠁ ⢑⢐⢑⠐⢁ ⢑⢐ ⢀⠁⢐⢑⢀⠁⢁⠁ ⠁⡀⠁⠄⠁ ⠁ ⠁ " +" ⠐·⢀ ⠐·⢐ ⢀· · · · · · ·⠐·⠐· · ·⢐· ·⢀·⢀·⢐·⢀· · · · ·⠂· ·⠐·⠐· ·⢐·⢐·⢀·⠐·⢐ ⢐ ⠐·⢀· · ⠂· · " diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_return_zoom_100x34_ansi.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_return_zoom_100x34_ansi.snap new file mode 100644 index 000000000..f948f5b42 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_return_zoom_100x34_ansi.snap @@ -0,0 +1,37 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│\x1b[38;2;31;52;39m\x1b[48;2;10;15;12m⢀\x1b[39m \x1b[38;2;38;64;49m⢐⢐⢐\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⠑⢁⠄\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⢄\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;38;64;49m⠅⠅⠅⠄\x1b[38;2;31;52;39m⠁⠄⠅⠄⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄⠐⠁⠁⠄\x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⢁⢀\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;38;64;49m⢑⢁\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁⠁⠅\x1b[39m \x1b[38;2;38;64;49m⠇\x1b[38;2;31;52;39m⠅⠁⠅⠁\x1b[39m \x1b[38;2;38;64;49m⠁⠅⠅⠔⢁⠔⠑⢤\x1b[39m \x1b[38;2;31;52;39m⠄⠐⢀⠠\x1b[38;2;38;64;49m⢰\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠕⢅⠁\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠅⠅⠅\x1b[38;2;31;52;39m⠄⠄⠅⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅⠅\x1b[38;2;31;52;39m⠁│ +│\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢰\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⢄\x1b[38;2;53;89;67m∘\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠄·⠅\x1b[38;2;38;64;49m·⢅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠐·\x1b[38;2;31;52;39m⠄\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⢀\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠬\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠐·⢄·⠐\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;38;64;49m⠅·⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄·⠔\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠐·⢀\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠠\x1b[38;2;31;52;39m·⢄\x1b[38;2;38;64;49m·⠄·\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;38;64;49m⠄·⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠅·⠅·⠅·⠄│ +│⠡\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠈\x1b[38;2;38;64;49m·⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠉·\x1b[38;2;31;52;39m⠅⠁⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠁⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠥\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⠤⠝∘⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠁·\x1b[38;2;31;52;39m⠄⠅\x1b[38;2;38;64;49m⠅·\x1b[38;2;31;52;39m⠅⠅⠁\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠅⠅⠁\x1b[38;2;31;52;39m·⠁⠄\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠑⠠\x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠝\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠁·⠁⠅⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄│ +│·\x1b[39m \x1b[38;2;60;102;76m○\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠠·\x1b[38;2;38;64;49m⠅\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠅∘\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄·⠁·⠅·⠄·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[38;2;38;64;49m∘⠅∘⠅\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠅\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;60;102;76m○\x1b[38;2;38;64;49m⠡\x1b[38;2;31;52;39m·⠄\x1b[38;2;38;64;49m∘⠄·\x1b[39m \x1b[38;2;31;52;39m·⠅·⠄\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠤\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠅\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠅\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠄·⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄│ +│\x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m⠠\x1b[39m \x1b[38;2;31;52;39m⠡⠉⠉⠤⠁\x1b[38;2;38;64;49m⠍\x1b[38;2;31;52;39m⠉⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠁⠁⠄⠅⠅⠁⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m⠄⠅\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠄⠡\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠄⠁⠄⠉⠥\x1b[38;2;38;64;49m⠅⠅⠅⠅\x1b[38;2;31;52;39m⠁⠄⠁⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠅⠅⠅⠅\x1b[38;2;38;64;49m⠥⠅⠅⠥\x1b[38;2;31;52;39m⠅⠁\x1b[39m \x1b[38;2;38;64;49m⠩\x1b[39m \x1b[38;2;31;52;39m⠠⠠⠁\x1b[38;2;38;64;49m⠨\x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m⠨\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠍\x1b[38;2;31;52;39m⠉⠄\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠅⠅⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠄│ +│\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠈\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠤\x1b[38;2;67;114;86m●\x1b[38;2;31;52;39m⠅·⠅\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠁·⠁·⠄·⠅·\x1b[39m \x1b[38;2;31;52;39m·⠅\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠅\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠈\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠈\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m⠠\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠌∘⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m∘⠅\x1b[38;2;31;52;39m·⠄·⠅·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠅·⠅\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠥\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠈\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠤·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠥∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m·⠅·\x1b[38;2;31;52;39m⠅·⠅·⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄│ +│⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠉⠤⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅⠅⠅·\x1b[38;2;31;52;39m⠅⠄⠄·⠅⠅⠁·⠅⠄\x1b[38;2;38;64;49m⠅·\x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠄⠅·⠁⠌⠉·⠡⠠\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠬\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠍⠁⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠅⠅\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m·⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅⠄⠅\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠅⠄⠁\x1b[38;2;53;89;67m∘\x1b[38;2;31;52;39m⠉⠁⠉·\x1b[39m \x1b[38;2;31;52;39m⠉·⠁\x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m⠁·⠁\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[38;2;53;89;67m∘\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠁·\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁\x1b[39m │ +│\x1b[38;2;67;114;86m●\x1b[39m \x1b[38;2;31;52;39m·⠤·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠈\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄·\x1b[39m \x1b[38;2;38;64;49m∘⠅·⠅·\x1b[38;2;31;52;39m⠅·⠅·⠁·\x1b[38;2;38;64;49m⠅·\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠅\x1b[38;2;38;64;49m·⠅\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m∘⠩\x1b[38;2;67;114;86m●\x1b[38;2;31;52;39m⠠\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠉\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;45;77;58m○\x1b[38;2;31;52;39m⠄\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠄·⠅\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠅·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠁\x1b[38;2;45;77;58m○\x1b[38;2;38;64;49m⠅·⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠅·⠅·\x1b[38;2;38;64;49m⠅│ +│⠉\x1b[38;2;31;52;39m⢀⠉\x1b[38;2;38;64;49m⠠\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠉⢁⠕\x1b[38;2;31;52;39m⠄⠁⠄⠁⠅⠁⠁\x1b[38;2;38;64;49m⠅⠅⠅⠅⠅⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠅⠅⠡⢅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠥\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠅⠄⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠅⠅⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠍\x1b[38;2;31;52;39m⠁⠤⠁⠄⠁\x1b[38;2;38;64;49m⠈\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠡\x1b[39m \x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠁⠅⠅\x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠔⠅⠄⠅⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠁⠅\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠅│ +│∘\x1b[38;2;31;52;39m⠐·⠈\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;38;64;49m·⢄\x1b[38;2;31;52;39m·⠁·\x1b[39m \x1b[38;2;31;52;39m·⠅\x1b[39m \x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m∘⠕\x1b[38;2;31;52;39m·⠁\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·⠐·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·⠉\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⢀\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠁∘⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅·⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢕∘\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⢁\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠈\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢅·⠐∘⢄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅│ +│\x1b[38;2;31;52;39m⠐\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠘⠔⠑·⢐⢄⠅·⠅\x1b[38;2;31;52;39m⢄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅⠅⠁\x1b[38;2;31;52;39m·⠁⠅\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠕⠄⠙\x1b[39m \x1b[38;2;38;64;49m⢁⢄⠱\x1b[38;2;31;52;39m·⠁⠐\x1b[39m \x1b[38;2;38;64;49m⠈\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;38;64;49m⢔⠐\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;38;64;49m⢄⠄\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m·⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠑⢅⠑∘\x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⢐·\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;38;64;49m⢁\x1b[39m \x1b[38;2;38;64;49m⠑⢄⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢕\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;38;64;49m⠁⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅·⠅\x1b[38;2;31;52;39m⠅│ +│·\x1b[38;2;38;64;49m⢐\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠑·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⢀\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m·⠐\x1b[38;2;38;64;49m·⢁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄·\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·⠄\x1b[38;2;31;52;39m·⠅·⠅·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅∘⠄\x1b[39m \x1b[38;2;38;64;49m⢑·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢁∘⢐·⠐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;38;64;49m⠕·\x1b[39m \x1b[38;2;31;52;39m·⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄·⠆·\x1b[38;2;38;64;49m⡅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄│ +│\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢐⢑\x1b[38;2;31;52;39m⢀⠐\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;38;64;49m⠕⠅⠁⠄\x1b[38;2;31;52;39m⠁⠄⠁\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠁⠅⡁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⠕⠁⢔\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠐⠁⠐⢀⢀\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⢀⢑\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢁⠑⠄⠕⢔\x1b[38;2;31;52;39m⠁⠅⠑\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠄⠃\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠅⠁⠅\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⠔⠐⠄\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢔⢁\x1b[38;2;31;52;39m⢀⠁\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢐⠑\x1b[38;2;31;52;39m⠔\x1b[38;2;38;64;49m⠑⢄⠑⢁\x1b[38;2;31;52;39m⠔\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m⢁⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄⠁\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠃⠅\x1b[38;2;31;52;39m⠃⠄⠁\x1b[39m │ +│\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢀·⢀·\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠁·⠄\x1b[39m \x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m⠐·⢀·\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⢀·⠐·⠄·\x1b[39m \x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m·⠅·\x1b[39m \x1b[38;2;31;52;39m·⠁·⠄·\x1b[39m \x1b[38;2;31;52;39m·⢀\x1b[39m \x1b[38;2;31;52;39m⢀·⠐·\x1b[39m \x1b[38;2;31;52;39m·⠐·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⢀·\x1b[39m \x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠂\x1b[38;2;31;52;39m·⠁·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⢀│ +│\x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;31;52;39m⠑⠐⢁·⠁⠐⠁\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;38;64;49m⠃\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠂\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⢁⢀\x1b[38;2;38;64;49m⢁\x1b[39m \x1b[38;2;31;52;39m⢑\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⠐⠐\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;38;64;49m⢐⢐\x1b[38;2;31;52;39m⢁\x1b[39m \x1b[38;2;31;52;39m⢁⠐\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;38;64;49m⢑⢀\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠃\x1b[39m \x1b[38;2;38;64;49m⠃\x1b[39m \x1b[38;2;31;52;39m⠃\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠃\x1b[39m \x1b[38;2;38;64;49m⠓\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠐⠑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;31;52;39m⠑⢀⢁\x1b[39m \x1b[38;2;31;52;39m⠑⠐\x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⠁⢀\x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⡀\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠃\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│\x1b[38;2;31;52;39m·⢐\x1b[39m \x1b[38;2;31;52;39m⠐·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[38;2;24;39;30m·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m·⢀\x1b[39m \x1b[38;2;31;52;39m⠐·⢐\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m⡀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠐·⢀·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢀·⢀·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⢀·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ +│\x1b[38;2;31;52;39m⠁⢀⠁\x1b[38;2;38;64;49m⢐⠑⢐\x1b[39m \x1b[38;2;38;64;49m⠐⠑\x1b[38;2;31;52;39m⠐⠁\x1b[38;2;38;64;49m⠔\x1b[38;2;31;52;39m⠑⠄\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠃⠅\x1b[38;2;38;64;49m⡁\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠐⠐\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m⢑⢐\x1b[38;2;31;52;39m⠑⢀⠁⢀⠑\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠁⡄\x1b[38;2;38;64;49m⠃\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁\x1b[39m \x1b[38;2;38;64;49m⠗\x1b[39m \x1b[38;2;31;52;39m⠁⠐⠑⢀\x1b[38;2;38;64;49m⢁\x1b[38;2;31;52;39m⠐⢀\x1b[39m \x1b[38;2;38;64;49m⢑⢐\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢐⢐\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠃\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;38;64;49m⠑⠄│ +│∘⢐∘\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m∘⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠄·⠁·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m·⢀·⠄·⢀\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·⢐·\x1b[38;2;38;64;49m⢐∘⢔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢄·⠐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⡅\x1b[38;2;31;52;39m·⠄·⠁·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢔\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·⢐·\x1b[38;2;31;52;39m⢀\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m·⢀·⢄∘⠔\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄│ +│⠁\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠙⢀\x1b[38;2;38;64;49m⢑·⢑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⢕⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁·⠅\x1b[38;2;38;64;49m⠄⠅\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⢁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⢑\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢔⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m·⠕\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠅⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁\x1b[39m \x1b[38;2;38;64;49m⠅⢄⠑\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕⢔\x1b[38;2;31;52;39m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢄⢁\x1b[38;2;31;52;39m·⠁⠄\x1b[38;2;38;64;49m⠑·\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠃\x1b[39m \x1b[38;2;38;64;49m⠇\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁⠅│ +│·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠴∘\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠵\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠕\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠄·⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠄·\x1b[38;2;38;64;49m⢅\x1b[39m \x1b[38;2;38;64;49m⢁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠠\x1b[38;2;31;52;39m·⠐\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠘\x1b[38;2;31;52;39m·⢠\x1b[38;2;38;64;49m∘⠐\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢀·⢄\x1b[38;2;45;77;58m∘⢕\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠄·⠅·⠄·⠅·⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘⢄\x1b[38;2;31;52;39m·⠐\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⢀\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢀\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢄∘⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠑·⢄·⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄│ +│⢁\x1b[38;2;31;52;39m⢀⠁⠠⠁\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠱\x1b[38;2;31;52;39m⠄⠁⠄\x1b[38;2;38;64;49m⠉⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠅⠅⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁⠄⠁\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;45;77;58m⢵\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⠡⠔⠉\x1b[38;2;31;52;39m⠠⠁\x1b[39m \x1b[38;2;38;64;49m⠙⠈⠁⠄\x1b[38;2;31;52;39m⠁⠁⠁⠄\x1b[38;2;24;39;30m⠁\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠁⠄⠁⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠅⠅⢄⠅⠤⠍⠍⠉⢍⠙\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠘\x1b[38;2;31;52;39m⠄⠡⠈⠡⠠⠁\x1b[38;2;38;64;49m⢤\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄⠍\x1b[39m \x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⠄⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁⠅⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠄│ +│\x1b[38;2;67;114;86m●\x1b[38;2;38;64;49m⠠\x1b[38;2;31;52;39m·⠠\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠉\x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠅\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁·⠅·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄\x1b[38;2;38;64;49m·⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄·⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅·\x1b[38;2;31;52;39m⠅\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠨\x1b[38;2;60;102;76m○\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠥\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠄\x1b[38;2;38;64;49m·⠅\x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠌∘⠉\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅·\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m·⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠅│ +│⠁\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠁⠠\x1b[38;2;38;64;49m⠉\x1b[38;2;53;89;67m∘\x1b[38;2;31;52;39m⠁⠁⠁·⠉⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅·\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;31;52;39m⠁·⠡\x1b[38;2;38;64;49m⠠\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠉⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅⠅⠁·⠅\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m·⠅\x1b[38;2;38;64;49m⠅⠅·\x1b[38;2;31;52;39m⠅⠁\x1b[38;2;38;64;49m⠅·⠉\x1b[38;2;31;52;39m⠈\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠉⠠⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠅·\x1b[38;2;31;52;39m⠁⠁⠅\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅│ +│·\x1b[39m \x1b[38;2;31;52;39m·⠈\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠅\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m·⠅\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁·⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠈·\x1b[39m \x1b[38;2;31;52;39m·⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠡\x1b[38;2;60;102;76m●\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄·⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠍∘⠥·⠅\x1b[39m \x1b[38;2;31;52;39m⠅·⠁·⠄·⠄·\x1b[38;2;38;64;49m⠄·⠅\x1b[38;2;31;52;39m·⠁·⠅\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄·⠠\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠈\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠤\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄·⠁\x1b[38;2;38;64;49m∘⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠁│ +│\x1b[38;2;38;64;49m⠩\x1b[38;2;31;52;39m⠠⠁\x1b[38;2;38;64;49m⠨\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠁⠅⠅⠅⠅⠅⠁⠅⠁⠅⠅⠅⠅⠅⠁⠅⠅⠅⠁⠁⠁⠄⠅⠄⠁⠄\x1b[38;2;38;64;49m⠩⠬\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠩\x1b[38;2;31;52;39m⠤\x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m⠄⠁⠄\x1b[38;2;38;64;49m⠅⠥\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠁⠄⠁⠄⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠄⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠄⠍⠉\x1b[38;2;31;52;39m⠍\x1b[38;2;38;64;49m⠩\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁\x1b[38;2;38;64;49m⠨⠨\x1b[38;2;31;52;39m⠈⠁⠄\x1b[38;2;38;64;49m⠍⠅\x1b[38;2;31;52;39m⠉\x1b[39m \x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅⠅⠅⠅⠅⠅│ +│\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m⠈·⠤\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠅·⠄\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m○\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠭\x1b[39m \x1b[38;2;31;52;39m⠠·⠈·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠤\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠍\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠥∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠄\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠁·⠅\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠅·⠁\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠬\x1b[38;2;31;52;39m·⠠\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠨\x1b[38;2;67;114;86m●\x1b[39m \x1b[38;2;31;52;39m·⠄\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠤\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠤\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄·⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠅·⠅·⠅│ +│\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠈\x1b[39m \x1b[38;2;31;52;39m⠈\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠍\x1b[38;2;31;52;39m·⠄⠅⠁·⠅⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠄⠅⠄\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠅⠄⠁\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢤\x1b[38;2;31;52;39m⠈·\x1b[39m \x1b[38;2;38;64;49m⠈\x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁⠈⠁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁⠄⠁\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅·⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m⠅⠕\x1b[39m \x1b[38;2;38;64;49m⠩\x1b[38;2;31;52;39m⠤⠁\x1b[39m \x1b[38;2;31;52;39m⠈\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m⠈⠁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄⠤⠁\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠄⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠈·⢀·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠅·⠅\x1b[39m \x1b[38;2;31;52;39m⠅·\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m·⢄\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⢤\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠠\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢘\x1b[38;2;31;52;39m·⢀\x1b[38;2;38;64;49m·⢠\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠅·⠅·⠁·⠄·⠅·\x1b[39m \x1b[38;2;31;52;39m·⠁\x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⢠\x1b[38;2;60;102;76m●\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⢀\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁·\x1b[38;2;38;64;49m⠅│ +│\x1b[38;2;31;52;39m⠈\x1b[38;2;38;64;49m⢐⢈⠘⠉⢄⢉⠔\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠁⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄⠅⠅⠅\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠁⠅⠁⠤⠵\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⢄\x1b[38;2;38;64;49m⠑⠜⢙⠤⢙\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢅⠁⠕⠝⠕⠅⢁\x1b[39m \x1b[38;2;31;52;39m⠁⠁⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠁⠁⠅\x1b[38;2;38;64;49m⠅⠅⠅⠅⠕\x1b[38;2;31;52;39m⠅⠐\x1b[38;2;38;64;49m⢅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠉⢀⠱⢐\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢠⢐\x1b[39m \x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;38;64;49m⠑⠄⢑⠑\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄⠕⠕⠅⠅⠅\x1b[39m \x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠅│ +│\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;38;64;49m⠍\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⢁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⡁·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m·⠁·\x1b[38;2;38;64;49m⢄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠍∘\x1b[38;2;31;52;39m⠐·⠐\x1b[38;2;38;64;49m·⢐\x1b[38;2;31;52;39m·⢀·\x1b[38;2;38;64;49m⠔\x1b[38;2;31;52;39m·⢀\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄∘⠄·⡄·\x1b[38;2;31;52;39m⢄·\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘⢐\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·⢐∘\x1b[38;2;45;77;58m⢕\x1b[38;2;38;64;49m·⠄\x1b[39m \x1b[38;2;38;64;49m⢄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅·\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⡅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄│ +│\x1b[38;2;31;52;39m⠑·\x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⢀⢑·\x1b[38;2;38;64;49m⢑⢀\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠕⢔\x1b[38;2;31;52;39m⠁·⠁⠁⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠆\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠅⠁\x1b[39m \x1b[38;2;38;64;49m⠁⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕⠐\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠙\x1b[38;2;31;52;39m⢄⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁⢀\x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⢁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠑⠁⠕\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄⠄\x1b[39m \x1b[38;2;38;64;49m⠃\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠇\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁·⠁⢀\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;38;64;49m⠑⠔⢁∘\x1b[38;2;31;52;39m⠁⢀⠑·⠑\x1b[38;2;38;64;49m⢐⢑·\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠑·⠁\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠁⢐\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅│ +│·⠐\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⡄\x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢀·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢀·⢀·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;31;52;39m⠅·\x1b[39m \x1b[38;2;31;52;39m⠐·\x1b[38;2;38;64;49m⢔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⢐·⢀·⢀·⢀·\x1b[38;2;38;64;49m⢄\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⢄·\x1b[38;2;38;64;49m⠔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠁·⠁·\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[39m │ +│\x1b[38;2;31;52;39m⢁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢀⠑⢀\x1b[38;2;31;52;39m⢁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠃⠄\x1b[38;2;31;52;39m⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠂\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢑⢀⠑⢀⠑⠐⠑⢐\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m⢑⢀⢀\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠑⢀⢐\x1b[39m \x1b[38;2;31;52;39m⠑⠐⠐\x1b[38;2;38;64;49m⢄⠓⣐⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠃⡀⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠐\x1b[38;2;38;64;49m⠑⢀⠑\x1b[39m \x1b[38;2;31;52;39m⢁⢀⠁\x1b[39m \x1b[38;2;38;64;49m⢑⢐⢑\x1b[38;2;31;52;39m⠐⢁\x1b[39m \x1b[38;2;38;64;49m⢑⢐\x1b[39m \x1b[38;2;31;52;39m⢀⠁\x1b[38;2;38;64;49m⢐⢑⢀\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢁\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠁⡀\x1b[38;2;31;52;39m⠁⠄⠁\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│ \x1b[38;2;31;52;39m⠐·⢀\x1b[39m \x1b[38;2;31;52;39m⠐·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠐·\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢀·⢀·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠂\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·⠐·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⢐·⢀·⠐·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⠐·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m⠂\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_return_zoom_100x34_text.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_return_zoom_100x34_text.snap new file mode 100644 index 000000000..093142df9 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_return_zoom_100x34_text.snap @@ -0,0 +1,37 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│⢀ ⢐⢐⢐ ⠑⠑⢁⠄⠄⠕⠅⢄⠄ ⠅⠅⠅⠄⠁⠄⠅⠄⠁⠅⠁⠄⠐⠁⠁⠄⢑⠅⢁⢀⠁ ⠐⠐⢀ ⢑⢁⠁ ⠁⠅⠅⠅⠄⠄⠁⠁⠅ ⠇⠅⠁⠅⠁ ⠁⠅⠅⠔⢁⠔⠑⢤ ⠄⠐⢀⠠⢰ ⠐ ⠄⠕⢅⠁⠄⠅⠅⠅⠅⠄⠄⠅⠄⠅⠁⠅⠅⠅⠁│ +│○ ·⢰∘ ·⢄∘⠅· ·⠄·⠅·⠅·⠅·⠅· ⠄·⠅·⢅·⠐·⠄○⢀○⠬●⠐·⢄·⠐∘⢄∘⠅∘⠄ ⠅·⠅·⠅ ·⠅·⠅·⠄·⠄·⠔∘⠄·⠄·⠐·⢀∘⠠·⢄·⠄·⠄ ⠄·⠁·⠅·⠄·⠅·⠅·⠅·⠄│ +│⠡·⠁ ⠈·⠅⠄⠉·⠅⠁⠅ ⠅⠄⠁ ⠁⠄⠅ ⠁⠅⠁·⠁⠅⠁·⠥⠄ ·⠁ ⠁○⠁ ⠁○⠑⠤⠝∘⠅⠄⠁·⠄⠅⠅·⠅⠅⠁ ⠅ ⠁·⠅⠅⠁·⠁⠄⠕∘⠑⠠⠉·⠁ ⠉ ⠑⠄⠅ ⠑⠁⠝·⠅⠅⠁·⠁⠅⠅ ⠅⠄⠅·⠅⠄│ +│· ○ ∘⠠·⠅●⠅·⠅∘⠄∘⠄·⠁·⠅·⠄·⠄·⠅·⠅∘⠅∘⠅○⠅○ ○ ○ ○ ○⠡·⠄∘⠄· ·⠅·⠄ ⠅·⠅·⠅·⠄·⠅·⠅∘⠅●⠤ · ∘ ∘ ●⠅○⠅·⠅·⠅·⠄∘⠁·⠅· ·⠄·⠄·⠄│ +│⠉⠠ ⠡⠉⠉⠤⠁⠍⠉⠅⠅⠅⠅⠁⠁⠄⠅⠅⠁⠅⠅⠅⠅⠅⠅⠅⠅⠄ ⠥⠄⠅⠁⠄⠡ ⠁ ⠄⠁⠄⠉⠥⠅⠅⠅⠅⠁⠄⠁⠅⠅⠄⠅⠅⠁⠅⠅⠅⠅⠅⠅⠥⠅⠅⠥⠅⠁ ⠩ ⠠⠠⠁⠨⠉⠨⠁⠍⠉⠄⠅⠅⠅⠅⠅⠄⠁ ⠁⠄⠅⠅⠅⠅⠅⠄│ +│∘⠈○⠤●⠅·⠅∘ ·⠄·⠅∘⠅ ⠁·⠁·⠄·⠅· ·⠅∘⠅●⠅○⠥·⠈∘⠈· ⠠∘⠌∘⠅∘⠁∘⠅·⠄·⠅·⠄·⠅·⠄·⠅·⠅·⠄∘⠥∘⠄∘⠄●⠈· · ·⠤· ∘⠥∘⠄∘⠅·⠅·⠅·⠅·⠅ ⠅·⠄│ +│⠁·⠁ ○⠉⠤⠅∘⠅⠅⠅·⠅⠄⠄·⠅⠅⠁·⠅⠄⠅·⠅⠄⠅ ⠁⠄⠅·⠁⠌⠉·⠡⠠ ∘⠁⠬⠁∘⠍⠁⠅ ⠁⠅⠅·⠁⠅⠅·⠅⠅⠅·⠅⠄⠅·⠅⠄⠁∘⠉⠁⠉· ⠉·⠁⠥⠁·⠁ ⠁∘⠄⠁⠁·⠁⠁⠅ ⠁⠁⠅·⠁ │ +│● ·⠤· ·⠈∘⠄· ∘⠅·⠅·⠅·⠅·⠁·⠅·⠅·⠄·⠅·⠅●⠅∘⠩●⠠∘ ○⠉○ ○⠄○⠅∘⠅·⠅·⠅·⠅·⠅·⠅·⠄·⠅∘⠅●⠅· ●⠅· ∘ · ○⠁○⠅·⠄∘⠁·⠅·⠅·⠅·⠄·⠅·⠅·⠅│ +│⠉⢀⠉⠠⠁ ⠉⢁⠕⠄⠁⠄⠁⠅⠁⠁⠅⠅⠅⠅⠅⠅⠅⠅⠁⠅⠅⠅⠡⢅⠁⠄⠁ ⠁ ⠁ ⠑ ⠁⠅⠥⠁⠅⠅⠅ ⠁⠁⠅⠄⠅⠅⠅⠁⠅⠁⠅⠄⠅⠅⠅⠅⠅⠍⠁⠤⠁⠄⠁⠈⠁ ⠡ ⠁⠁⠁⠅⠅⠅⠅⠔⠅⠄⠅⠅⠅⠅⠁⠅⠁⠁⠅⠄⠁⠅│ +│∘⠐·⠈∘ ·⢄·⠁· ·⠅ ⠅·⠅ ⠅·⠅ ·⠅ ∘⠕·⠁∘ ·⠐· · ∘ ·⠉∘⢀∘⠁∘⠅·⠅ ⠅ ⠅ ⠅·⠅·⠅·⠕·⢕∘ ∘⢁∘ ●⠈ ·⢅·⠐∘⢄∘⠅·⠄·⠅·⠅ ⠅ ⠁·⠄·⠅│ +│⠐○⠘⠔⠑·⢐⢄⠅·⠅⢄⠅·⠅⠅⠁·⠁⠅⠅ ⠄ ⠁·⠕⠄⠙ ⢁⢄⠱·⠁⠐ ⠈ ∘ ⢔⠐○ ⢄⠄ ⠁⠄⠁ ⠁ ⠁⠅⠅·⠅⠅⠁·⠑⢅⠑∘⢁⢐⢐· ⢐⠐ ⢁ ⠑⢄⠄·⢕⠁⠁ ⠁⠅⠅ ⠁⠅⠅·⠅⠅│ +│·⢐∘ · ·⠑· ·⠅·⠄·⠁·⠅·⠅ ⠁·⠄· ·⠅·⠁∘⠄·⢀∘ · ∘ ·⠐·⢁·⠐·⠄·⠄ ⠄·⠄·⠅·⠅·⠄·⠅·⠅∘⠄ ⢑· ·⢁∘⢐·⠐·⠔·⢐·⢀ ⠕· ·⠁·⠄·⠆·⡅· ·⠄│ +│⠑⢐⢑⢀⠐ ⠑⢀⢑ ⠕⠅⠁⠄⠁⠄⠁⠄⠁ ⠁⠁⠁⠅⡁ ⠑⠕⠁⢔⠁ ⠁⠐⠁⠐⢀⢀⢑ ⢑⢀⢑⢐⠁⢁⠑⠄⠕⢔⠁⠅⠑⠅⠅⠄⠅⠄⠃⠄⠁⠅⠁⠅⠑⠔⠐⠄⠑⢔⢁⢀⠁⢐⠁⢐⠑⠔⠑⢄⠑⢁⠔ ⢑⠁⠕⢁⠁ ⠁⠄⠁⠅⠃⠅⠃⠄⠁ │ +│·⢐· ·⢀·⢀· ·⠄· · · ·⠁·⠄ ⢀· · ·⢐·⠄ ⠐·⢀·⠐·⢐·⢀·⠐·⠄· ·⠄ ·⠅· ·⠁·⠄· ·⢀ ⢀·⠐· ·⠐·⢐·⢀· ·⠄ ⢐· ·⠂·⠁· · ·⠄·⢀│ +│⢀ ⠑⠐⢁·⠁⠐⠁ ⢑ ⠑ ⠑ ⠃ ⠁ ⠁⠂⠁ ⢁⢀⢁ ⢑⢐⠑ ⠐⠐⢑ ⢐⢐⢁ ⢁⠐⢑ ⢑⢀⠁ ⠃ ⠃ ⠃ ⠁ ⠃ ⠓ ⠁ ⠁⠐⠑ ⠁ ⢑ ⠑⢀⢁ ⠑⠐⠑ ⢁⢐ ⠁⢀⠑ ⠁⡀⠁ ⠁ ⠃ ⠁ │ +│·⢐ ⠐·⢐ ·⢀· · ⠄· ·⢀ ⢐·⢀ ⠐·⢐ ·⢀ ⠐·⢐ ⢐· ·⢀·⢐ ⡀· · · · ⠐·⢀· · ·⢀·⢀·⢐ ⢀· · · · │ +│⠁⢀⠁⢐⠑⢐ ⠐⠑⠐⠁⠔⠑⠄ ⠄⠃⠅⡁⠁⠁ ⠁ ⠁ ⠁ ⠑ ⠐⠐⢐ ⢑⢐⠑⢀⠁⢀⠑⢀⠁ ⢁ ⠑⠄ ⠁⡄⠃ ⠁⠄⠁ ⠗ ⠁⠐⠑⢀⢁⠐⢀ ⢑⢐⠁⢐⢐ ⢑ ⠑ ⠑ ⠑ ⠁ ⠁ ⠁⠄⠃⠄⠁ ⠑⠄│ +│∘⢐∘⢀∘⢐·⠑·⢀·⠄ ⠄ ⠄·⠁·⠄ ·⠄·⠄·⠕·⢀·⠄·⢀∘⠄· ·⢐·⢐∘⢔·⢄·⠐· ·⠁ ⠄·⡅·⠄·⠁·⠄· ·⠄·⢔· · ·⢐·⢀∘⢀·⢀·⢄∘⠔· ·⠄ ⠄ ⠅·⠄·⠅ ⠅·⠄│ +│⠁∘⠙⢀⢑·⢑ ⠁ ⠕⢕⠅ ⠅⠄⠅ ⠁⠄⠁·⠅⠄⠅ ⠑⠅⠅ ⠑ ⠁·⢁ ⠁·⢑ ⢑∘⠁⢔⠅∘⠑⠄⠁·⠕⠁⠁ ⠁⠅⠁ ⠁⠄⠁ ⠅⢄⠑·⠕⢔⠅∘⠄ ⠁∘⢑ ⠁·⠑⢄⢁·⠁⠄⠑·⠅⠅⠅· ⠃ ⠇⠄⠅·⠁⠅│ +│·⢐·⠴∘ ∘⠁·⠵∘⠕○⠄·⠅·⠅·⠅·⠁·⠅·⠄·⠄·⢅ ⢁·⠠·⠐∘⠘·⢠∘⠐∘⢀·⢄∘⢕○⠄·⠄·⠅·⠄·⠅·⠄·⠄·⠅○⠅∘⢄·⠐∘ ⠐○⢀∘⢀∘ ·⢄∘⠁·⠑·⢄·⠄·⠅·⠅·⠅·⠅·⠄│ +│⢁⢀⠁⠠⠁ ⠑⠄⠱⠄⠁⠄⠉⠅⠅ ⠁⠅⠅⠄⠅⠄⠅⠅⠁⠄⠁⠄⠁⠁⠁⠁ ⢵⠑⠐⠡⠔⠉⠠⠁ ⠙⠈⠁⠄⠁⠁⠁⠄⠁⠅⠅⠅⠁⠄⠁⠄⠅⠁⠅⠅⠅⢄⠅⠤⠍⠍⠉⢍⠙⠄⠘⠄⠡⠈⠡⠠⠁⢤⠁⠄⠍ ⠁⠄⠑⠄⠅ ⠅⠄⠁⠅⠁ ⠁⠄⠁⠄│ +│●⠠·⠠○⠉●⠅○⠅·⠅○⠁·⠅·⠅·⠅·⠅·⠄·⠄·⠄·⠅∘⠅·⠅○ ∘ ○ ·⠨○⠅·⠥○⠄·⠅·⠅·⠄·⠅ ⠄·⠄·⠅·⠄·⠥· ∘⠥· ∘ · ∘⠌∘⠉·⠅·⠅·⠅·⠅·⠅·⠄ ⠅ ⠄·⠅│ +│⠁●⠁⠠⠉∘⠁⠁⠁·⠉⠄⠅·⠅⠄⠅ ⠅⠅⠅ ⠅⠅⠁·⠅⠁⠅· ⠅⠉·⠁ ⠁·⠡⠠⠁·⠉⠅⠁∘⠅⠅⠁·⠅⠁⠁ ⠅⠄⠅ ⠅⠅⠅·⠅⠅⠅·⠅⠁⠅·⠉⠈ ∘⠉⠠⠁∘⠉ ⠁∘⠁ ⠅·⠁⠁⠅·⠁⠅⠅ ⠅⠅⠅ ⠅⠅│ +│· ·⠈∘⠄·⠅○⠄·⠥·⠅∘⠁·⠁·⠅·⠅·⠅· ∘⠅ ⠈· ·⠁○⠡● · ○⠄·⠄·⠁·⠍∘⠥·⠅ ⠅·⠁·⠄·⠄·⠄·⠅·⠁·⠅○⠅∘⠄·⠠○ ·⠈∘⠤· ○⠄·⠁∘⠅·⠅·⠅· ·⠅·⠄·⠁│ +│⠩⠠⠁⠨ ⠅⠅⠅⠁⠅⠅⠅⠅⠅⠁⠅⠁⠅⠅⠅⠅⠅⠁⠅⠅⠅⠁⠁⠁⠄⠅⠄⠁⠄⠩⠬⠁ ⠩⠤⠉⠄⠁⠄⠅⠥⠁⠄⠅⠅⠁⠄⠁⠄⠅⠅⠁⠅⠅⠄⠅⠅⠅⠄⠍⠉⠍⠩⠁ ⠁⠄⠁⠨⠨⠈⠁⠄⠍⠅⠉ ⠁⠄⠅⠅⠅⠅⠅⠄⠅⠅⠅⠅⠅⠅⠅⠅│ +│○ ∘ ⠈·⠤·⠁ ⠥·⠅·⠅ ⠁ ⠁ ⠅·⠄ ⠅·⠄ ⠁○⠅·⠭ ⠠·⠈· ·⠤· ∘⠍∘⠥∘⠄·⠅ ⠄·⠄ ⠅ ⠁·⠅∘⠅·⠁ ∘⠅●⠬·⠠∘⠨● ·⠄○⠤○⠤ ⠁·⠄·⠅ ⠅ ⠅·⠅·⠅│ +│ ∘⠈ ⠈∘⠁⠅⠍·⠄⠅⠁·⠅⠅⠅ ⠄⠅⠄ ⠅⠅⠄·⠅⠁⠁·⠅⠄⠁●⠁⢤⠈· ⠈⠉∘⠁⠈⠁∘⠁⠄⠁∘⠁⠅⠅·⠄⠅⠅ ⠁⠁⠁ ⠁⠅⠁ ⠉⠅⠕ ⠩⠤⠁ ⠈ ∘ ⠈⠁∘⠄⠤⠁∘ ⠄⠁·⠁⠅⠅ ⠅⠄⠅ ⠁ │ +│∘⠈·⢀· ·⠅·⠅·⠄·⠅·⠄ ⠅·⠅ ⠅· ⠁∘⠅·⢄○⢤○⠠∘ ∘⢘·⢀·⢠·⠅·⠄·⠅·⠁·⠅ ⠄·⠅·⠅·⠁·⠄·⠅· ·⠁○⢠● · ○ ●⢀∘⠄·⠅·⠅·⠄· ·⠄·⠅ ⠅·⠁·⠅│ +│⠈⢐⢈⠘⠉⢄⢉⠔⠁⠅⠁⠅⠁⠄⠅⠅⠅⠁⠁⠅⠁⠄⠁⠅⠁⠅⠁⠅⠁⠤⠵⠄⠁⢄⠑⠜⢙⠤⢙ ⠉⢀⠁⢅⠁⠕⠝⠕⠅⢁ ⠁⠁⠄⠅⠁⠁⠁⠅⠅⠅⠅⠅⠕⠅⠐⢅⠅⠑⠅⠉⢀⠱⢐⠑⢠⢐ ⠉ ⠑⠄⢑⠑⠁⠄⠕⠕⠅⠅⠅ ⠅⠅⠅⠄⠅⠄⠅⠅│ +│ ·⢀ ⠍∘⠁∘⢁∘⠄ ·⠄·⡁·⠅·⠅·⠅ ·⠁·⢄∘⢔·⠍∘⠐·⠐·⢐·⢀·⠔·⢀∘⢅·⠅ ⠄ ⠅·⠅·⠅·⠄·⠄∘⠄·⡄·⢄·⠐· ∘⢐∘⢀· ·⢐∘⢕·⠄ ⢄∘⠅·⠅·⠄ ⠁·⡅·⠄·⠄│ +│⠑·⢑⢀⢑·⢑⢀⠁·⠕⢔⠁·⠁⠁⠅ ⠅⠆⠅ ⠁⠅⠁ ⠁⠁·⠕⠐⠁·⠙⢄⠁·⠁⢀⠑ ⢁ ⠁·⠑⠁⠕·⠄⠄ ⠃⠅⠇ ⠁⠅⠁·⠁⢀⢑ ⠑⠔⢁∘⠁⢀⠑·⠑⢐⢑·⠁⢐⠑·⠁⠐⠁·⠁⢐⠁ ⠁⠄⠁ ⠁⠅⠁ ⠅⠅│ +│·⠐ ⢐· ⢐·⢀·⠔·⠁ ⠄·⠄ ⠄· ·⡄·⠄·⠐· ·⢀· ·⢐·⠐·⢐· ·⢀·⢀· ·⠅ · · ·⠁ ⠅· ⠐·⢔·⢐·⢐·⢐·⢀·⢀·⢀·⢄·⢄·⠔·⠕· ·⠁·⠁· ⠄· │ +│⢁ ⠑⢐⠑ ⠁⢀⠑⢀⢁ ⠁ ⠃⠄⠁⠄⠁ ⠁ ⠂⠁ ⢑⢀⠑⢀⠑⠐⠑⢐⠑⢀⢑⢀⢀⢐⠑⢀⢐ ⠑⠐⠐⢄⠓⣐⠁ ⠁ ⠁ ⠃⡀⠁ ⠁⠐⠑⢀⠑ ⢁⢀⠁ ⢑⢐⢑⠐⢁ ⢑⢐ ⢀⠁⢐⢑⢀⠁⢁⠁ ⠁⡀⠁⠄⠁ ⠁ ⠁ │ +│ ⠐·⢀ ⠐·⢐ ⢀· · · · · · ·⠐·⠐· · ·⢐· ·⢀·⢀·⢐·⢀· · · · ·⠂· ·⠐·⠐· ·⢐·⢐·⢀·⠐·⢐ ⢐ ⠐·⢀· · ⠂· · │ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_return_zoom_36x20.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_return_zoom_36x20.snap new file mode 100644 index 000000000..6fd85406b --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_return_zoom_36x20.snap @@ -0,0 +1,24 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +expression: terminal.backend().to_string() +--- +"⠩⠄⠉⠩⠩⠠⠈ ⠈ ⠄⠄⠍⠅⠅⠅⠅⠅⠁⠅⠁⠄⠅⠅⠁⠅⠅⠄ ⠅⠉⠅⠭⠅" +"· ∘⠄· · ○ ∘⠅●⠁·⠅∘ ⠁·⠄·⠅ ⠁·⠁·⠄·⠅∘⠅·⠍" +"⢁ ⠉⠁⠁∘⠉⢀⠉∘⠐⠄⠉·⠍⢀⠕ ⠕⠅⠁ ⠁⠅⠅ ⠁⠅⠅·⠅⠅⠅∘⠅⢕" +"●⢄·⠐·⢀·⠈· ·⢔∘⢅·⢅∘⠁·⠄·⠁ ⠁·⠅·⠅·⠄·⠅·⠄·⢅" +"⠁⢀⠑ ⠑ ⠐ ⠑⢐⠑⢁⠁⠐⠑⠄⠑ ⠁⠄⠅⠄⠁⠅⠁⠅⠁⠄⠅⠅⠅⢅⠁⠄⠅⢑" +"·⠐·⠐·⢀· ∘⢀·⢐·⢁·⠄·⢔ ⠅·⠅· ·⠄·⠄·⠅·⠅·⠕·⠄" +"⢑ ⠁⠐⢁ ⢑⠐⢐ ⠁⢀⠁·⠑⠄⠓ ⠁⠄⠁ ⠁⠅⠁ ⠁⠁⠁ ⠑·⠁⢀" +"·⢀·⠐·⢐ ⢐·⠐·⠐·⠐ ⢀·⢐ · · · · ·⢀· ⠐" +"⠑⢐⠁ ⠑⢀⢐⠐⢑⢐⠑⢐⠑ ⠑⢐⠁⢔ ⠁⡀⠁⠄⠃ ⠁ ⠁ ⠑ ⠑⠐" +" ⠐· ·⢐·⢀·⢀·⢀ · ⠄ · ⠄ ⠐ ⢀" +"⢀∘ ⠄⠐·⢀⢐ ·⠁⢔⠐·⢀⠐ · ⠁⠁·⠁⡅⠄ ⠁⠁·⠁ ⠁ ⠁⢔" +"·⠐∘ · ∘ ∘⠔·⢔∘⢅·⠄·⢅·⠁·⠅ ⠅·⠅· ·⠁·⢄·⠄·⢔" +"⠁⠠⠁⠐⢐⠘⠑⢠⠁⠐⠁⢀⠁⢄⠕⢕⠕⠄⠅⠄⠄⠅⠅⠄⠅⠄⠅⠄⠅⠄⠁⠅⠑⠅⠁⢄" +"·⢕·⠐○⠔○⠠· ·⠈·⠄·⠁·⠄ ⠅ ⠅·⠄·⠄·⠁·⠅·⢄∘⠤∘⠅" +"⠍· ⠁· ⠁●⠡⠅⠁○⠅⠄⠁·⠅⠅⠅·⠅⠅⠅ ⠅⠄⠁·⠁⠄⠅○⠅ " +"○⠁· ·⠈○⠠· ○⠅·⠅∘⠅·⠅·⠁ ⠁·⠄·⠄·⠅· ∘⠅○⠄·⠁" +"⠁⠁⠍⠠⠡ ⠉ ⠁⠄⠁⠄⠁⠁⠉⠍⠅⠥⠅⠅⠁⠅⠅⠁⠁⠄⠅⠄⠅⠄⠅⠅⠅⠁⠅⠅" +"∘⠄○⠄●⠬∘ ○⠤∘⠌· ∘⠥·⠄·⠅ ⠄·⠄·⠅·⠅·⠄·⠅·⠄·⠩" +"⠁○⠍⠠⠁·⠁ ⠉○⠉⠄⠍○⠉⠥⠅·⠅⠅⠁·⠅⠄⠁ ⠅⠅⠁·⠁⠅⠅·⠁ " +"·⢠∘⢤○⠄·⠨∘⠉○⠌∘⠄∘⠄·⠄ ⠅·⠅·⠅·⠅·⠁·⠅∘⠅∘⠅∘⠅" diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_100x34_ansi.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_100x34_ansi.snap new file mode 100644 index 000000000..d509caac7 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_100x34_ansi.snap @@ -0,0 +1,37 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│\x1b[48;2;10;15;12m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠅⢅⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠇⠄\x1b[38;2;31;52;39m⠁⠄⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄⠁⠄⠑\x1b[38;2;38;64;49m⠅⠁\x1b[38;2;31;52;39m⠄⠁⠄\x1b[38;2;38;64;49m⢁⢀⠑\x1b[39m \x1b[38;2;38;64;49m⢁⢐\x1b[38;2;31;52;39m⢁\x1b[39m \x1b[38;2;38;64;49m⢑⠑\x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢕\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠇⠅⠅\x1b[38;2;31;52;39m⠄⠁\x1b[39m \x1b[38;2;38;64;49m⠅⠅⠅⠕⢑⠄⠑⢤\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠑⢀\x1b[39m \x1b[38;2;38;64;49m⢰⠑⢐\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⢄\x1b[38;2;38;64;49m⠕⢄\x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠕⠅⠅⠄⠅\x1b[38;2;31;52;39m⠄⠅⠄\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅⠅⠁│ +│\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⢰\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠐∘\x1b[38;2;31;52;39m⢄\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;31;52;39m·⠄·⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠅·⠅·\x1b[38;2;38;64;49m⢅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m·⠄\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⢀\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠬\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠘\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢄\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠄·⠄·⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠐∘⢀·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠤∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄∘⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠄·⠅·\x1b[38;2;38;64;49m⠅│ +│\x1b[38;2;31;52;39m⠁·⠑\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⢤\x1b[38;2;38;64;49m⠍∘\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠥⠅\x1b[39m \x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠑⠄⠕·⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠁·\x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠅∘\x1b[38;2;31;52;39m⠅⠅⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠅⠁·⠅\x1b[38;2;38;64;49m⠅⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠕\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠑⠱\x1b[38;2;31;52;39m⠁·⠁\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠱\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;38;64;49m⠝·⠅⠅\x1b[38;2;31;52;39m⠁·⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄│ +│·\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠠\x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⠠\x1b[38;2;38;64;49m·⠍\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄·⠁·⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;60;102;76m●\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠠\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;60;102;76m○\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;38;64;49m∘⠅\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[39m \x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠡·⠅\x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠤\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠤\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁·⠅·⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄│ +│⠉⠠\x1b[39m \x1b[38;2;31;52;39m⠈⠡⠈⠁⠤⠁\x1b[38;2;38;64;49m⠍⠉⠅\x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠁⠅⠅⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠥\x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠁⠥⠅\x1b[38;2;31;52;39m⠅⠁⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁⠅⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠅⠅⠁⠅⠄\x1b[38;2;38;64;49m⠅⠅⠁⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;31;52;39m⠡\x1b[38;2;38;64;49m⠠\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠠\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠉\x1b[39m \x1b[38;2;38;64;49m⠅⠅⠅⠅\x1b[38;2;31;52;39m⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁│ +│\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m·⠨\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄·⠁·⠄·⠄\x1b[39m \x1b[38;2;38;64;49m⠅∘\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m·⠅·⠄·⠄·⠅·⠅·⠅\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m·⠈\x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⠈\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;31;52;39m·⠠·⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅·\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠁·⠅\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m○\x1b[38;2;38;64;49m⠥\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄\x1b[38;2;67;114;86m●\x1b[38;2;31;52;39m⠈\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠠\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠤·\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠥\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠄·⠄\x1b[39m \x1b[38;2;31;52;39m⠅·⠅│ +│⠁\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[39m \x1b[38;2;67;114;86m●\x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅⠄⠅\x1b[38;2;31;52;39m·⠅⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅⠅⠁·⠅⠄\x1b[38;2;38;64;49m⠅·\x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠤\x1b[38;2;38;64;49m⠥·\x1b[38;2;31;52;39m⠁⠌⠉\x1b[39m \x1b[38;2;31;52;39m⠡⠠\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠍⠅\x1b[38;2;31;52;39m⠁·⠁⠅⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅⠄⠁·⠁⠅⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m⠅⠉\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠈\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠍\x1b[38;2;31;52;39m⠉\x1b[39m \x1b[38;2;31;52;39m⠅⠁⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄⠁⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠁\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠁│ +│\x1b[38;2;60;102;76m●\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠠·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄·⠁\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠅·⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠅\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠉\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠠\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;45;77;58m○\x1b[38;2;31;52;39m⠈\x1b[38;2;60;102;76m●\x1b[39m \x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m∘⠅\x1b[38;2;31;52;39m·⠅·⠁·⠄\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;60;102;76m○\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⠅\x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m·⠁·⠅·⠅·⠄\x1b[39m \x1b[38;2;31;52;39m⠁·⠄\x1b[39m \x1b[38;2;31;52;39m⠁│ +│⠈⢀\x1b[39m \x1b[38;2;38;64;49m⠠\x1b[39m \x1b[38;2;31;52;39m⠉⢀\x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠄⠁⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠅⠅⠁⢅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠤\x1b[38;2;31;52;39m⠁⠄\x1b[39m \x1b[38;2;31;52;39m⢄⠈\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠄⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠄⠅\x1b[38;2;31;52;39m⠁⠅⠅⠅⠅\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠤\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠤\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠠⠁\x1b[38;2;38;64;49m⠠\x1b[38;2;31;52;39m⠠⠠⠁\x1b[39m \x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠅\x1b[38;2;38;64;49m⠅⠅⠄\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅⠅⠄⠁⠁│ +│\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;38;64;49m·⢈\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m·⠁\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠥\x1b[39m \x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·⢀·\x1b[38;2;38;64;49m⠈\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠔\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠉\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⢀\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢅∘⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅·⠄\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢕\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠈\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m⢤\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠐∘⢔\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·⠅·⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠅·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅│ +│\x1b[38;2;31;52;39m⠑\x1b[38;2;60;102;76m○\x1b[38;2;38;64;49m⠘\x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⢙∘⢑⢤⢅·⠕\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅⠅\x1b[39m \x1b[38;2;31;52;39m·⠁⠁\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠄⠅·\x1b[38;2;38;64;49m⠕⠄⠉\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢁⢄⢰\x1b[38;2;31;52;39m·⠁⠐⢀·\x1b[39m \x1b[38;2;38;64;49m⠈\x1b[38;2;31;52;39m⠐\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;38;64;49m⢔⠑\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢄⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m·⠁⠅⠅\x1b[38;2;38;64;49m·⠁\x1b[38;2;45;77;58m⢅\x1b[38;2;38;64;49m⠕·⢁⠔\x1b[38;2;31;52;39m⢁·⠁\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠐·⠑\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢄⢕\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢔\x1b[38;2;31;52;39m⠁⠁·\x1b[38;2;38;64;49m⠁⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅│ +│·\x1b[38;2;38;64;49m⢐\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⢀·⢐·⠑\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⢁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠁·⠅·⠄\x1b[39m \x1b[38;2;31;52;39m⠁·⠄·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢔\x1b[38;2;45;77;58m○\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠈\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;38;64;49m·⠐·⢁·⠐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠔\x1b[39m \x1b[38;2;38;64;49m⠅·⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;38;64;49m⢑·⢄\x1b[38;2;31;52;39m·⠁\x1b[38;2;38;64;49m·⠐\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢐·⢐\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⢀\x1b[39m \x1b[38;2;38;64;49m⠕∘\x1b[39m \x1b[38;2;31;52;39m·⠁·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⡅\x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄│ +│⠑⢐⢑\x1b[38;2;31;52;39m⢀⠐\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;38;64;49m⢁\x1b[39m \x1b[38;2;38;64;49m⠕⠅⠑⠄\x1b[38;2;31;52;39m⠁⠄⠁\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠑⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⢀⢀\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;31;52;39m⠑⢀\x1b[38;2;38;64;49m⢑⢐⢑⢄⠑⠔⠑⢔⠁\x1b[38;2;31;52;39m⠅⠑\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⡀\x1b[38;2;38;64;49m⠅⡄⠁⠄\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠁⠅\x1b[39m \x1b[38;2;38;64;49m⠔⠑⢔⢅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⢐⢑\x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⠑⢄⢑\x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠃⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠁│ +│\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⢀·⢀\x1b[39m \x1b[38;2;31;52;39m⢀·\x1b[38;2;38;64;49m⢄\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠁·⠄\x1b[39m \x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;31;52;39m⢀·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⠐·⢀\x1b[39m \x1b[38;2;31;52;39m⠐·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m·⠅\x1b[39m \x1b[38;2;31;52;39m·⠁·⠄·⢀\x1b[39m \x1b[38;2;31;52;39m·⠐\x1b[39m \x1b[38;2;31;52;39m⢀·⠐\x1b[39m \x1b[38;2;31;52;39m⠐·\x1b[39m \x1b[38;2;31;52;39m⠐·\x1b[39m \x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⡁│ +│\x1b[38;2;31;52;39m⢐\x1b[39m \x1b[38;2;31;52;39m⢑⠐⢁·⠁\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;38;64;49m⠃\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢀⢑\x1b[39m \x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m⢁\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⢐⢑\x1b[39m \x1b[38;2;38;64;49m⢑⢐\x1b[38;2;31;52;39m⠑·⢁⠐\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⢀⠑\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;38;64;49m⠃\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠐\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;31;52;39m⠁⢀\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;31;52;39m⠑⢀⢁\x1b[39m \x1b[38;2;31;52;39m⠁⠐⠑\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⠁⢀\x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⡀\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│\x1b[38;2;31;52;39m·⢀\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⡀\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·⠐\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;31;52;39m⢀·\x1b[39m \x1b[38;2;31;52;39m⠐·⢐\x1b[39m \x1b[38;2;31;52;39m⢀·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;24;39;30m·\x1b[38;2;38;64;49m⡀\x1b[38;2;31;52;39m·⡀·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢀\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⢀·\x1b[39m \x1b[38;2;31;52;39m·⢀·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⡀\x1b[39m │ +│\x1b[38;2;31;52;39m⠁⢀⠁⢀\x1b[38;2;38;64;49m⢑⢐\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m⢔⠑⠔\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠑⠄⠐\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠆\x1b[38;2;31;52;39m⠃\x1b[39m \x1b[38;2;38;64;49m⡁⠁\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁⠄\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;31;52;39m⠐⠐\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m⢑⢐⠑\x1b[39m \x1b[38;2;31;52;39m⢑⢀⠑\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m⠁⢀\x1b[38;2;38;64;49m⠑⠔\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢄\x1b[39m \x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠃\x1b[39m \x1b[38;2;31;52;39m⠃\x1b[39m \x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠇\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠑\x1b[38;2;38;64;49m⢐⢁\x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⢀⠁\x1b[38;2;38;64;49m⢐⢐\x1b[39m \x1b[38;2;31;52;39m⢑\x1b[39m \x1b[38;2;31;52;39m⠑⢀\x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠃\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠑⠄│ +│∘⠐∘\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⢐·\x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠄·⠄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢀\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄·\x1b[39m \x1b[38;2;31;52;39m·⠐\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠐\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⡅\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠐\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·⢐∘\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⢀·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⢀\x1b[38;2;38;64;49m·⢔\x1b[39m \x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠆\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m │ +│\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠑\x1b[38;2;31;52;39m⢀⠑·\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;31;52;39m⢁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠑⢔⢁\x1b[39m \x1b[38;2;38;64;49m⢁\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;38;64;49m⢑∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢔⠕\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁⠄⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠁⠁\x1b[39m \x1b[38;2;38;64;49m⠅⢄⠕\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠑⠔⠕·\x1b[38;2;31;52;39m⢄\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠑⢄⠑\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;38;64;49m⠑∘⠅⠔⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠇\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁│ +│·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠰∘\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m∘⠕∘⠔\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁·⠁·⠄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢁∘⠸·\x1b[38;2;31;52;39m⠐\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠜\x1b[39m \x1b[38;2;31;52;39m·⠐\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;38;64;49m∘⢄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢕\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠄·⠅·⠄·⠅·\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅∘⢄\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠐·\x1b[38;2;38;64;49m⠐\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m·⢸\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;38;64;49m∘⢄·⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠄\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠅·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄│ +│\x1b[38;2;38;64;49m⢁\x1b[38;2;31;52;39m⢀⠁⠠⠁\x1b[39m \x1b[38;2;38;64;49m⠑⠥\x1b[38;2;31;52;39m⠁⠄⠄\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠅⠅⠅⠄\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;38;64;49m⢕⠑\x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⠁⠔⠉\x1b[38;2;31;52;39m⠠⠁\x1b[39m \x1b[38;2;38;64;49m⠙⠌\x1b[38;2;31;52;39m⠙⠄⠁\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠄⠅⠁\x1b[38;2;38;64;49m⠅⠅⠅⢅⠅⠤⠍⠅⠉⢉⠙\x1b[38;2;31;52;39m⠄⠘⠄⠁\x1b[38;2;38;64;49m⠌\x1b[38;2;31;52;39m⠡⠠⠁\x1b[38;2;38;64;49m⢠\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠍\x1b[39m \x1b[38;2;31;52;39m⠅⠄⠑⠄⠁\x1b[39m \x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁⠄│ +│\x1b[38;2;67;114;86m●\x1b[38;2;31;52;39m⠠·\x1b[39m \x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⠉\x1b[38;2;67;114;86m●\x1b[38;2;38;64;49m⠄\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[38;2;38;64;49m·⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⢀·\x1b[38;2;38;64;49m⠠\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠍\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕∘\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠁\x1b[39m \x1b[38;2;31;52;39m⠄·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·⠄\x1b[38;2;45;77;58m∘⠵\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m∘⠈\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠈∘⠥\x1b[39m \x1b[38;2;38;64;49m⠅∘⠅·\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠄│ +│⠁\x1b[38;2;60;102;76m●\x1b[39m \x1b[38;2;38;64;49m⠨\x1b[39m \x1b[38;2;53;89;67m∘\x1b[38;2;31;52;39m⠠⠁\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠅\x1b[39m \x1b[38;2;31;52;39m⠄⠅\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠅⠁⠅\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m⠅⠉·\x1b[38;2;31;52;39m⠁⠠\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠠\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠩\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅⠅⠅·⠅\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠅⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠅⠅\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠅⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠉\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠅·\x1b[39m \x1b[38;2;31;52;39m⠅·⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠅│ +│·\x1b[39m \x1b[38;2;31;52;39m⠈\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠈\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅∘\x1b[38;2;31;52;39m⠅·⠄·⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁·⠅·⠅\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠅·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠡\x1b[38;2;67;114;86m●\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁·⠅·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠁\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠄\x1b[38;2;45;77;58m○\x1b[38;2;31;52;39m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;38;64;49m⠩\x1b[38;2;60;102;76m●\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠠\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m∘⠅\x1b[38;2;31;52;39m·⠅·⠅·⠄\x1b[39m \x1b[38;2;31;52;39m⠅·⠅·⠅│ +│⠁⠠\x1b[39m \x1b[38;2;38;64;49m⠨\x1b[39m \x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅⠅⠅⠅⠅⠁⠅⠅⠅⠅⠅⠁⠅⠁⠅⠁\x1b[39m \x1b[38;2;31;52;39m⠄⠄⠄⠁⠄\x1b[38;2;38;64;49m⠉⠬\x1b[39m \x1b[38;2;38;64;49m⠨\x1b[38;2;31;52;39m⠤⠈\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠁⠄⠄⠄⠅⠅⠁⠅⠄⠅⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠄⠍\x1b[38;2;38;64;49m⠉⠍⠡\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠨\x1b[38;2;31;52;39m⠨⠠⠁⠄\x1b[38;2;38;64;49m⠍\x1b[38;2;31;52;39m⠄⠍⠁\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠄⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠁⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄│ +│\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;38;64;49m⠨∘\x1b[38;2;31;52;39m⠤\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠥·\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁·⠅·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠠\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠈\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;38;64;49m∘⠬∘\x1b[38;2;31;52;39m⠄\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠬·⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠄·⠅·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅·\x1b[38;2;31;52;39m⠅·⠁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;67;114;86m●\x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠡·\x1b[38;2;31;52;39m⠠\x1b[38;2;60;102;76m○\x1b[39m \x1b[38;2;31;52;39m·⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠤\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠤·\x1b[38;2;38;64;49m⠅∘\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m·⠅\x1b[38;2;31;52;39m·⠅·⠅·⠅·⠅·⠅│ +│⠁\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠈\x1b[39m \x1b[38;2;31;52;39m⠈\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠑⠅⠍\x1b[38;2;31;52;39m·⠁⠁⠁\x1b[38;2;38;64;49m·⠅⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠁\x1b[38;2;38;64;49m·⠅⠄\x1b[38;2;31;52;39m⠁\x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢤\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠨⠉·⠡\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄·⠅\x1b[38;2;38;64;49m⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠅⠁\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠄⠁\x1b[39m \x1b[38;2;38;64;49m⠉⠅⠁\x1b[39m \x1b[38;2;38;64;49m⠩⠭⠡∘\x1b[38;2;31;52;39m⠁⠈\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠤⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄⠁·\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠁│ +│\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠈\x1b[38;2;38;64;49m·⢀\x1b[38;2;31;52;39m·⠄·\x1b[39m \x1b[38;2;38;64;49m·⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠄·⠅\x1b[39m \x1b[38;2;31;52;39m⠅·\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠅·⢄\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⢄\x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠤\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢘\x1b[38;2;31;52;39m·⢀·⢀\x1b[38;2;38;64;49m·⠅\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠅\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄·⠁\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⢤\x1b[38;2;60;102;76m●\x1b[39m \x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m∘⢄∘⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠄·⠄·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁·\x1b[38;2;38;64;49m⠅│ +│\x1b[39m \x1b[38;2;38;64;49m⢐⢈⠘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢤⢉⠔\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⠅⠑⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠁⠁\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁⠁⠁⠄⠁\x1b[38;2;38;64;49m⠅⠅⠅⠅⠥⠵\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠑⢄⠑⠝⠑\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⢙⠐⠉\x1b[38;2;31;52;39m⢀⢁\x1b[38;2;38;64;49m⢔⠁⠝⠕⠔\x1b[38;2;31;52;39m⠁⢀⠅⠁⠁⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠁⠅⠅\x1b[38;2;38;64;49m⠅⠅⠅⠅⠅⠅\x1b[39m \x1b[38;2;38;64;49m⢍\x1b[38;2;31;52;39m⠁⠑⠅\x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m⢅\x1b[38;2;38;64;49m⠱⢐\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢠⢐\x1b[39m \x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;38;64;49m⢑⠔⢑⠁\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠴⠕⠅⠅⠅⠅\x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠅│ +│\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢀·\x1b[38;2;38;64;49m⢌\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⢁∘\x1b[38;2;31;52;39m⠄·⠄·⠄·⠁·⠅·\x1b[38;2;38;64;49m⡄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m·⠁·\x1b[38;2;38;64;49m⢄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢄\x1b[38;2;31;52;39m·⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠐·⠐·⢀·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠔\x1b[38;2;31;52;39m·⢀\x1b[38;2;38;64;49m∘⢅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄·⠄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·⢐\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·⢐∘⢕∘⠕\x1b[39m \x1b[38;2;38;64;49m⢄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅·\x1b[38;2;45;77;58m⢅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄│ +│\x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m·⢑\x1b[38;2;31;52;39m⢀⠑\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m⢑\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠃\x1b[38;2;31;52;39m⠅⠁\x1b[39m \x1b[38;2;38;64;49m⠁⠑\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕⠐\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠙\x1b[38;2;31;52;39m⢄⢁·⠁⢀\x1b[38;2;38;64;49m⢑·\x1b[38;2;31;52;39m⢁\x1b[39m \x1b[38;2;38;64;49m⠁·⠑⢀⠕\x1b[39m \x1b[38;2;31;52;39m⠄⠄\x1b[39m \x1b[38;2;38;64;49m⠃\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠇\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁·⠅⢀\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;38;64;49m⠑⢕⠁∘\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑·⠁\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⢑\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m⠑·⠁\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠁⢐\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠇\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅│ +│·\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠔·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠆\x1b[39m \x1b[38;2;31;52;39m⠄·⠁·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢀·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐·⠐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠄·⢀·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[39m \x1b[38;2;31;52;39m⠐·\x1b[38;2;38;64;49m⢔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·⠐·⢀·⢀·\x1b[38;2;38;64;49m⢔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢄·⠔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠁·⠅·\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[39m │ +│\x1b[38;2;31;52;39m⢑\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠑⢐⢁⢀\x1b[38;2;38;64;49m⠑⢔\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠃⡄\x1b[38;2;31;52;39m⠁⠆⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢄⢑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢐⠑⢐\x1b[38;2;31;52;39m⠁⢐⢁⢀⢑⢐\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⢐⢐\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢔⠑⢐⠁\x1b[39m \x1b[38;2;31;52;39m⠁⡀\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⡀⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⠑⢀⠁\x1b[39m \x1b[38;2;31;52;39m⢁⢐⢑\x1b[38;2;38;64;49m⢐⢑⢐\x1b[38;2;31;52;39m⢁\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⢐\x1b[39m \x1b[38;2;31;52;39m⢀⠁\x1b[38;2;38;64;49m⢐⠑⢀\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢁⠁\x1b[39m \x1b[38;2;38;64;49m⠑⡂\x1b[38;2;31;52;39m⠁⠄⠁\x1b[38;2;38;64;49m⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│ \x1b[38;2;31;52;39m⠐·⢐\x1b[39m \x1b[38;2;31;52;39m⠐·\x1b[39m \x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠐\x1b[39m \x1b[38;2;31;52;39m⠐·⢀\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠐·\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⢀·⢀\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⠐·⠐\x1b[39m \x1b[38;2;31;52;39m⠐·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m⠂\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_100x34_text.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_100x34_text.snap new file mode 100644 index 000000000..68a3e90e3 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_100x34_text.snap @@ -0,0 +1,37 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│ ⠑ ⠑ ⠁⠑⢁⠄⠅⠄⠅⢅⠅⠁⠅⠅⠇⠄⠁⠄⠅⠅⠁⠄⠁⠄⠑⠅⠁⠄⠁⠄⢁⢀⠑ ⢁⢐⢁ ⢑⠑⠑ ⠁⢕⠁⠅⠄⠄⠁⠁⠅⠄⠇⠅⠅⠄⠁ ⠅⠅⠅⠕⢑⠄⠑⢤⠁⠄⠑⢀ ⢰⠑⢐⠁ ⠁⢄⠕⢄⠅⠄⠕⠅⠅⠄⠅⠄⠅⠄⠁⠁⠅⠅⠅⠁│ +│∘⠄·⢰·⠐∘⢄○ ·⠄·⠄·⠄·⠅·⠅·⠅· ·⠅·⠅·⢅·⠑·⠄○⢀∘⠬○⠘·⢀· ∘⢄∘ ∘⠄ ⠅·⠅·⠄ ·⠅·⠄·⠄·⠄·⠄∘⠄∘⠔·⠐∘⢀· ·⢀∘⠤∘ ·⠄∘⠁·⠅·⠅·⠅·⠄·⠅·⠅│ +│⠁·⠑ ∘⠑⢤⠍∘⠁ ⠅·⠅⠄⠅·⠁⠅⠅ ⠅⠅⠁·⠅⠅⠁·⠥⠅ ·⠁ ⠁∘⠁ ⠁∘⠑⠄⠕·⠅⠄⠁·⠅⠄⠅∘⠅⠅⠁ ⠁⠅⠁·⠅⠅⠁ ⠁⠄⠕○⠑⠱⠁·⠁ ⠁·⠱⠄⠑·⠑ ⠝·⠅⠅⠁·⠁⠅⠅ ⠅⠄⠅·⠅⠄│ +│· ○⠠○⠠·⠍∘⠄∘⠁∘⠄∘⠄·⠁·⠅ ⠄·⠅·⠅·⠅∘⠅·⠅∘⠄○ ● ○⠠○ ○ ∘ ∘⠅∘ ·⠄· ·⠅·⠅·⠅·⠅·⠅·⠡·⠅●⠤· · · · ∘⠤○⠁· ·⠅·⠄·⠅·⠅·⠁·⠅·⠄·⠄│ +│⠉⠠ ⠈⠡⠈⠁⠤⠁⠍⠉⠅⠅⠅⠅⠁⠁⠅⠅⠅⠅⠅⠅⠅⠅⠅⠁⠅⠅⠅⠅⠥⠅⠄⠉⠄⠁ ⠁⠄⠁⠁⠅⠁⠁⠥⠅⠅⠁⠅⠅⠄⠁⠅⠁⠅⠅⠅⠅⠁⠅⠄⠅⠅⠁⠅⠁ ⠉ ⠡⠠⠁⠠⠁ ⠄⠉ ⠅⠅⠅⠅⠁⠄⠁ ⠁⠄⠅⠄⠅⠅⠅⠁│ +│· ·⠨○⠄·⠁·⠄·⠄ ⠅∘⠅ ·⠅·⠄·⠄·⠅·⠅·⠅●⠅∘⠥·⠈○⠈○ ·⠠·⠄∘⠅○⠅∘⠅ ⠅· ·⠄·⠅·⠅·⠁·⠅∘⠄○⠥○⠄○⠄●⠈∘ ∘⠠·⠤· ○⠥∘⠄∘⠅·⠅·⠅·⠄·⠄ ⠅·⠅│ +│⠁ ⠉ ●⠉⠥⠄∘⠅⠄⠅·⠅⠄⠅·⠅⠅⠁·⠅⠄⠅·⠅⠅⠅ ⠁⠤⠥·⠁⠌⠉ ⠡⠠ ○⠁ ⠁∘⠍⠅⠁·⠁⠅⠁·⠁⠅⠅ ⠅⠅⠅·⠅⠄⠁·⠁⠅⠁∘⠉⠅⠉∘⠈ ⠉·⠁⠍⠉ ⠅⠁⠁○⠄⠁⠁·⠁⠅⠅ ⠅⠁⠅ ⠁⠁│ +│● ∘⠠· ∘ ·⠄·⠁○⠅·⠅·⠅ ⠁ ⠄ ⠅·⠅ ⠄·⠅·⠅○⠅○⠉●⠠∘ ○⠈● ●⠄∘⠅·⠅·⠁·⠄ ⠄·⠅ ⠅·⠅ ⠅∘⠅○⠅∘⠄○⠅· ∘ · ○⠁○⠅ ⠄∘ ·⠁·⠅·⠅·⠄ ⠁·⠄ ⠁│ +│⠈⢀ ⠠ ⠉⢀⠁ ⠄⠁⠁⠁ ⠁⠄⠁⠅⠅⠅⠅⠅⠁⠅⠅⠅⠁⢅⠁⠤⠁⠄ ⢄⠈ ⠐ ⠁ ⠄⠅⠅⠄ ⠁⠅⠄⠅⠁⠅⠅⠅⠅⠅ ⠅⠄⠅⠤⠅⠅⠅⠤⠁ ⠁⠠⠁⠠⠠⠠⠁ ⠉⠁⠅ ⠅⠄⠅⠄⠅⠅⠅⠄⠁⠅⠁⠅⠅⠄⠁⠁│ +│○ ·⢈∘ · ∘ ∘⠁∘⠁·⠄·⠅·⠅·⠅·⠅·⠄·⠅·⠄○⠕·⠁○⠥ ⠐·⢀·⠈∘⠔∘⠉○⢀∘⢅∘⠅·⠅·⠅·⠅·⠅·⠅·⠄ ⠁·⢕○⠄∘⢅∘⠄●⠈· ⢤·⠐∘⢔∘⠄·⠅·⠅·⠅·⠅·⠅·⠄·⠅│ +│⠑○⠘⠐⢙∘⢑⢤⢅·⠕⢀⠅·⠅⠅ ·⠁⠁⠅ ⠅⠄⠅·⠕⠄⠉·⢁⢄⢰·⠁⠐⢀· ⠈⠐∘ ⢔⠑○⠁⢄⠄·⠁ ⠁ ⠅⠁⠁ ⠁⠅⠅·⠁⠅⠅·⠁⢅⠕·⢁⠔⢁·⠁⢐⠐·⠑⢀ ⠁⢄⢕·⢔⠁⠁·⠁⠅⠅ ⠁⠅⠅·⠅⠅│ +│·⢐∘⢀·⢐·⠑∘⢁·⠅·⠄·⠁·⠅·⠄ ⠁·⠄·⠄·⠅·⠅∘⠄·⢔○ ∘⠈∘ ·⠐·⢁·⠐·⠄·⠔ ⠅·⠄·⠅·⠄·⠄·⠅·⠁·⠄ ⢑·⢄·⠁·⠐∘⢐·⢐ ⢐·⢀ ⠕∘ ·⠁·⠄·⠄·⡅·⠄ ·⠄│ +│⠑⢐⢑⢀⠐ ⠑ ⢁ ⠕⠅⠑⠄⠁⠄⠁⠄⠁ ⠁⠅⠅⠅⠁ ⠑⠕⠁⢐⠑⠄⠁ ⠑ ⢀⢀⢑ ⠑⢀⢑⢐⢑⢄⠑⠔⠑⢔⠁⠅⠑⠅⠅⡀⠅⡄⠁⠄⠁⠅⠁⠅⠁⠅ ⠔⠑⢔⢅ ⠁⢐⢁⢐⢑⠐⠑⢄⢑⢀ ⠁⢑⢁⠑⠁⠁ ⠁⠄⠅⠅⠃⠄⠁ ⠁⠁│ +│·⢐· ⢀·⢀ ⢀·⢄· · ⠁·⠄ ⢀· ⢀·⢀· ⠐ ⢀·⢐ ⠐·⢀ ⠐·⠄ ⢐·⠄ ·⠅ ·⠁·⠄·⢀ ·⠐ ⢀·⠐ ⠐· ⠐· ·⠄ ⢐·⢀ ·⠁ · ·⡁│ +│⢐ ⢑⠐⢁·⠁⠐⠑ ⠑ ⠑ ⠑ ⠃ ⠄⠁ ⠁ ⠁ ⠁⢀⢑ ⢁⢀⢁ ⠐⢐⢑ ⢑⢐⠑·⢁⠐⢑ ⢑⢀⠑ ⠁ ⠃ ⠁ ⠁ ⠁ ⠑ ⠁ ⠁⠐⢑ ⠁⢀⢑ ⠑⢀⢁ ⠁⠐⠑ ⠑⢐ ⠁⢀⠑ ⠁⡀⠁ ⠁ ⠁ ⠁ │ +│·⢀ ·⢐·⢐·⢐· · ⡀ ⠄· ·⢀ ⢐·⢀·⠐ ⠐ ⢀· ⠐·⢐ ⢀· ·⢐·⢀ ·⡀·⡀· · · · ·⢀ · ⢀· ·⢀·⢐ · · · ⠄·⡀ │ +│⠁⢀⠁⢀⢑⢐⢀⢔⠑⠔⠑⠄⠑⠄⠐ ⠁⠆⠃ ⡁⠁⠁ ⠁ ⠁⠄⠁⠄⢑ ⠐⠐⢐ ⢑⢐⠑ ⢑⢀⠑⢀⠁⢀⠑⠔⠁⢄ ⠁⠄⠃ ⠃ ⠁⠄⠇ ⠁⠄⠑⢐⢁⠐⢐ ⢑⢀⠁⢐⢐ ⢑ ⠑⢀⠑ ⠑ ⠑ ⠁ ⠁⠄⠃⠄⠁⠄⠑⠄│ +│∘⠐∘ ·⢐·⢑·⢀·⠄ ⠄·⠄· · ·⠄ ·⠕· · ·⢀∘⠄· ·⠐ ⢐·⢔·⢀·⠐ · ⠄·⡅ ·⠅·⠄· ·⠄·⠐ · ·⢐∘⢀∘⢀·⢐·⢀·⢔ ⠐·⠄ ⠄ ⠄·⠆·⠄ ⠅· │ +│⠁·⠑⢀⠑·⢑ ⢁ ⠁⠄⠅·⠅⠅⠅ ⠁ ⠁ ⠅⠅⠅·⠑⠁⠕·⠑⢔⢁ ⢁ ⠁·⢑ ⢑∘⠁⢔⠕∘⠁⠄⠁·⠁⠄⠁ ⠅⠅⠁ ⠁⠁⠁ ⠅⢄⠕·⠑⠔⠕·⢄ ⠁∘⠑ ⠁·⠑⢄⠑ ⢑ ⠑∘⠅⠔⠅· ⠁·⠇⠅⠅·⠅⠁│ +│·⢐·⠰∘ ○⠁∘⠕∘⠔∘⠅∘⠁·⠁·⠅·⠁·⠁·⠄· ·⢁·⢁∘⠸·⠐∘⠜ ·⠐∘ ∘⢄∘⢕∘⠄·⠄·⠅·⠄·⠅· ·⠄·⠅∘⠅∘⢄· ·⠐·⠐∘⢀·⢸∘ ∘⢄·⠁·⠄·⠄∘⠄·⠅·⠅·⠄·⠅·⠄│ +│⢁⢀⠁⠠⠁ ⠑⠥⠁⠄⠄ ⠁⠅⠁ ⠁⠄⠅⠅⠅⠄⠅⠅⠅⠅⠁⠅⠁⠁⠅ ⢕⠑⠐⠁⠔⠉⠠⠁ ⠙⠌⠙⠄⠁⠁⠁ ⠁⠅⠅⠅⠅⠅⠅⠄⠅⠁⠅⠅⠅⢅⠅⠤⠍⠅⠉⢉⠙⠄⠘⠄⠁⠌⠡⠠⠁⢠⠁⠄⠍ ⠅⠄⠑⠄⠁ ⠅⠅⠁⠄⠁ ⠁⠄⠁⠄│ +│●⠠· ○⠉●⠄●⠁·⠅○⠁·⠁·⠅·⠅·⠅·⠅·⠅· ·⠅∘⠅·⠅○ ∘⠄○⢀·⠠○⠍·⠕∘⠄·⠅·⠅·⠄·⠁ ⠄·⠅·⠅· ·⠁·⠄∘⠵· ⠐○ · ∘⠈∘⠈∘⠥ ⠅∘⠅·⠅·⠅·⠅ ⠅ ⠄·⠄│ +│⠁● ⠨ ∘⠠⠁ ·⠁ ⠅ ⠅⠄⠅ ⠄⠅⠅ ⠁⠅⠁ ⠅⠁⠅ ⠉⠅⠉·⠁⠠ ⠁⠠ ·⠩⠄⠁○⠅⠅⠅·⠅⠁⠁ ⠅⠄⠁ ⠅⠅⠅ ⠅⠅⠅·⠅⠁⠅·⠉ ⠁○⠁ ∘⠉ ∘⠁ ⠅· ⠅·⠁⠅⠅ ⠅⠅⠅ ⠅│ +│· ⠈∘⠈∘⠅∘⠅·⠄·⠅∘⠁·⠅·⠅·⠁ ⠅· ∘⠅· · ∘⠁∘⠡● ∘ ∘ · ∘⠁·⠅·⠅·⠅·⠅·⠁·⠄ ·⠄·⠅·⠄·⠄○⠅∘⠄ ⠩● · ○⠠∘ ∘⠅·⠁∘⠅·⠅·⠅·⠄ ⠅·⠅·⠅│ +│⠁⠠ ⠨ ⠁⠁⠅⠁⠅⠁⠅⠅⠅⠅⠅⠁⠅⠅⠅⠅⠅⠁⠅⠁⠅⠁ ⠄⠄⠄⠁⠄⠉⠬ ⠨⠤⠈ ⠁⠥⠁⠄⠅⠁⠁⠄⠄⠄⠅⠅⠁⠅⠄⠅⠅⠅ ⠄⠍⠉⠍⠡⠅ ⠁ ⠨⠨⠠⠁⠄⠍⠄⠍⠁⠁⠄⠅⠅⠅⠅⠅⠄⠅⠅⠅⠁⠅⠅⠅⠄│ +│∘⠄○ ⠨∘⠤·⠁·⠥·⠅·⠅·⠅·⠁·⠅·⠄·⠅·⠄ ⠁○⠅·⠉·⠠∘⠈∘ ∘⠬∘⠄○⠬·⠅∘⠄·⠅ ⠄·⠄·⠅·⠅·⠅∘⠅·⠅·⠁∘⠅●⠥·⠡·⠠○ ·⠄∘⠤∘⠤·⠅∘⠅·⠅·⠅·⠅·⠅·⠅·⠅│ +│⠁●⠈ ⠈○⠑⠅⠍·⠁⠁⠁·⠅⠅⠅ ⠅⠅⠅·⠅⠅⠅·⠅⠅⠁·⠅⠄⠁○⠁⢤ ∘⠁⠨⠉·⠡ ⠉∘⠁⠅⠁·⠅⠅⠄·⠅⠅⠅ ⠁⠅⠁ ⠁⠄⠁ ⠉⠅⠁ ⠩⠭⠡∘⠁⠈ · ⠅∘⠅⠤⠁○⠁⠄⠁·⠅⠅⠁ ⠅ ⠅ ⠁⠁│ +│∘⠈·⢀·⠄· ·⠁·⠅∘ ·⠅·⠄·⠄·⠅ ⠅· ⠁·⠅·⢄○⢄●⠤○ ·⢘·⢀·⢀·⠅ ⠄·⠅·⠅·⠅·⠅·⠁·⠅·⠅·⠄·⠅·⠄·⠁○⢤● ∘ ∘ ●⢀∘⢄∘⠅·⠅ ⠄·⠄·⠄·⠅ ⠅·⠁·⠅│ +│ ⢐⢈⠘⠁⢤⢉⠔⠑⠅⠑⠅⠁⠄⠁⠅⠁⠁⠁⠄⠁⠁⠁⠄⠁⠅⠅⠅⠅⠥⠵⠄⠑⢄⠑⠝⠑⠄⢙⠐⠉⢀⢁⢔⠁⠝⠕⠔⠁⢀⠅⠁⠁⠅⠅⠁⠁⠅⠅⠅⠅⠅⠅⠅⠅ ⢍⠁⠑⠅⠉⢅⠱⢐⠑⢠⢐ ⠉ ⢑⠔⢑⠁⠁⠴⠕⠅⠅⠅⠅⠅⠅⠅⠅ ⠅⠅⠅⠅│ +│· ·⢀·⢌∘⠁○⢁∘⠄·⠄·⠄·⠁·⠅·⡄·⠅ ·⠁·⢄∘⢄·⠄∘⠐·⠐·⢀· ·⠔·⢀∘⢅·⠅ ⠄·⠅·⠅·⠄·⠄·⠄·⠄∘⢅·⢐· ·⢐∘⢐· ·⢐∘⢕∘⠕ ⢄∘⠅·⢅·⠄ ⠁·⠅·⠅·⠄│ +│⠑ ⢑ ⢁·⢑⢀⠑·⢑⢐⠁ ⠁⠅⠅ ⠁⠄⠅ ⠃⠅⠁ ⠁⠑·⠕⠐⠁·⠙⢄⢁·⠁⢀⢑·⢁ ⠁·⠑⢀⠕ ⠄⠄ ⠃⠅⠇ ⠁⠅⠁·⠅⢀⢑ ⠑⢕⠁∘⠁ ⠑·⠁⢐⢑·⢀⢀⠑·⠁⠐⠁·⠁⢐⠁ ⠁ ⠁ ⠁⠇⠁ ⠅⠅│ +│·⠐·⢐· ·⢐·⢐·⠔· ·⠆ ⠄·⠁·⠅ ·⢐· ·⢀· ·⢐·⠐·⢐· ·⠄·⢀·⢐·⠕ · ·⠁ ⠁· ⠐·⢔·⢐·⢐·⢀·⠐·⢀·⢀·⢔·⢄·⠔·⠕· ·⠁·⠅· ·⠄· │ +│⢑ ⠑⢐⠑⢐⢁⢀⠑⢔⠁ ⠁ ⠃⡄⠁⠆⠁ ⠁ ⠁ ⠁ ⠑⢄⢑ ⠁⢐⠑⢐⠁⢐⢁⢀⢑⢐⠑⢐⢐ ⠁ ⢔⠑⢐⠁ ⠁⡀ ⠁ ⠁⡀⠁ ⠁ ⠑ ⠑⢀⠁ ⢁⢐⢑⢐⢑⢐⢁ ⠑⢐ ⢀⠁⢐⠑⢀⠁⢁⠁ ⠑⡂⠁⠄⠁⠄⠁ ⠁ │ +│ ⠐·⢐ ⠐· ⢀·⠐ ⠐·⢀ · · · ⠐· ⢐· ⢀·⢀ ⢐·⢀ · · · ⠐· ·⢐ ⠐·⠐ ⠐·⢐ ⢐ ⠐ ⢀· · ⠂· · │ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_36x20_ansi.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_36x20_ansi.snap new file mode 100644 index 000000000..11c427524 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_36x20_ansi.snap @@ -0,0 +1,23 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│\x1b[38;2;38;64;49m\x1b[48;2;10;15;12m⠩\x1b[38;2;31;52;39m⠅⠉\x1b[38;2;38;64;49m⠭⠩\x1b[38;2;31;52;39m⠠\x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠌\x1b[38;2;31;52;39m⠡\x1b[39m \x1b[38;2;31;52;39m⠥⠄\x1b[38;2;38;64;49m⠉⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠁⠁⠄⠁⠄\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠁⠅⠁⠅⠁⠅\x1b[38;2;38;64;49m⠉⠅⠭⠅│ +│\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⢌\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠐\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄·⠁\x1b[38;2;38;64;49m∘⠄\x1b[38;2;31;52;39m·⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[39m \x1b[38;2;38;64;49m·⠄·⠤·⠅│ +│\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠉⠡\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠉⢀⠉\x1b[38;2;38;64;49m·⠐\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;38;64;49m⠝\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠑⠅⠅\x1b[38;2;31;52;39m·⠁\x1b[38;2;38;64;49m⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅⠄⠅·⠅⢕│ +│\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⢄·⠐\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;38;64;49m⠈\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢥\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠁·⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠅·⠁\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m⢅│ +│\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢐⠑\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⠈⠐\x1b[39m \x1b[38;2;31;52;39m⠘\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢁\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠐⢑⠄⠁⠔\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅⠄⠅⠅\x1b[38;2;31;52;39m⠁⠄⠁⠄⠅\x1b[38;2;38;64;49m⠅⠅⠁⠁⠄⢅⢑│ +│\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·⢀\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⢀·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢅·⠔·⢔\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⡅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠔│ +│⢑\x1b[39m \x1b[38;2;31;52;39m⠁⠐⢁\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⢐⢐\x1b[39m \x1b[38;2;31;52;39m⠁⢀⢁·⠁\x1b[38;2;38;64;49m⠄⠑\x1b[39m \x1b[38;2;31;52;39m⠑⠄⠁\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠅⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠁·⠁⠐│ +│\x1b[39m \x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;31;52;39m⢐\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;31;52;39m⠐│ +│⠐\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⢀⠐\x1b[39m \x1b[38;2;31;52;39m⠐⠐\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⢐⠐⢀⠐\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;38;64;49m⡀\x1b[39m \x1b[38;2;31;52;39m⡀⠂\x1b[39m \x1b[38;2;38;64;49m⠐\x1b[39m \x1b[38;2;38;64;49m⠐\x1b[39m │ +│\x1b[38;2;31;52;39m·⠐\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·⢐·\x1b[39m \x1b[38;2;31;52;39m·⢀·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·⢀·\x1b[38;2;38;64;49m⠔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢄\x1b[39m \x1b[38;2;31;52;39m·⠄·⠄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐│ +│⢁·\x1b[39m \x1b[38;2;31;52;39m⠄⠐\x1b[39m \x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢔\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠁⡅\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;38;64;49m⠅⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠃\x1b[39m \x1b[38;2;31;52;39m⢁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠐│ +│·\x1b[38;2;31;52;39m⠔\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠐·\x1b[38;2;38;64;49m⢔\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢅\x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⢅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄\x1b[38;2;38;64;49m·⠅·⠔│ +│⠑⢸\x1b[38;2;31;52;39m⠅⠐\x1b[38;2;38;64;49m⢐⠜\x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⠁⠐⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢄⠕⢕⠑⠄\x1b[38;2;31;52;39m⠁⠄⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠅⠄⠅⠄⠁\x1b[38;2;38;64;49m⠅⠕⠅⠁⢄│ +│\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢕\x1b[38;2;31;52;39m·⠐\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠔\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠠·\x1b[39m \x1b[38;2;38;64;49m·⠈\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢅∘⠤\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅│ +│⠅\x1b[39m \x1b[38;2;31;52;39m⠁·⠁⢀⠉\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠍\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠅⠅⠅\x1b[38;2;31;52;39m·⠁⠁\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠅⠅·⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅⠄│ +│\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠍\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠠\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠠\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;60;102;76m○\x1b[38;2;38;64;49m⠄∘⠥\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠁·⠄·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁\x1b[38;2;38;64;49m·⠅\x1b[38;2;45;77;58m○\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠁│ +│⠁⠁\x1b[38;2;38;64;49m⠍⠥⠡\x1b[39m \x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠁⠉⠅\x1b[38;2;38;64;49m⠁⠥\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅⠁⠄\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠅⠅⠅\x1b[38;2;31;52;39m⠄⠅⠅│ +│\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠬\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⠤\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;38;64;49m∘⠥·\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁·⠄·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[39m \x1b[38;2;31;52;39m⠅·⠅·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠉│ +│\x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m∘\x1b[38;2;38;64;49m⠍⠠\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠉\x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m⠅⠅·\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠁│ +│\x1b[38;2;38;64;49m·⢬·⠤\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m∘⠨\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠈\x1b[38;2;60;102;76m○\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅∘⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠅·⠄\x1b[38;2;38;64;49m∘⠅·⠅│ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_36x20_text.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_36x20_text.snap new file mode 100644 index 000000000..bbf1e8093 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__muster_zoom_36x20_text.snap @@ -0,0 +1,23 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│⠩⠅⠉⠭⠩⠠⠉ ⠁⠌⠡ ⠥⠄⠉⠅⠁⠅⠅⠁⠁⠄⠁⠄⠅⠅⠁⠅⠁⠅⠁⠅⠉⠅⠭⠅│ +│∘⠄○⢌· ·⠐∘ ○⠁○ ∘⠅∘⠄·⠁∘⠄·⠁·⠅·⠅· ·⠄·⠤·⠅│ +│⠁·⠉⠡⠁∘⠉⢀⠉·⠐⠄⠑ ⠝⢀⠑·⠑⠅⠅·⠁⠅⠅ ⠁⠅⠅·⠅⠄⠅·⠅⢕│ +│●⢄·⠐∘⢀ ⠈· ·⢐∘⢥·⢄∘⠁· ·⠁·⠁·⠅·⠅·⠄·⠅·⠁·⢅│ +│⠁⢐⠑ ⢑⠈⠐ ⠘⠐⠑⢁⠁⠐⢑⠄⠁⠔⠁⠅⠅⠄⠅⠅⠁⠄⠁⠄⠅⠅⠅⠁⠁⠄⢅⢑│ +│· · ·⢀· ·⢀·⢐·⢅·⠔·⢔·⠅·⠅· ·⡅·⠄·⠅·⠅·⠅·⠔│ +│⢑ ⠁⠐⢁ ⢑⢐⢐ ⠁⢀⢁·⠁⠄⠑ ⠑⠄⠁ ⠁⠅⠁ ⠁⠁⠁ ⠁·⠁⠐│ +│ ⢀ ⢐ ⢀ ⢐·⠐ ⠐ ⢀ ⠐ ⠐│ +│⠐⢐ ⢀⠐ ⠐⠐⢐⢐⠐⢀⠐ ⠐⢐ ⢀ ⡀ ⡀⠂ ⠐ ⠐ │ +│·⠐· ·⢐· ·⢀·⢀·⢀·⠔·⢄ ·⠄·⠄· · ·⠄· · ·⢐│ +│⢁· ⠄⠐ ⢀⠐ ∘⠁⢔ ·⢁⠐⠑ ⠁·⠁⡅⠅ ⠅⠁·⠃ ⢁ ⠁⠐│ +│·⠔∘ · ∘ ∘⠐·⢔∘⢅·⠄·⢅·⠄·⠅ ⠅·⠅·⠁·⠅·⠄·⠅·⠔│ +│⠑⢸⠅⠐⢐⠜⠑ ⠁⠐⠁ ⠁⢄⠕⢕⠑⠄⠁⠄⠄⠅⠅⠄⠅⠅⠅⠄⠅⠄⠁⠅⠕⠅⠁⢄│ +│·⢕·⠐∘⠔○⠠· ·⠈ ⠄·⠁ ·⠅ ⠅·⠅ ⠄·⠁·⠅·⢅∘⠤·⠅│ +│⠅ ⠁·⠁⢀⠉●⠁⠍⠁∘⠁⠄⠁·⠅⠅⠅·⠁⠁⠅ ⠅⠅⠅·⠅ ⠁∘⠅⠄│ +│○⠍∘⠠∘ ○⠠· ○⠄∘⠥∘⠅∘⠄·⠁·⠁·⠄·⠅·⠅·⠁·⠅○⠄·⠁│ +│⠁⠁⠍⠥⠡ ⠉ ⠁⠄⠁ ⠁⠁⠉⠅⠁⠥⠁⠅⠁⠅⠅⠅⠁⠄⠅ ⠅⠄⠅⠅⠅⠄⠅⠅│ +│∘⠄○⠄○⠬· ○⠤○ ∘⠥·⠄·⠁·⠄·⠄·⠅·⠅ ⠅·⠅·⠄·⠉│ +│⠁∘⠍⠠⠁ ⠁ ⠉○⠁⠄⠅○⠉⠅⠅·⠁⠅⠁·⠅⠄⠅ ⠅⠅⠁·⠅⠅⠅ ⠁⠁│ +│·⢬·⠤○⠄∘⠨○⠈○ ·⠄·⠅·⠅·⠅∘⠅·⠅·⠅·⠅·⠅·⠄∘⠅·⠅│ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_braille_100x34_ansi.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_braille_100x34_ansi.snap new file mode 100644 index 000000000..cee7f9483 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_braille_100x34_ansi.snap @@ -0,0 +1,37 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│\x1b[38;2;45;77;58m\x1b[48;2;10;15;12m⢅⢥⢅⢥⢅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⢁\x1b[38;2;45;77;58m⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⢁\x1b[38;2;45;77;58m⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⢁\x1b[38;2;45;77;58m⢥⢅⢥⢅⢥⢅⢥⢅⢤⢅⢤⢅⢤⢅\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⢁\x1b[38;2;45;77;58m⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⢁\x1b[38;2;45;77;58m⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⢁\x1b[38;2;45;77;58m⢤│ +│⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝│ +│⢕⢥⢕⢥⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⢑\x1b[38;2;45;77;58m⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⢑\x1b[38;2;45;77;58m⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⢑\x1b[38;2;45;77;58m⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⢑\x1b[38;2;45;77;58m⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⢑\x1b[38;2;45;77;58m⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⢑\x1b[38;2;45;77;58m⢥│ +│⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝│ +│\x1b[38;2;38;64;49m⠑⠅⠑⠅⠑⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑\x1b[38;2;31;52;39m⠅⠁⠄⠑\x1b[38;2;38;64;49m⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑\x1b[38;2;31;52;39m⠅⠁⠄⠑\x1b[38;2;38;64;49m⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑\x1b[38;2;31;52;39m⠅⠁⠄⠑\x1b[38;2;38;64;49m⠅│ +│\x1b[38;2;31;52;39m⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁\x1b[39m │ +│\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;45;77;58m⢙\x1b[38;2;53;89;67m⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;45;77;58m⢙\x1b[38;2;53;89;67m⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;45;77;58m⢙\x1b[38;2;53;89;67m⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;45;77;58m⢙\x1b[38;2;53;89;67m⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;45;77;58m⢙\x1b[38;2;53;89;67m⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;45;77;58m⢙\x1b[38;2;53;89;67m⢽│ +│\x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑⠅│ +│\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;45;77;58m⢙\x1b[38;2;53;89;67m⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;45;77;58m⢙\x1b[38;2;53;89;67m⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;45;77;58m⢙\x1b[38;2;53;89;67m⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;45;77;58m⢙\x1b[38;2;53;89;67m⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;45;77;58m⢙\x1b[38;2;53;89;67m⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢙\x1b[38;2;53;89;67m⢽│ +│\x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑⠅│ +│\x1b[38;2;31;52;39m⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⢁\x1b[38;2;45;77;58m⢥⢅⢥⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⢁\x1b[38;2;45;77;58m⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⢁\x1b[38;2;45;77;58m⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⢁\x1b[38;2;45;77;58m⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢁\x1b[38;2;45;77;58m⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢁\x1b[38;2;45;77;58m⢤⢅\x1b[38;2;38;64;49m⢤⢅⢤⢅⢤│ +│\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝│ +│\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⢑\x1b[38;2;45;77;58m⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⢑\x1b[38;2;45;77;58m⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⢑\x1b[38;2;45;77;58m⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⢑\x1b[38;2;45;77;58m⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[38;2;45;77;58m⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[38;2;45;77;58m⢥⢕⢥⢕⢥⢕⢥│ +│\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠙\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝│ +│\x1b[38;2;31;52;39m⠁⠄⠑\x1b[38;2;38;64;49m⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑\x1b[38;2;31;52;39m⠅⠁⠄⠑\x1b[38;2;38;64;49m⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑\x1b[38;2;31;52;39m⠅⠁⠄⠑\x1b[38;2;38;64;49m⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑\x1b[38;2;31;52;39m⠅⠁⠄⠑\x1b[38;2;38;64;49m⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠁⠑\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⠁⠑⠁⠑⠁⠑⠁│ +│\x1b[38;2;31;52;39m⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;45;77;58m⢼\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;45;77;58m⢼\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;45;77;58m⢼\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;45;77;58m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m⢸\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢸\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽│ +│\x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅│ +│\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;45;77;58m⢼\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;45;77;58m⢼\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;45;77;58m⢼\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢸\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢸\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽│ +│\x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅│ +│\x1b[38;2;31;52;39m⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│\x1b[38;2;45;77;58m⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⢤\x1b[38;2;45;77;58m⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⢤\x1b[38;2;45;77;58m⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⢤\x1b[38;2;45;77;58m⢅⢤⢅⢤⢅⢤⢅⢤\x1b[38;2;38;64;49m⢅⢤⢅⢤⢅⢤⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢠⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢠⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤│ +│\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠜\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠜\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠜\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠘\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠘\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝│ +│⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⢤\x1b[38;2;45;77;58m⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⢤\x1b[38;2;45;77;58m⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢠\x1b[38;2;45;77;58m⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢠\x1b[38;2;45;77;58m⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢠\x1b[38;2;45;77;58m⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥│ +│⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠜\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠜\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠘\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠘\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠘\x1b[38;2;45;77;58m⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝│ +│\x1b[38;2;38;64;49m⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅\x1b[38;2;31;52;39m⠁⠄⠁⠄\x1b[38;2;38;64;49m⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠁⠑⠁\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁│ +│\x1b[38;2;31;52;39m⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;45;77;58m⢼\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;45;77;58m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢸\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢸\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢸\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢸\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;38;64;49m⠅\x1b[39m │ +│\x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[39m │ +│\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;45;77;58m⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;45;77;58m⢼\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢸\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢸\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢸\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢸\x1b[38;2;53;89;67m⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽\x1b[38;2;38;64;49m⠅\x1b[39m │ +│\x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅\x1b[39m │ +│\x1b[38;2;31;52;39m⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│\x1b[38;2;45;77;58m⢅⢤⢅⢤⢅\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⢁\x1b[38;2;45;77;58m⢤⢅⢤⢅⢤⢅⢤⢅\x1b[38;2;38;64;49m⢤⢅⢤⢅⢤⢅⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢁⢤│ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_braille_100x34_text.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_braille_100x34_text.snap new file mode 100644 index 000000000..093106e24 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_braille_100x34_text.snap @@ -0,0 +1,37 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│⢅⢥⢅⢥⢅⠅⠁⠅⢁⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⠅⠁⠅⢁⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⢥⢅⠅⠁⠅⢁⢥⢅⢥⢅⢥⢅⢥⢅⢤⢅⢤⢅⢤⢅⠄⠁⠄⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁⠄⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁⠄⢁⢤│ +│⠝⠝⠝⠝⠝⠅⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝│ +│⢕⢥⢕⢥⢕⠅⠁⠅⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠅⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠅⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠄⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠄⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠄⢑⢥│ +│⠝⠝⠝⠝⠝⠅⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝│ +│⠑⠅⠑⠅⠑⠅⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠑⠅│ +│⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁ │ +│⢝⢽⢝⢽⢝⠅⠁⠅⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠅⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠅⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠄⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠄⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠄⢙⢽│ +│⠕⠅⠕⠅⠕⠅⠁⠅⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠅⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠄⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠄⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠄⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁ ⠑⠅│ +│⢝⢽⢝⢽⢝⠅⠁⠅⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠄⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠄⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠄⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁⠄⢙⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⠅⠁ ⢙⢽│ +│⠕⠅⠕⠅⠕⠅⠁⠅⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠄⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠄⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠄⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁⠄⠑⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠁ ⠑⠅│ +│⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠅⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁ ⠁ ⠁ ⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁ ⠁ ⠁ ⠁ │ +│⠁⠅⢁⢥⢅⢥⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁⠄⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁⠄⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁⠄⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁ ⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁ ⢁⢤⢅⢤⢅⢤⢅⢤│ +│⠁⠅⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁ ⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁ ⠙⠝⠝⠝⠝⠝⠝⠝│ +│⠁⠄⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠄⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠄⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁⠄⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁ ⢑⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⠅⠁ ⢑⢥⢕⢥⢕⢥⢕⢥│ +│⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁⠄⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁ ⠙⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠁ ⠙⠝⠝⠝⠝⠝⠝⠝│ +│⠁⠄⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠁⠑⠁⠁ ⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠁ ⠑⠁⠑⠁⠑⠁⠑⠁│ +│⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ │ +│⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽│ +│⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅│ +│⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽│ +│⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅│ +│⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ │ +│⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠅⠄⠁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠅⠄⠁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠅⠄⠁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠅ ⠁⢠⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⠅ ⠁⢠⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤│ +│⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠄⠁⠜⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠄⠁⠜⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠄⠁⠜⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅ ⠁⠘⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅ ⠁⠘⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝│ +│⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠅⠄⠁⢤⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠅⠄⠁⢤⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠅ ⠁⢠⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠅ ⠁⢠⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥⠅ ⠁⢠⢕⢥⢕⢥⢕⢥⢕⢥⢕⢥│ +│⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠄⠁⠜⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅⠄⠁⠜⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅ ⠁⠘⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅ ⠁⠘⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝⠅ ⠁⠘⠝⠝⠝⠝⠝⠝⠝⠝⠝⠝│ +│⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠁⠄⠁⠄⠑⠅⠑⠅⠑⠅⠑⠅⠑⠅⠑⠁⠑⠁⠁ ⠁ ⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠁ ⠁ ⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠁ ⠁ ⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁⠁ ⠁ ⠑⠁⠑⠁⠑⠁⠑⠁⠑⠁│ +│⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ │ +│⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ │ +│⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ │ +│⢝⢽⢝⢽⢝⢽⢝⢽⠅⠄⠁⢼⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ ⠁⢸⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⢝⢽⠅ │ +│⠕⠅⠕⠅⠕⠅⠕⠅⠅⠄⠁⠄⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ ⠁ ⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠕⠅⠅ │ +│⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁⠄⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ ⠁ │ +│⢅⢤⢅⢤⢅⠄⠁⠄⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁ ⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁ ⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁ ⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁ ⢁⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⢤⢅⠄⠁ ⢁⢤│ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_dots_100x34_ansi.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_dots_100x34_ansi.snap new file mode 100644 index 000000000..5860e5352 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_dots_100x34_ansi.snap @@ -0,0 +1,37 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│\x1b[48;2;10;15;12m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘∘\x1b[38;2;53;89;67m∘∘∘\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·······\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;53;89;67m∘∘\x1b[38;2;60;102;76m○○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m·│ +│\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m····∘··\x1b[38;2;31;52;39m··\x1b[39m │ +│ │ +│\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m······\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·····\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m··\x1b[38;2;38;64;49m······│ +│··\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘\x1b[38;2;53;89;67m∘∘\x1b[38;2;45;77;58m∘·∘\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··\x1b[38;2;45;77;58m∘∘∘∘∘·\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m··\x1b[38;2;45;77;58m·∘∘∘∘∘│ +│∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○○\x1b[38;2;53;89;67m○○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘○\x1b[38;2;60;102;76m○○○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·∘\x1b[38;2;45;77;58m·∘\x1b[38;2;53;89;67m∘○○○\x1b[38;2;45;77;58m∘│ +│∘∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘○\x1b[38;2;60;102;76m○\x1b[38;2;67;114;86m●●\x1b[38;2;60;102;76m●○\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··\x1b[38;2;45;77;58m∘∘\x1b[38;2;53;89;67m∘∘○∘\x1b[38;2;45;77;58m∘│ +│∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m·∘∘○∘∘∘\x1b[38;2;38;64;49m∘·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m○\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○○●○\x1b[38;2;53;89;67m○∘\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··∘\x1b[38;2;45;77;58m∘∘∘∘·│ +│\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·│ +│\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ +│ \x1b[38;2;38;64;49m··∘\x1b[38;2;45;77;58m·∘·∘\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·····\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·····∘···\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘·∘·∘·\x1b[38;2;38;64;49m∘·\x1b[38;2;31;52;39m·│ +│·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;45;77;58m·○\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○○●\x1b[38;2;53;89;67m○○\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m···∘··\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·∘·\x1b[38;2;45;77;58m∘∘∘\x1b[38;2;38;64;49m·∘·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘∘○∘∘\x1b[38;2;38;64;49m·∘\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·∘\x1b[38;2;45;77;58m∘○\x1b[38;2;53;89;67m∘○∘\x1b[38;2;45;77;58m○∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·······\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m●○●○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·│ +│\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘∘\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○○○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m··\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··∘\x1b[38;2;45;77;58m·∘·\x1b[38;2;38;64;49m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m··\x1b[38;2;45;77;58m∘∘\x1b[38;2;53;89;67m○∘∘\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○\x1b[38;2;67;114;86m●●\x1b[38;2;60;102;76m●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m∘│ +│\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘\x1b[38;2;53;89;67m○∘○\x1b[38;2;45;77;58m∘∘·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘∘·\x1b[38;2;38;64;49m∘··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m··\x1b[38;2;38;64;49m··∘····\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m●\x1b[38;2;67;114;86m●●\x1b[38;2;60;102;76m○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m··\x1b[38;2;38;64;49m··\x1b[38;2;45;77;58m∘∘∘∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m··\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘○\x1b[38;2;60;102;76m○○\x1b[38;2;53;89;67m○○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·│ +│\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·∘·∘·∘··\x1b[39m \x1b[38;2;38;64;49m·······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○○○○\x1b[38;2;53;89;67m∘\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m·······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;45;77;58m∘∘∘∘·\x1b[38;2;38;64;49m∘·\x1b[38;2;31;52;39m·│ +│·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m····∘··\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ +│ │ +│\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m··\x1b[38;2;38;64;49m·····\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··\x1b[38;2;45;77;58m∘∘∘∘∘∘\x1b[38;2;38;64;49m∘·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ +│\x1b[38;2;45;77;58m·\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘∘∘∘·\x1b[38;2;38;64;49m··\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘∘\x1b[38;2;53;89;67m∘∘∘\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○●\x1b[38;2;67;114;86m●●\x1b[38;2;60;102;76m○○\x1b[38;2;53;89;67m∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘○∘∘\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m··│ +│\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m···\x1b[38;2;38;64;49m·····\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○●○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○\x1b[38;2;67;114;86m●●\x1b[38;2;60;102;76m●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m●●●○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·│ +│··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·····\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;45;77;58m·\x1b[38;2;53;89;67m○\x1b[38;2;67;114;86m○●●\x1b[38;2;60;102;76m●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m·\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○●\x1b[38;2;67;114;86m○\x1b[38;2;60;102;76m●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘∘\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘○\x1b[38;2;60;102;76m∘○\x1b[38;2;53;89;67m∘○\x1b[38;2;45;77;58m∘∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;45;77;58m·\x1b[38;2;53;89;67m○\x1b[38;2;67;114;86m○●●●\x1b[38;2;60;102;76m○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m∘│ +│\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m··\x1b[38;2;38;64;49m···\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m●●●○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m○∘○○○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘∘∘∘·\x1b[38;2;38;64;49m∘·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·│ +│\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m········\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·····\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m······\x1b[38;2;31;52;39m·\x1b[39m │ +│ \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m │ +│ \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ +│\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘·∘∘\x1b[38;2;38;64;49m∘··\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m·∘∘∘∘∘\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·····\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘○\x1b[38;2;53;89;67m∘○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘∘∘∘∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ +│\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘○∘○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;53;89;67m○○\x1b[38;2;60;102;76m○○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m·······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m·∘\x1b[38;2;53;89;67m∘○∘\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘○\x1b[38;2;60;102;76m○○○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ +│\x1b[38;2;31;52;39m···\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m●\x1b[38;2;67;114;86m●\x1b[38;2;60;102;76m●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·∘·\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·∘··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·∘\x1b[38;2;45;77;58m∘∘∘∘∘\x1b[38;2;38;64;49m∘·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○\x1b[38;2;67;114;86m●●●\x1b[38;2;60;102;76m○\x1b[38;2;53;89;67m○∘\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ +│ \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○\x1b[38;2;53;89;67m○∘\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘○∘○∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;38;64;49m·······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m······\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○\x1b[38;2;67;114;86m●\x1b[38;2;60;102;76m○○\x1b[38;2;53;89;67m∘\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m │ +│ \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m······\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·····\x1b[38;2;31;52;39m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m···∘·∘···\x1b[38;2;31;52;39m·\x1b[39m │ +│ │ +│ \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m···\x1b[38;2;31;52;39m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m·∘·∘·∘··\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·····\x1b[39m │ +│ \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m·∘·∘·\x1b[38;2;38;64;49m···\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m···∘\x1b[38;2;45;77;58m·∘\x1b[38;2;38;64;49m··\x1b[39m \x1b[38;2;38;64;49m·······\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m······\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m∘○∘○∘○\x1b[38;2;45;77;58m∘∘\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘∘∘∘∘·\x1b[38;2;38;64;49m··\x1b[38;2;31;52;39m·│ +│\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m·∘\x1b[38;2;53;89;67m∘○∘○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··∘·\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·∘·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··\x1b[38;2;45;77;58m∘∘∘∘∘\x1b[38;2;38;64;49m··\x1b[38;2;31;52;39m··\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m··∘·\x1b[38;2;45;77;58m∘·\x1b[38;2;38;64;49m∘·\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;45;77;58m∘\x1b[38;2;53;89;67m○\x1b[38;2;60;102;76m○\x1b[38;2;67;114;86m●○\x1b[38;2;60;102;76m●\x1b[38;2;53;89;67m○○\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;53;89;67m∘\x1b[38;2;60;102;76m○○●○\x1b[38;2;53;89;67m○\x1b[38;2;45;77;58m∘∘\x1b[38;2;38;64;49m·│ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_dots_100x34_text.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_dots_100x34_text.snap new file mode 100644 index 000000000..8d06d1e6f --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_dots_100x34_text.snap @@ -0,0 +1,37 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│ · · ··· · · · · ∘∘∘∘∘∘∘·· ········· ·∘∘○○○∘∘··│ +│ · · · · · ··· · · · · · ····∘···· │ +│ │ +│· ········· · · · · · · · ····· · · · · · · · ········│ +│·· ·∘∘∘∘∘·∘·· · · · ··∘∘∘∘∘·∘ · ····∘∘∘∘∘│ +│∘·· ∘∘○○○○○∘∘·· · · · · · ··∘∘○○○○○∘· · · · · · · · ··∘·∘∘○○○∘│ +│∘∘ ··∘∘○○○∘∘·· · · · · ∘∘○○●●●○○·· · · · · · ··∘∘∘∘○∘∘│ +│∘·· ··∘∘○∘∘∘∘·· · · · · · ··○○○○●○○∘∘ · · · · · · · · · · · ··∘∘∘∘∘·│ +│ · · · · · ······· · · ·│ +│ · · · · · · │ +│ ··∘·∘·∘·· · · · · ····· · · ··· · ······∘···· · · ··∘·∘·∘·∘··│ +│· · ··○○○○●○○∘· ····∘···· ··∘·∘∘∘·∘·· ·∘∘∘○∘∘·∘·· ··∘∘○∘○∘○∘· · · ······· ∘∘●○●○○∘∘·│ +│ · ∘∘○○○○○∘∘· ··∘···· · ··∘·∘···· ··∘○○○○∘∘·· ··∘∘○∘∘∘∘· · ··· · ··○○●●●○○∘∘│ +│· · ··∘∘○∘○∘∘·· ··∘∘∘·∘·· · ····∘······ ∘∘●●●○○∘∘·· ····∘∘∘∘∘·· · ····· · ∘∘○○○○○∘∘·│ +│ · ··∘·∘·∘·· ······· · · · · · ··○○○○○∘∘·· ······· · · · ∘∘∘∘∘·∘··│ +│· · · · · · · · · · · · ····∘···· · · · · · · · · · · │ +│ │ +│· · · · · · ··· · ······· · ··∘∘∘∘∘∘∘·· ······· · │ +│·· · · · · ·∘∘∘∘∘···· ∘∘∘∘∘∘∘·· ·∘○●●●○○∘∘· ··∘∘○∘∘∘∘··│ +│∘·· ········· ∘∘○○●○○∘∘·· ·∘○○●○○∘∘·· · · · · · · · · ∘∘○○●●●○○∘· ·∘○●●●○○∘∘·│ +│·· · ····· ··○○●●●○○·· ·∘○●○●○○∘∘ ∘∘○∘○∘○∘∘ ··○○●●●○○∘∘│ +│· · ······· ∘∘●●●○○∘∘·· ·∘○∘○○○∘∘·· · · · ··∘∘∘∘∘·∘·· ∘∘○○●○○∘∘·│ +│ · ········ · ······· · · ······· │ +│ · · · │ +│ · · · ··· · · · · ······· · · · │ +│· · ··∘·∘∘∘·· ··∘∘∘∘∘·· · · ····· · · · ··· · ··∘∘○∘○∘∘·· ··∘∘∘∘∘∘∘·· · · · │ +│·· ··∘∘○∘○∘∘·· ··○○○○○∘∘·· ······· · · · · · ··∘∘○∘∘·∘·· ·∘∘○○○○○∘∘· · │ +│··· ∘∘○○●○○∘∘·· ∘∘●●●○○∘∘·· ··∘·∘·∘·· · · · · · · · ··∘∘∘∘∘∘∘·· ∘∘○○●●●○○∘∘ · · · · │ +│ · ·∘∘○○○∘∘·· ··∘∘○∘○∘∘·· ······· · · · ······· ∘∘○○●○○∘∘·· │ +│ · ········· · ········· · · · · · · · · · ····∘·∘···· │ +│ │ +│ · ······· · · · ······· · · · · · · · · · ··∘·∘·∘···· · ····· │ +│ ··∘·∘···· ····∘·∘·· ······· · ······· ∘∘○∘○∘○∘∘ ·∘∘∘∘∘····│ +│ ··∘∘○∘○∘∘·· · ··∘·∘·∘·· ··∘∘∘∘∘···· · ··∘·∘·∘·· ·∘○○●○●○○∘· ∘∘○○●○○∘∘·│ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_return_zoom_100x34.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_return_zoom_100x34.snap new file mode 100644 index 000000000..f28814ff0 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_return_zoom_100x34.snap @@ -0,0 +1,38 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +expression: terminal.backend().to_string() +--- +"⢀ ⢐⢐⢐ ⠁⠑⢁⠄⠄⠕⠅⢄⠄ ⠅⠅⠅⠅⠁⠄⠅⠄⠁⠅⠁⠅⠐⠁⠁⠄⢑⠅⢁⢀⠁ ⠐⠐⢀ ⢑⢁⠁ ⠁⠅⠅⠅⠅⠄⠁⠅⠅ ⠇⠅⠁⠅⠁ ⠁⠅⠅⠔⢁⠔⠑⢤ ⠄⠐⢀⠠⢰ ⠐ ⠄⠕⢅⠅⠄⠅⠅⠅⠅⠄⠄⠅⠄⠅⠁⠅⠅⠅⠁" +"○ ·⢰∘ ·⢄∘⠅· ·⠄·⠅·⠅·⠅ ⠅ ·⠄·⠅·⢅·⠐·⠄○⢀○⠬○⠐·⢀·⠐∘⢄∘⠅∘⠄·⠅·⠅·⠅ ⠅ ⠅·⠄·⠄·⠔∘⠄·⠐·⠐·⢀∘⠠·⢀·⠄·⠄ ⠄∘⠁·⠅·⠄ ⠅ ⠄·⠅· " +"⠡·⠁ ⠈·⠅⠄⠉·⠅⠅⠅·⠅⠄⠅·⠁⠄⠅ ⠁⠅⠁·⠁⠅⠁·⠥⠄⠁·⠁ ⠁○⠁ ○⠑⠤⠝∘⠅⠄⠁·⠅⠅⠅·⠅⠅⠁ ⠅ ⠁·⠅⠅⠁·⠁⠄⠕∘⢑⠠⠉·⠁ ⠈·⠑⠄⠅·⠑⠁⠝·⠅⠅⠁·⠁⠅⠅ ⠅⠄⠅·⠅⠄" +"· ○ ∘⠠·⠅●⠅·⠅∘⠄∘⠄·⠁ ⠅·⠅·⠄·⠅·⠅∘⠅∘⠅○⠅○ ○ ○ ○ ○⠡·⠄·⠄· ·⠅·⠄ ⠅·⠅ ⠅·⠄·⠅·⠅∘⠅●⠤ · ∘ ∘ ●⠅○⠅·⠅·⠅·⠄·⠁·⠅· ⠄·⠄·⠄" +"⠉ ⠁ ⠠⠈⠉⠤⠁⠍⠁⠅⠅⠅⠅⠁⠁⠄⠅⠅⠁⠅⠅⠅⠅⠅⠅⠅⠅⠄⠁⠥⠅⠄⠁⠄⠡ ⠁ ⠄⠁⠄⠉⠤⠅⠅⠅⠅⠁⠄⠁⠅⠅⠄⠅⠅⠁⠅⠅⠅⠅⠄⠅⠥⠅⠅⠥⠅⠁ ⠩ ⠡⠠ ⠨⠉⠨⠁⠌⠉⠅⠅⠅⠅⠄⠁⠄⠁ ⠁⠄⠅⠁⠅⠅⠅⠄" +"∘⠈○ ●⠤·⠁∘ ·⠄·⠅∘⠅ ⠁·⠁ ⠄·⠅ ·⠁∘⠅●⠅○⠤·⠈∘⠈· ⠠∘⠌·⠅∘⠁∘⠅·⠄ ⠅ ⠄ ⠅·⠄ ⠅·⠅·⠄∘⠥∘⠄∘⠄●⠈· · ·⠤· ∘⠥∘⠄∘⠄·⠅·⠅ ⠅·⠅ ⠅·⠄" +"⠁·⠁⠄ ○⠁⠤⠅∘⠅⠅⠅·⠅⠄⠅·⠅⠅⠁·⠄⠄⠅·⠅⠅⠅ ⠁⠄⠅·⠁⠌⠉·⠡⠠ ∘ ⠬⠁∘⠍⠅⠅·⠁⠅⠅·⠁⠅⠅·⠅⠅⠅·⠅⠄⠅·⠅⠅⠁○⠉⠁⠉·⠁ ⠈ ⠥⠁·⠁⠁⠁○⠅⠁⠅·⠁⠁⠅ ⠁⠁⠅·⠁ " +"● ·⠤· ·⠈∘⠄·⠁∘⠅·⠅·⠁ ⠁·⠁·⠅·⠅·⠄·⠅·⠅○⠅∘⠩●⠠∘ ○⠈○ ○⠄○⠅∘⠅·⠅·⠅·⠅·⠅·⠅·⠄·⠅∘⠅●⠅· ●⠅· ∘ · ○⠁∘⠅·⠄∘⠁·⠅·⠅·⠅·⠄ ⠅·⠅·⠅" +"⠉⢀⠉⠠ ⠉⢅⠕⠄⠁⠄⠁⠅⠁⠁⠅⠅⠅⠅⠅⠅⠄⠅⠁⠅⠅⠅⠡⢅⠁⠌⠁ ⠁⠄⢁ ⢁ ⠐ ⠁⠅⠥⠁⠅⠅⠅ ⠁⠁⠅⠄⠅⠅⠅⠅⠅⠁⠅⠄⠅⠅⠅⠥⠅⠍⠁⠤⠁⠄⠁⠈⠉ ⠠ ⠁⠁⢁⠅⠅⠅⠅⠔⠅⠄⠕⠅⠅⠅⠅⠅⠁⠁⠅⠄⠁⠅" +"∘⠐·⢈∘⠁ ⢀·⢄·⠅·⠅·⠅·⠅·⠅ ⠅·⠅ ·⠅ ∘⠕·⠁∘⠁·⠐·⢀· ∘⠄·⠉∘⢀∘⠁∘⠅·⠅·⠅ ⠅ ⠅·⠅·⠅·⢕·⢕∘⠄∘⢁∘ ●⠘ ·⢅·⠔∘⢔∘⠅·⠄·⠅·⠅·⠅ ⠁·⠄·⠅" +"⠐○⠙⠐⠑·⢑⢄⠅·⠅⢄⠅·⠅⠅⠁ ⠁⠁⠅ ⠄ ⠁ ⠕⠄⠙ ⢁⢄⠱·⠁⠐ ⠈ · ⠔⠐∘⠁⢁⠄ ⠁⠄⠁ ⠁ ⠁⠅⠅·⠅⠅⠁·⠑⢅⠑·⢁⢐⢀ ⠐⠐ ⢁ ⠑⢄⠄ ⢕⠁⠁ ⠁⠅⠅ ⠁⠅⠅·⠅⠁" +"·⢐∘ ·⢄·⠑·⢀·⠅·⠄·⠁·⠅·⠅·⠁·⠄· ·⠅·⠁∘⠄·⢀∘ · ∘ ·⢐·⢁·⠐·⠄·⠄·⠄·⠄·⠅·⠄·⠄·⠅·⢅∘⠄·⢑·⢀·⢄∘⢐·⠐·⠄·⢐·⢄·⠕· ·⠁·⠄·⠆·⡅· · ·⠄" +"⠑⢐⢐⢀⠑ ⠑ ⢑ ⠕⠅⠁⠄⠁⠄⠁⠅⠁ ⠁⠁⠁⠅⠁ ⠑⠕⠁⢐⠁ ⠁⠐⠁⠐⢁⢀⢐ ⢑⢀⢑⢐⠁⢁⠑⠄⠕⢔⠁⠅⠑⠅⠅ ⠅⠄⠃⠄⠁⠅⠁⠅⠑⠕⢑⠄⠑⠔⢁⢀⠁⢐ ⢀⠑⠐⠑⢔⠑⢁⠕⠑⢑⠁⠕⢁⠁ ⠁⠄⠁⠄⠃⠅⠃⠄⠁⠁" +"·⢐· ·⢀·⢀· ·⠄· · ·⠄· ·⠄·⢀· · ·⢐·⠄·⠐·⢀·⠐·⢐·⢀·⠐·⠄· ·⠄·⠄· ·⠁·⢄· · ·⢀·⢀·⠐· · ·⢐·⢀·⢀·⠄·⢐·⢀·⠂· ·⠄·⠄·⢀" +"⢁ ⠐⠐⢁ ⠁⠐⠁ ⢑⠐⠑ ⠑ ⠃ ⠃ ⠁⠂⠁ ⢁⢀⢁ ⢑⢐⠑ ⠑⠐⢑ ⢐⢐⢁ ⢁⠐⢑ ⢑⢀⠁ ⠁ ⠃ ⠃ ⠂ ⠁ ⠃ ⠓⠐⠁ ⠁⠐⠑ ⠁ ⢑ ⠐⢀⢁ ⠑⠐⠑ ⢁⢐⠁ ⠁⢀⠑ ⠁⡀ ⠁ ⠃ ⠁ " +"·⢐ ·⢐ ·⢀ · · ⠄· ·⢀ ⢐·⢀ ⠐·⢐ ·⢀ ⠐·⢐ ⢀· ·⢀·⢀ ·⡀ · · · ⠐·⢀ · ·⢀ ⢀·⢐ · · · · " +" ⢀ ⢐⠐⢐ ⠐⠑⠐⠁⠐⠑⠄ ⠄⠃ ⠁ ⠁ ⠁ ⠑ ⠑⠐⢐ ⢐⢐⠐⢀ ⢀⠐⢀ ⠁⠄⠁ ⠁⠄⠁ ⠓ ⠐⠐⢀⢀⠐⢀ ⢐⢐⠁⢐⢐ ⢐ ⠑ ⠐ ⠐ ⠄ ⠄⠁ ⠑⠄" +"∘⢐∘⢀∘⢐·⠑·⢄·⠄ ⠄·⠄·⠁·⠄· ·⠄·⠄·⠕·⢀·⠄·⢐∘⠄∘ ·⢐·⢐∘⢔·⢄·⠐ ·⠁·⠄·⡅·⠄·⠁·⠅· ·⠄·⢔·⠔·⢀·⢐·⢀∘⢀·⢀·⢄∘⠔ ∘⠄·⠅·⠅·⠄·⠅·⠅·⠄" +"⠁·⠙⢀⢑·⢑ ⠁ ⠕⢕⠅ ⠅⠄⠅ ⠁⠄⠁ ⠅⠄⠅ ⠑⠄⠅ ⠑ ⠑·⢁ ⠁·⢑ ⢑∘⠁⢔⠅∘⠑⠄ ·⠕⠁⠁ ⠁⠁⠁ ⠁ ⠁ ⠅⢄⠁·⠕⢔ ∘⠅ ⠁∘⢑ ⠁·⠑⢄⢁·⠁ ⠁·⠅⠅⠅·⠁ ⠃ ⠇⠄⠅ ⠁⠁" +"·⢐·⢴∘ ∘⠁·⢵∘⠕○⠄·⠅·⠅·⠅·⠅·⠅·⠄·⠄·⢅ ⢁·⠠·⠐∘⠘·⢠∘⠔∘⢀·⢄∘⢕○⠄·⠄·⠅·⠄·⠅·⠄·⠄·⠅○⠅∘⢄·⠐∘⠄·⠐○⢀∘⢐∘ ·⢄∘⠁·⠑·⢄·⠄·⠅·⠅·⠅·⠅·⠄" +"⢁⢀⠁ ⠁⠄⠑⠄⠱⠄⠅⠄⠁⠅⠅ ⠁⠅⠅⠄⠅⠄⠅⠅⠁⠄⠁⠄⠁⠁⠁⠁ ⢵⠑⠐⠡⠔⠉⠠⠁ ⠙⠈⠁⠄⠁⠁⠁⠄⠁⠅⠅⠅⠁⠄⠁⠄⠅⠁⠅⠅⠅⢄⠅⠤⠍⠍⠉⢍⠙⠄⠙⠄⠡⠈⠡⠠⠁⢠⠁⠄⠍ ⠁ ⠑⠄⠅ ⠅⠄⠁⠅⠁⠄⠁⠄⠁⠄" +"●⠠ ∘⠁●⠅○⠅ ⠅○⠁·⠅ ⠅ ⠅ ⠅ ⠄·⠄ ·⠅∘⠅·⠅○ ∘ ○ ⠨○⠅ ⠥○⠄ ⠅·⠅·⠄·⠁ ⠄ ⠄·⠅· ·⠅ ∘⠥ ∘ · ∘⠈∘⠈·⠅ ⠅·⠅·⠅·⠅ ⠄·⠅ ⠄·⠅" +"⠁● ⠤⠈○ ⠅⠁·⠉⠄⠅ ⠅⠄⠅·⠅⠅⠅ ⠅⠅⠁·⠅⠁⠅·⠈⠅⠉·⠁ ·⠠⠠ ·⠉⠅⠁∘⠅⠅⠁·⠅⠁⠁·⠅⠄⠄·⠅⠅⠅·⠅⠅⠅·⠅ ⠅·⠉⠈ ∘⠉⠠ ∘⠉ ∘⠁⠄⠅·⠁⠁⠅·⠅⠅⠅·⠅⠅⠅·⠄⠅" +"· ·⠈∘⠄·⠅○⠄·⠅·⠅∘⠁·⠁·⠅·⠅·⠅· ∘⠅·⠈· ·⠁○⠡● · ○⠄ ·⠁ ⠍·⠅·⠅·⠅·⠁·⠄ ·⠄·⠅·⠁·⠁∘⠅∘⠄·⠩○ ·⠈∘⠤· ○⠄· ·⠅·⠅·⠅· ·⠅·⠄·⠅" +"⠩⠠⠁⠬⠁ ⠁⠅⠅⠅⠁⠅⠅⠅⠅⠁⠁⠅⠁⠅⠅⠅⠅⠅⠁⠅⠅⠅⠁⠁⠁⠄⠅⠄⠁⠄⠡⠬⠁ ⠩⠤⠉⠌⠁⠄⠅⠥⠁⠄⠅⠅⠁⠄⠁⠄⠅⠅⠁⠅⠅⠄⠅⠅⠅⠄⠍⠉⠅⠩⠁ ⠁⠄⠁⠨⠩⠨⠁⠤⠅⠄⠉ ⠁⠄⠅⠅⠅⠅⠅⠄⠅⠅⠅⠅⠅⠅⠅⠅" +"○ ∘⠈·⠍·⠤∘⠁·⠥·⠅·⠅·⠁·⠁ ⠅·⠄·⠅·⠄ ⠁○⠅·⠭·⠠·⠈· ·⠭· ∘⠍∘⠥∘⠄·⠅ ⠄·⠄ ⠅·⠅·⠅∘⠅·⠅· ∘⠅●⠬·⠡∘⠨● ·⠄○⠤○⠤·⠁·⠄·⠅·⠅ ·⠅·⠅·⠅" +"⠁∘⠉ ⠉∘⠁⠅⠍·⠅⠅⠁·⠅⠅⠅ ⠅⠅⠅·⠅⠅⠅·⠅⠁⠁·⠅⠄⠁●⠁⢤⠉·⠉⠈⠉∘⠁⠈⠁∘⠁⠄⠁∘⠁⠅⠅·⠅⠅⠅ ⠁⠁⠁ ⠁⠅⠁ ⠉⠅⠕ ⠩⠤⠁ ⠁⠈⠁∘⠁⠈⠁∘⠅⠤⠁∘ ⠄⠁·⠁⠅⠅ ⠅⠄⠅ ⠁ " +"∘⠈·⢀· ·⠅·⠅· ⠅·⠄ ⠅·⠅ ⠅· ⠁∘⠅·⢄○⢠○⠠∘ ∘⢘·⢀·⢀·⠅·⠄·⠅·⠁·⠅ ⠄·⠁ ⠅·⠁·⠄·⠅· ·⠁○⢠● · ○ ●⢀∘⠄·⠅·⠁·⠄· ·⠄·⠅ ⠅·⠁·⠅" +"⠉⢐⢉⠘⠙⢤⢉⠔⠁⠅⠁⠅⠁⠄⠅⠅⠅⠁⠁⠅⠁⠄⠁⡅⠁⠅⠁⠅ ⠤⠕⢄⠁⢄⠑⠝⢙⠤⢙ ⠉⢀⠁⢅⠁⠕⠝⠔⠁⢁⠁⠅⠁⠄⠅⠁⠁⠁⠅⠅⠅⠅⠅⠕⠄⠐⢁⠅⠑⠅⠉⢄⠱⢐⠑⢠⢑ ⢉⠁⢑⠄⠐⠑⠁⠄⠕⠕⠅⠅⠅ ⠅⠅⠅⠄⠅⠄⠅⠅" +" ·⢀ ⠍∘ ∘⠁∘⠄ ·⠄·⠁·⠅ ⠄·⠅ ·⠅·⢄∘⢔·⠅∘⠐·⠐·⢐·⢀·⠔ ⢀∘⢅ ⠅·⠄·⠅·⠅ ⠅·⠄·⠄·⠄·⠄·⢄·⠐· ·⢐∘⢀· ·⢔∘⢕·⠄ ⢄∘⠅·⠅·⠄ ·⠅·⠄· " +"⠑·⢑⢀⢑·⢑⢀⠁·⠕⢔ ·⠁⠅⠅ ⠅⠆⠅ ⠁⠅⠁ ⠁⢅⠁·⠕⠐⠁·⠙⢄⠁·⠁⢀⠑·⢁ ⠁·⠁ ⠕·⠅⠄⠁ ⠇⠅⠇·⠅⠅⠅·⠅⢀⢑ ⠑⢔⢁∘⠁⢀⠑·⠑⢐⢑∘⢁⢔⠕·⠁⠐⠁·⠁⢐⠁·⠁⠄⠁ ⠁⠅⠁·⠅⠅" +"·⠐ ⢐· ⢐·⢀· · ·⠄ ⠄· ·⡄·⠄·⠐· · ·⢐·⠐·⢐· ·⢀·⢀ ⠅· · ·⠁ ⠁· ·⢐ ⢐·⢐·⢀·⢀·⢀·⢀·⢄·⢄·⠐·⠕· ·⠁·⠁· ⠄· " +"⢀ ⠐⢐⠐ ⢀⠑⢀⢀ ⠁ ⠃ ⠁ ⠁ ⠂⠁ ⠑⢀⠐⢀ ⠐⠐⢐⠐⢀⠐⢀⢀⢐⠐⢀⢐ ⠐⠐ ⠑⠐⠁ ⠁ ⠐⠐ ⠐ ⠁ ⢐⢐⢐⠐⢀ ⢐⢐ ⢀⠁⢐⠐⢀ ⢀ ⠁ ⠁ ⠁ " +"·⠐ ⢀ ⠐·⢀·⢀· · · ·⠄· · · ·⠐· · · ·⢐ ⢀·⢀·⢀·⢀· · ·⡄· · · ·⠐·⢐· ·⢐·⢐ ⢀ ⠐·⢐·⢐·⠐·⢀· · · · · " diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_return_zoom_100x34_ansi.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_return_zoom_100x34_ansi.snap new file mode 100644 index 000000000..c14574788 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_return_zoom_100x34_ansi.snap @@ -0,0 +1,37 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│\x1b[38;2;31;52;39m\x1b[48;2;10;15;12m⢀\x1b[39m \x1b[38;2;38;64;49m⢐⢐⢐\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠑⢁⠄⠄⠕\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⢄\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;38;64;49m⠅⠅⠅⠅\x1b[38;2;31;52;39m⠁⠄⠅⠄⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅⠐⠁⠁⠄\x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⢁⢀\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠐⠐⢀\x1b[39m \x1b[38;2;38;64;49m⢑⢁\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅⠅⠅⠄\x1b[38;2;31;52;39m⠁⠅⠅\x1b[39m \x1b[38;2;38;64;49m⠇\x1b[38;2;31;52;39m⠅⠁⠅⠁\x1b[39m \x1b[38;2;38;64;49m⠁⠅⠅⠔⢁⠔⠑⢤\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m⢀⠠\x1b[38;2;38;64;49m⢰\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠕⢅⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠅⠅⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅⠅\x1b[38;2;31;52;39m⠁│ +│\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢰∘\x1b[39m \x1b[38;2;38;64;49m·⢄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m·⠄·⠅\x1b[38;2;38;64;49m·⢅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠐·\x1b[38;2;31;52;39m⠄\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⢀\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠬\x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⠐·⢀·⠐\x1b[38;2;38;64;49m∘⢄∘⠅∘\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅·⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅·⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠔∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠐·\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀∘⠠\x1b[38;2;31;52;39m·⢀\x1b[38;2;38;64;49m·⠄·\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;38;64;49m⠄∘⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠅·\x1b[39m │ +│\x1b[38;2;31;52;39m⠡\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠈\x1b[38;2;38;64;49m·⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠉·⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁⠄⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠁⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠥\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⠤⠝∘⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠁·\x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠅·\x1b[38;2;31;52;39m⠅⠅⠁\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠅⠅⠁\x1b[38;2;31;52;39m·⠁⠄\x1b[38;2;38;64;49m⠕\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢑⠠\x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠈·\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠝·⠅⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁⠅⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄│ +│·\x1b[39m \x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠠·\x1b[38;2;38;64;49m⠅\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m·⠅∘\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄·⠁\x1b[39m \x1b[38;2;31;52;39m⠅·⠅·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[38;2;38;64;49m∘⠅∘⠅\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠅\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠡\x1b[38;2;31;52;39m·⠄\x1b[38;2;38;64;49m·⠄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m⠅·⠅\x1b[39m \x1b[38;2;31;52;39m⠅·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅∘⠅\x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠤\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠅\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅·\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m⠄·⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄│ +│⠉\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠠⠈⠉⠤⠁\x1b[38;2;38;64;49m⠍\x1b[38;2;31;52;39m⠁⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠁⠁⠄⠅⠅⠁⠅⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠄⠁\x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠄⠡\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠄⠁⠄⠉⠤\x1b[38;2;38;64;49m⠅⠅⠅⠅\x1b[38;2;31;52;39m⠁⠄⠁⠅⠅⠄⠅⠅⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠅⠅⠄⠅\x1b[38;2;38;64;49m⠥⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m⠅⠁\x1b[39m \x1b[38;2;38;64;49m⠩\x1b[39m \x1b[38;2;31;52;39m⠡⠠\x1b[39m \x1b[38;2;38;64;49m⠨\x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m⠨\x1b[38;2;31;52;39m⠁⠌⠉⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅⠄⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠅⠁⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠄│ +│\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠈\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;67;114;86m●\x1b[38;2;38;64;49m⠤\x1b[38;2;31;52;39m·⠁\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠅∘\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠁·⠁\x1b[39m \x1b[38;2;31;52;39m⠄·⠅\x1b[39m \x1b[38;2;31;52;39m·⠁\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠅\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠤·⠈\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠈\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m⠠\x1b[38;2;38;64;49m∘⠌·\x1b[38;2;31;52;39m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠅·⠄\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠅·⠄\x1b[39m \x1b[38;2;31;52;39m⠅·⠅·⠄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠥∘\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠈\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠤·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠥∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[39m \x1b[38;2;31;52;39m⠅·⠅\x1b[39m \x1b[38;2;31;52;39m⠅·⠄│ +│⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁⠄\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠤\x1b[38;2;31;52;39m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅⠅⠅·\x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠁·⠄⠄⠅\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠄⠅·⠁⠌⠉·⠡\x1b[38;2;38;64;49m⠠\x1b[39m \x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;38;64;49m⠬\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠍⠅⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠁⠅⠅·\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m·⠅⠅⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠅\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠅⠅⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠉⠁⠉·⠁\x1b[39m \x1b[38;2;31;52;39m⠈\x1b[39m \x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠅⠁\x1b[38;2;38;64;49m⠅·\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠁⠅·⠁\x1b[39m │ +│\x1b[38;2;67;114;86m●\x1b[39m \x1b[38;2;31;52;39m·⠤·\x1b[39m \x1b[38;2;31;52;39m·⠈\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄·⠁\x1b[38;2;38;64;49m∘⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;31;52;39m⠁·⠁·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠅\x1b[38;2;38;64;49m·⠅\x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m∘⠩\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠠\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠈\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;45;77;58m○\x1b[38;2;31;52;39m⠄\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠄·\x1b[38;2;38;64;49m⠅∘\x1b[38;2;31;52;39m⠅\x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠅·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅·⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m⠅·⠅·⠅│ +│\x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m⢀⠉\x1b[38;2;38;64;49m⠠\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m⢅⠕\x1b[38;2;31;52;39m⠄⠁⠄\x1b[38;2;38;64;49m⠁⠅\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠅⠅⠅⠅⠅⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠁⠅\x1b[38;2;45;77;58m⠅\x1b[38;2;38;64;49m⠅⠡⢅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠌\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠁⠄\x1b[38;2;31;52;39m⢁\x1b[39m \x1b[38;2;31;52;39m⢁\x1b[39m \x1b[38;2;38;64;49m⠐\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠥\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠅⠄⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠅⠅⠥⠅⠍\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠤\x1b[38;2;31;52;39m⠁⠄⠁\x1b[38;2;38;64;49m⠈\x1b[38;2;31;52;39m⠉\x1b[39m \x1b[38;2;31;52;39m⠠\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠁⢁⠅⠅⠅⠅⠔⠅⠄⠕⠅⠅⠅⠅⠅\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠁⠅│ +│∘⠐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢈\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m·⢄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m∘⠕\x1b[38;2;31;52;39m·⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·⠐·⢀·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·⠉\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⢀\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠁∘⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅·⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢕\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢕∘\x1b[38;2;31;52;39m⠄\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⢁\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠘\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢅·⠔∘⢔\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅│ +│\x1b[38;2;31;52;39m⠐\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠙\x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⠑·⢑⢄⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⢄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠙\x1b[39m \x1b[38;2;38;64;49m⢁⢄⠱\x1b[38;2;31;52;39m·⠁⠐\x1b[39m \x1b[38;2;31;52;39m⠈\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m⠔\x1b[38;2;31;52;39m⠐\x1b[38;2;53;89;67m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢁⠄\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m·⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠑⢅\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;31;52;39m⠐⠐\x1b[39m \x1b[38;2;38;64;49m⢁\x1b[39m \x1b[38;2;38;64;49m⠑⢄⠄\x1b[39m \x1b[38;2;38;64;49m⢕\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;38;64;49m⠁⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅·⠅⠁│ +│·\x1b[38;2;38;64;49m⢐\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m·⢄·\x1b[38;2;38;64;49m⠑·\x1b[38;2;31;52;39m⢀·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⢀\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·⢐\x1b[38;2;38;64;49m·⢁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄·\x1b[38;2;31;52;39m⠄·⠄\x1b[38;2;38;64;49m·⠄\x1b[38;2;31;52;39m·⠅\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠄·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢅∘⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢑·\x1b[38;2;31;52;39m⢀·⢄\x1b[38;2;38;64;49m∘⢐\x1b[38;2;31;52;39m·⠐·⠄·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕·\x1b[39m \x1b[38;2;31;52;39m·⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄·⠆\x1b[38;2;24;39;30m·\x1b[38;2;38;64;49m⡅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄│ +│\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢐⢐\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;38;64;49m⠕⠅⠁⠄\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠁⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠁⠅⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⠕⠁⢐\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠐⠁⠐⢁⢀\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⢀⢑\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢁⠑⠄⠕⢔\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠑⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠃\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠅⠁⠅\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⠕⢑⠄\x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⠔⢁\x1b[38;2;31;52;39m⢀⠁\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⠑⢔⠑⢁⠕⠑⢑\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m⢁⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠃⠅⠃\x1b[38;2;31;52;39m⠄⠁\x1b[38;2;38;64;49m⠁│ +│\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢀·⢀·\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⠄·⠐·⢀·⠐·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⢀·\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·⠄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠄·\x1b[39m \x1b[38;2;31;52;39m·⠁·⢄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·⢀·\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⢀·⢀·⠄·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠂\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠄·⠄·\x1b[38;2;38;64;49m⢀│ +│\x1b[38;2;31;52;39m⢁\x1b[39m \x1b[38;2;31;52;39m⠐⠐⢁\x1b[39m \x1b[38;2;31;52;39m⠁⠐⠁\x1b[39m \x1b[38;2;38;64;49m⢑⠐⠑\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;38;64;49m⠃\x1b[39m \x1b[38;2;31;52;39m⠃\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠂\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⢁⢀\x1b[38;2;38;64;49m⢁\x1b[39m \x1b[38;2;31;52;39m⢑\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⠐⢑\x1b[39m \x1b[38;2;31;52;39m⢐⢐⢁\x1b[39m \x1b[38;2;31;52;39m⢁⠐\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⢀⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠃\x1b[39m \x1b[38;2;38;64;49m⠃\x1b[39m \x1b[38;2;31;52;39m⠂\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠃\x1b[39m \x1b[38;2;38;64;49m⠓\x1b[38;2;31;52;39m⠐⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠐\x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;31;52;39m⠐⢀⢁\x1b[39m \x1b[38;2;31;52;39m⠑⠐\x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⢀\x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠁⡀\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠃\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⢐\x1b[39m \x1b[38;2;31;52;39m·⢐\x1b[39m \x1b[38;2;24;39;30m·\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[38;2;24;39;30m·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;31;52;39m⠐·⢐\x1b[39m \x1b[38;2;31;52;39m⢀\x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;24;39;30m·\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;24;39;30m·\x1b[38;2;38;64;49m⡀\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠐·⢀\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;31;52;39m⢀·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;24;39;30m·\x1b[39m │ +│ \x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;31;52;39m⢐⠐\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⠐⠑⠐⠁⠐⠑⠄\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠃\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠑⠐\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m⢐⢐\x1b[38;2;31;52;39m⠐⢀\x1b[39m \x1b[38;2;31;52;39m⢀⠐⢀\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁\x1b[39m \x1b[38;2;38;64;49m⠓\x1b[39m \x1b[38;2;31;52;39m⠐⠐⢀⢀⠐⢀\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⢐⠁\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⢐\x1b[39m \x1b[38;2;31;52;39m⢐\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠑⠄│ +│\x1b[38;2;38;64;49m∘⢐∘\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m∘⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠄·⠁·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m·⢀·⠄\x1b[38;2;38;64;49m·⢐∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·⢐·\x1b[38;2;38;64;49m⢐∘⢔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢄·⠐\x1b[39m \x1b[38;2;38;64;49m·⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⡅\x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⢔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠔\x1b[38;2;31;52;39m·⢀\x1b[38;2;38;64;49m·⢐·\x1b[38;2;31;52;39m⢀\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m·⢀·⢄∘⠔\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄│ +│⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠙⢀\x1b[38;2;38;64;49m⢑·⢑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕⢕⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠄⠅\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;31;52;39m⠑·\x1b[38;2;38;64;49m⢁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⢑\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢔⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠑⠄\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕⠁\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⢄\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕⢔\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m∘⢑\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠑⢄\x1b[38;2;38;64;49m⢁\x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;38;64;49m⠁·\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;31;52;39m⠃\x1b[39m \x1b[38;2;38;64;49m⠇\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠁│ +│·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢴∘\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·\x1b[38;2;45;77;58m⢵∘⠕\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠄·\x1b[38;2;38;64;49m⢅\x1b[39m \x1b[38;2;38;64;49m⢁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠠\x1b[38;2;31;52;39m·⠐\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠘\x1b[38;2;31;52;39m·⢠\x1b[38;2;38;64;49m∘⠔\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢀·⢄\x1b[38;2;45;77;58m∘⢕○\x1b[38;2;31;52;39m⠄·⠄·⠅·⠄·⠅·⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅∘⢄\x1b[38;2;31;52;39m·⠐\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄·⠐\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⢀\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢐\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢄∘⠁\x1b[38;2;31;52;39m·⠑\x1b[38;2;38;64;49m·⢄·⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄│ +│\x1b[38;2;31;52;39m⢁⢀⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m⠑⠄\x1b[38;2;38;64;49m⠱\x1b[38;2;31;52;39m⠄⠅⠄⠁\x1b[38;2;38;64;49m⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠅⠅⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠁⠄⠁⠄⠁\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠁⠁\x1b[39m \x1b[38;2;45;77;58m⢵\x1b[38;2;31;52;39m⠑⠐⠡\x1b[38;2;38;64;49m⠔⠉\x1b[38;2;31;52;39m⠠⠁\x1b[39m \x1b[38;2;31;52;39m⠙\x1b[38;2;38;64;49m⠈⠁⠄\x1b[38;2;31;52;39m⠁⠁⠁⠄⠁\x1b[38;2;38;64;49m⠅⠅⠅\x1b[38;2;31;52;39m⠁⠄⠁⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠅⠅⢄⠅⠤⠍⠍\x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m⢍⠙\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠙\x1b[38;2;31;52;39m⠄⠡⠈⠡⠠⠁\x1b[38;2;38;64;49m⢠\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠍\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m⠄⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠁⠅⠁⠄⠁⠄\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠄│ +│\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠠\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠅\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁·⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·⠄\x1b[39m \x1b[38;2;38;64;49m·⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅·\x1b[38;2;31;52;39m⠅\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;38;64;49m⠨\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠥\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠁\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠄·⠅·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠥\x1b[39m \x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘⠈∘\x1b[38;2;31;52;39m⠈·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠅·⠅\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠅│ +│⠁\x1b[38;2;60;102;76m●\x1b[39m \x1b[38;2;31;52;39m⠤\x1b[38;2;38;64;49m⠈\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;31;52;39m⠅⠁·⠉⠄\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅⠅\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠈\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;31;52;39m·⠠\x1b[38;2;38;64;49m⠠\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠉⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅⠅⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠄·⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m·⠅\x1b[38;2;38;64;49m⠅⠅·\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;38;64;49m⠅·⠉\x1b[38;2;31;52;39m⠈\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠉⠠\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠉\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁⠄⠅·⠁⠁⠅\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅·⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅·⠄\x1b[38;2;38;64;49m⠅│ +│·\x1b[39m \x1b[38;2;31;52;39m·⠈\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠄·⠅\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁·⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠈·\x1b[39m \x1b[38;2;31;52;39m·⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠡\x1b[38;2;60;102;76m●\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;38;64;49m⠍·⠅·⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁·⠄\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄·⠅\x1b[38;2;31;52;39m·⠁·⠁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠩\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠈\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠤\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄·\x1b[39m \x1b[38;2;38;64;49m·⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠅│ +│⠩\x1b[38;2;31;52;39m⠠⠁\x1b[38;2;38;64;49m⠬\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅⠅\x1b[38;2;31;52;39m⠁⠅⠅⠅⠅⠁⠁⠅⠁⠅⠅⠅⠅⠅⠁⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠁⠁⠁⠄⠅⠄⠁⠄\x1b[38;2;38;64;49m⠡⠬\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠩\x1b[38;2;31;52;39m⠤\x1b[38;2;38;64;49m⠉\x1b[38;2;31;52;39m⠌⠁⠄\x1b[38;2;38;64;49m⠅⠥\x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠁⠄⠁⠄⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠄⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠄⠍⠉\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠩\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠄⠁\x1b[38;2;38;64;49m⠨⠩⠨\x1b[38;2;31;52;39m⠁⠤\x1b[38;2;38;64;49m⠅⠄⠉\x1b[39m \x1b[38;2;31;52;39m⠁⠄\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠅⠅\x1b[38;2;31;52;39m⠅⠅\x1b[38;2;38;64;49m⠅⠅⠅│ +│\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠈·\x1b[38;2;38;64;49m⠍\x1b[38;2;31;52;39m·⠤\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;31;52;39m⠅·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠅·\x1b[38;2;38;64;49m⠭\x1b[38;2;31;52;39m·⠠·⠈·\x1b[39m \x1b[38;2;38;64;49m·⠭\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠍\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠥∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·⠅\x1b[39m \x1b[38;2;31;52;39m⠄·⠄\x1b[39m \x1b[38;2;31;52;39m⠅·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;60;102;76m●\x1b[38;2;38;64;49m⠬\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠡\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠨\x1b[38;2;67;114;86m●\x1b[39m \x1b[38;2;31;52;39m·⠄\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠤\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠤·⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄·⠅·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅│ +│\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠉\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠍\x1b[38;2;31;52;39m·⠅⠅⠁·⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠅⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠅⠄⠁\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢤⠉\x1b[38;2;31;52;39m·⠉\x1b[38;2;38;64;49m⠈\x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁⠈\x1b[38;2;38;64;49m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁⠄⠁\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅·⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m⠅⠕\x1b[39m \x1b[38;2;38;64;49m⠩⠤\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠈\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁⠈⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠤⠁\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠁·\x1b[38;2;31;52;39m⠁⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠄⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠈·⢀\x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m·⢄\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⢠\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠠\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢘\x1b[38;2;31;52;39m·⢀·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;24;39;30m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠁·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠄\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠅·⠁·⠄·⠅·\x1b[39m \x1b[38;2;31;52;39m·⠁\x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⢠\x1b[38;2;60;102;76m●\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⢀\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠁·⠄·\x1b[39m \x1b[38;2;31;52;39m·⠄·⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠅│ +│⠉⢐⢉⠘⠙⢤⢉⠔⠁⠅⠁⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄⠅⠅⠅\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠄⠁\x1b[38;2;38;64;49m⡅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠁⠅\x1b[39m \x1b[38;2;38;64;49m⠤⠕⢄⠁⢄⠑⠝⢙⠤⢙\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢅⠁⠕⠝⠔\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢁\x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠁⠄⠅⠁\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠅⠅⠅⠅⠅⠕\x1b[38;2;31;52;39m⠄⠐\x1b[38;2;38;64;49m⢁\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠑⠅⠉⢄⠱⢐⠑⢠⢑\x1b[39m \x1b[38;2;38;64;49m⢉⠁⢑⠄⠐⠑\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠄⠕⠕⠅⠅⠅\x1b[39m \x1b[38;2;38;64;49m⠅⠅⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠅⠅│ +│\x1b[39m \x1b[38;2;31;52;39m·⢀\x1b[39m \x1b[38;2;38;64;49m⠍\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⠁·⠅\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⢄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢔\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅∘\x1b[38;2;31;52;39m⠐·⠐·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⢀·\x1b[38;2;38;64;49m⠔\x1b[39m \x1b[38;2;31;52;39m⢀\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠅·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄·⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·⢄·\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·⢐\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m·⢔\x1b[38;2;45;77;58m∘⢕\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;38;64;49m⢄\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅·⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[39m │ +│\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m⢑·⢑⢀\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠕⢔\x1b[39m \x1b[38;2;31;52;39m·⠁⠅\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅⠆⠅\x1b[39m \x1b[38;2;38;64;49m⠁⠅⠁\x1b[39m \x1b[38;2;38;64;49m⠁⢅\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠕⠐\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠙\x1b[38;2;31;52;39m⢄⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁⢀\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠇⠅⠇\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠅⢀\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢔⢁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠁⢀\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m·⠑\x1b[38;2;38;64;49m⢐⢑∘\x1b[38;2;31;52;39m⢁\x1b[38;2;38;64;49m⢔⠕\x1b[38;2;31;52;39m·⠁⠐⠁·\x1b[38;2;38;64;49m⠁⢐\x1b[38;2;31;52;39m⠁·⠁⠄⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅⠅│ +│\x1b[38;2;31;52;39m·⠐\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⡄\x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠐\x1b[38;2;24;39;30m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢀·⢀\x1b[39m \x1b[38;2;31;52;39m⠅·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠁\x1b[39m \x1b[38;2;31;52;39m⠁·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⢀·⢀·⢀·⢀·\x1b[38;2;38;64;49m⢄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢄\x1b[38;2;31;52;39m·⠐·\x1b[38;2;38;64;49m⠕\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠁·⠁·\x1b[39m \x1b[38;2;31;52;39m⠄·\x1b[39m │ +│\x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;31;52;39m⢀⠑⢀⢀\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠃\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠂\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠑\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m⠐\x1b[38;2;38;64;49m⢀\x1b[39m \x1b[38;2;31;52;39m⠐⠐\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⠐⢀⠐⢀⢀⢐⠐⢀⢐\x1b[39m \x1b[38;2;31;52;39m⠐⠐\x1b[39m \x1b[38;2;38;64;49m⠑⠐⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠐⠐\x1b[39m \x1b[38;2;31;52;39m⠐\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⢐\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⢐⠐⢀\x1b[39m \x1b[38;2;31;52;39m⢐\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⢀⠁\x1b[38;2;38;64;49m⢐⠐\x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m │ +│\x1b[38;2;31;52;39m·⠐\x1b[39m \x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;31;52;39m⠐·⢀·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠐·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⢀·⢀·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⡄·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠐·⢐·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⢐\x1b[39m \x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;31;52;39m⠐·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·⠐·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m │ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_return_zoom_100x34_text.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_return_zoom_100x34_text.snap new file mode 100644 index 000000000..9413c3dc1 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_return_zoom_100x34_text.snap @@ -0,0 +1,37 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│⢀ ⢐⢐⢐ ⠁⠑⢁⠄⠄⠕⠅⢄⠄ ⠅⠅⠅⠅⠁⠄⠅⠄⠁⠅⠁⠅⠐⠁⠁⠄⢑⠅⢁⢀⠁ ⠐⠐⢀ ⢑⢁⠁ ⠁⠅⠅⠅⠅⠄⠁⠅⠅ ⠇⠅⠁⠅⠁ ⠁⠅⠅⠔⢁⠔⠑⢤ ⠄⠐⢀⠠⢰ ⠐ ⠄⠕⢅⠅⠄⠅⠅⠅⠅⠄⠄⠅⠄⠅⠁⠅⠅⠅⠁│ +│○ ·⢰∘ ·⢄∘⠅· ·⠄·⠅·⠅·⠅ ⠅ ·⠄·⠅·⢅·⠐·⠄○⢀○⠬○⠐·⢀·⠐∘⢄∘⠅∘⠄·⠅·⠅·⠅ ⠅ ⠅·⠄·⠄·⠔∘⠄·⠐·⠐·⢀∘⠠·⢀·⠄·⠄ ⠄∘⠁·⠅·⠄ ⠅ ⠄·⠅· │ +│⠡·⠁ ⠈·⠅⠄⠉·⠅⠅⠅·⠅⠄⠅·⠁⠄⠅ ⠁⠅⠁·⠁⠅⠁·⠥⠄⠁·⠁ ⠁○⠁ ○⠑⠤⠝∘⠅⠄⠁·⠅⠅⠅·⠅⠅⠁ ⠅ ⠁·⠅⠅⠁·⠁⠄⠕∘⢑⠠⠉·⠁ ⠈·⠑⠄⠅·⠑⠁⠝·⠅⠅⠁·⠁⠅⠅ ⠅⠄⠅·⠅⠄│ +│· ○ ∘⠠·⠅●⠅·⠅∘⠄∘⠄·⠁ ⠅·⠅·⠄·⠅·⠅∘⠅∘⠅○⠅○ ○ ○ ○ ○⠡·⠄·⠄· ·⠅·⠄ ⠅·⠅ ⠅·⠄·⠅·⠅∘⠅●⠤ · ∘ ∘ ●⠅○⠅·⠅·⠅·⠄·⠁·⠅· ⠄·⠄·⠄│ +│⠉ ⠁ ⠠⠈⠉⠤⠁⠍⠁⠅⠅⠅⠅⠁⠁⠄⠅⠅⠁⠅⠅⠅⠅⠅⠅⠅⠅⠄⠁⠥⠅⠄⠁⠄⠡ ⠁ ⠄⠁⠄⠉⠤⠅⠅⠅⠅⠁⠄⠁⠅⠅⠄⠅⠅⠁⠅⠅⠅⠅⠄⠅⠥⠅⠅⠥⠅⠁ ⠩ ⠡⠠ ⠨⠉⠨⠁⠌⠉⠅⠅⠅⠅⠄⠁⠄⠁ ⠁⠄⠅⠁⠅⠅⠅⠄│ +│∘⠈○ ●⠤·⠁∘ ·⠄·⠅∘⠅ ⠁·⠁ ⠄·⠅ ·⠁∘⠅●⠅○⠤·⠈∘⠈· ⠠∘⠌·⠅∘⠁∘⠅·⠄ ⠅ ⠄ ⠅·⠄ ⠅·⠅·⠄∘⠥∘⠄∘⠄●⠈· · ·⠤· ∘⠥∘⠄∘⠄·⠅·⠅ ⠅·⠅ ⠅·⠄│ +│⠁·⠁⠄ ○⠁⠤⠅∘⠅⠅⠅·⠅⠄⠅·⠅⠅⠁·⠄⠄⠅·⠅⠅⠅ ⠁⠄⠅·⠁⠌⠉·⠡⠠ ∘ ⠬⠁∘⠍⠅⠅·⠁⠅⠅·⠁⠅⠅·⠅⠅⠅·⠅⠄⠅·⠅⠅⠁○⠉⠁⠉·⠁ ⠈ ⠥⠁·⠁⠁⠁○⠅⠁⠅·⠁⠁⠅ ⠁⠁⠅·⠁ │ +│● ·⠤· ·⠈∘⠄·⠁∘⠅·⠅·⠁ ⠁·⠁·⠅·⠅·⠄·⠅·⠅○⠅∘⠩●⠠∘ ○⠈○ ○⠄○⠅∘⠅·⠅·⠅·⠅·⠅·⠅·⠄·⠅∘⠅●⠅· ●⠅· ∘ · ○⠁∘⠅·⠄∘⠁·⠅·⠅·⠅·⠄ ⠅·⠅·⠅│ +│⠉⢀⠉⠠ ⠉⢅⠕⠄⠁⠄⠁⠅⠁⠁⠅⠅⠅⠅⠅⠅⠄⠅⠁⠅⠅⠅⠡⢅⠁⠌⠁ ⠁⠄⢁ ⢁ ⠐ ⠁⠅⠥⠁⠅⠅⠅ ⠁⠁⠅⠄⠅⠅⠅⠅⠅⠁⠅⠄⠅⠅⠅⠥⠅⠍⠁⠤⠁⠄⠁⠈⠉ ⠠ ⠁⠁⢁⠅⠅⠅⠅⠔⠅⠄⠕⠅⠅⠅⠅⠅⠁⠁⠅⠄⠁⠅│ +│∘⠐·⢈∘⠁ ⢀·⢄·⠅·⠅·⠅·⠅·⠅ ⠅·⠅ ·⠅ ∘⠕·⠁∘⠁·⠐·⢀· ∘⠄·⠉∘⢀∘⠁∘⠅·⠅·⠅ ⠅ ⠅·⠅·⠅·⢕·⢕∘⠄∘⢁∘ ●⠘ ·⢅·⠔∘⢔∘⠅·⠄·⠅·⠅·⠅ ⠁·⠄·⠅│ +│⠐○⠙⠐⠑·⢑⢄⠅·⠅⢄⠅·⠅⠅⠁ ⠁⠁⠅ ⠄ ⠁ ⠕⠄⠙ ⢁⢄⠱·⠁⠐ ⠈ · ⠔⠐∘⠁⢁⠄ ⠁⠄⠁ ⠁ ⠁⠅⠅·⠅⠅⠁·⠑⢅⠑·⢁⢐⢀ ⠐⠐ ⢁ ⠑⢄⠄ ⢕⠁⠁ ⠁⠅⠅ ⠁⠅⠅·⠅⠁│ +│·⢐∘ ·⢄·⠑·⢀·⠅·⠄·⠁·⠅·⠅·⠁·⠄· ·⠅·⠁∘⠄·⢀∘ · ∘ ·⢐·⢁·⠐·⠄·⠄·⠄·⠄·⠅·⠄·⠄·⠅·⢅∘⠄·⢑·⢀·⢄∘⢐·⠐·⠄·⢐·⢄·⠕· ·⠁·⠄·⠆·⡅· · ·⠄│ +│⠑⢐⢐⢀⠑ ⠑ ⢑ ⠕⠅⠁⠄⠁⠄⠁⠅⠁ ⠁⠁⠁⠅⠁ ⠑⠕⠁⢐⠁ ⠁⠐⠁⠐⢁⢀⢐ ⢑⢀⢑⢐⠁⢁⠑⠄⠕⢔⠁⠅⠑⠅⠅ ⠅⠄⠃⠄⠁⠅⠁⠅⠑⠕⢑⠄⠑⠔⢁⢀⠁⢐ ⢀⠑⠐⠑⢔⠑⢁⠕⠑⢑⠁⠕⢁⠁ ⠁⠄⠁⠄⠃⠅⠃⠄⠁⠁│ +│·⢐· ·⢀·⢀· ·⠄· · ·⠄· ·⠄·⢀· · ·⢐·⠄·⠐·⢀·⠐·⢐·⢀·⠐·⠄· ·⠄·⠄· ·⠁·⢄· · ·⢀·⢀·⠐· · ·⢐·⢀·⢀·⠄·⢐·⢀·⠂· ·⠄·⠄·⢀│ +│⢁ ⠐⠐⢁ ⠁⠐⠁ ⢑⠐⠑ ⠑ ⠃ ⠃ ⠁⠂⠁ ⢁⢀⢁ ⢑⢐⠑ ⠑⠐⢑ ⢐⢐⢁ ⢁⠐⢑ ⢑⢀⠁ ⠁ ⠃ ⠃ ⠂ ⠁ ⠃ ⠓⠐⠁ ⠁⠐⠑ ⠁ ⢑ ⠐⢀⢁ ⠑⠐⠑ ⢁⢐⠁ ⠁⢀⠑ ⠁⡀ ⠁ ⠃ ⠁ │ +│·⢐ ·⢐ ·⢀ · · ⠄· ·⢀ ⢐·⢀ ⠐·⢐ ·⢀ ⠐·⢐ ⢀· ·⢀·⢀ ·⡀ · · · ⠐·⢀ · ·⢀ ⢀·⢐ · · · · │ +│ ⢀ ⢐⠐⢐ ⠐⠑⠐⠁⠐⠑⠄ ⠄⠃ ⠁ ⠁ ⠁ ⠑ ⠑⠐⢐ ⢐⢐⠐⢀ ⢀⠐⢀ ⠁⠄⠁ ⠁⠄⠁ ⠓ ⠐⠐⢀⢀⠐⢀ ⢐⢐⠁⢐⢐ ⢐ ⠑ ⠐ ⠐ ⠄ ⠄⠁ ⠑⠄│ +│∘⢐∘⢀∘⢐·⠑·⢄·⠄ ⠄·⠄·⠁·⠄· ·⠄·⠄·⠕·⢀·⠄·⢐∘⠄∘ ·⢐·⢐∘⢔·⢄·⠐ ·⠁·⠄·⡅·⠄·⠁·⠅· ·⠄·⢔·⠔·⢀·⢐·⢀∘⢀·⢀·⢄∘⠔ ∘⠄·⠅·⠅·⠄·⠅·⠅·⠄│ +│⠁·⠙⢀⢑·⢑ ⠁ ⠕⢕⠅ ⠅⠄⠅ ⠁⠄⠁ ⠅⠄⠅ ⠑⠄⠅ ⠑ ⠑·⢁ ⠁·⢑ ⢑∘⠁⢔⠅∘⠑⠄ ·⠕⠁⠁ ⠁⠁⠁ ⠁ ⠁ ⠅⢄⠁·⠕⢔ ∘⠅ ⠁∘⢑ ⠁·⠑⢄⢁·⠁ ⠁·⠅⠅⠅·⠁ ⠃ ⠇⠄⠅ ⠁⠁│ +│·⢐·⢴∘ ∘⠁·⢵∘⠕○⠄·⠅·⠅·⠅·⠅·⠅·⠄·⠄·⢅ ⢁·⠠·⠐∘⠘·⢠∘⠔∘⢀·⢄∘⢕○⠄·⠄·⠅·⠄·⠅·⠄·⠄·⠅○⠅∘⢄·⠐∘⠄·⠐○⢀∘⢐∘ ·⢄∘⠁·⠑·⢄·⠄·⠅·⠅·⠅·⠅·⠄│ +│⢁⢀⠁ ⠁⠄⠑⠄⠱⠄⠅⠄⠁⠅⠅ ⠁⠅⠅⠄⠅⠄⠅⠅⠁⠄⠁⠄⠁⠁⠁⠁ ⢵⠑⠐⠡⠔⠉⠠⠁ ⠙⠈⠁⠄⠁⠁⠁⠄⠁⠅⠅⠅⠁⠄⠁⠄⠅⠁⠅⠅⠅⢄⠅⠤⠍⠍⠉⢍⠙⠄⠙⠄⠡⠈⠡⠠⠁⢠⠁⠄⠍ ⠁ ⠑⠄⠅ ⠅⠄⠁⠅⠁⠄⠁⠄⠁⠄│ +│●⠠ ∘⠁●⠅○⠅ ⠅○⠁·⠅ ⠅ ⠅ ⠅ ⠄·⠄ ·⠅∘⠅·⠅○ ∘ ○ ⠨○⠅ ⠥○⠄ ⠅·⠅·⠄·⠁ ⠄ ⠄·⠅· ·⠅ ∘⠥ ∘ · ∘⠈∘⠈·⠅ ⠅·⠅·⠅·⠅ ⠄·⠅ ⠄·⠅│ +│⠁● ⠤⠈○ ⠅⠁·⠉⠄⠅ ⠅⠄⠅·⠅⠅⠅ ⠅⠅⠁·⠅⠁⠅·⠈⠅⠉·⠁ ·⠠⠠ ·⠉⠅⠁∘⠅⠅⠁·⠅⠁⠁·⠅⠄⠄·⠅⠅⠅·⠅⠅⠅·⠅ ⠅·⠉⠈ ∘⠉⠠ ∘⠉ ∘⠁⠄⠅·⠁⠁⠅·⠅⠅⠅·⠅⠅⠅·⠄⠅│ +│· ·⠈∘⠄·⠅○⠄·⠅·⠅∘⠁·⠁·⠅·⠅·⠅· ∘⠅·⠈· ·⠁○⠡● · ○⠄ ·⠁ ⠍·⠅·⠅·⠅·⠁·⠄ ·⠄·⠅·⠁·⠁∘⠅∘⠄·⠩○ ·⠈∘⠤· ○⠄· ·⠅·⠅·⠅· ·⠅·⠄·⠅│ +│⠩⠠⠁⠬⠁ ⠁⠅⠅⠅⠁⠅⠅⠅⠅⠁⠁⠅⠁⠅⠅⠅⠅⠅⠁⠅⠅⠅⠁⠁⠁⠄⠅⠄⠁⠄⠡⠬⠁ ⠩⠤⠉⠌⠁⠄⠅⠥⠁⠄⠅⠅⠁⠄⠁⠄⠅⠅⠁⠅⠅⠄⠅⠅⠅⠄⠍⠉⠅⠩⠁ ⠁⠄⠁⠨⠩⠨⠁⠤⠅⠄⠉ ⠁⠄⠅⠅⠅⠅⠅⠄⠅⠅⠅⠅⠅⠅⠅⠅│ +│○ ∘⠈·⠍·⠤∘⠁·⠥·⠅·⠅·⠁·⠁ ⠅·⠄·⠅·⠄ ⠁○⠅·⠭·⠠·⠈· ·⠭· ∘⠍∘⠥∘⠄·⠅ ⠄·⠄ ⠅·⠅·⠅∘⠅·⠅· ∘⠅●⠬·⠡∘⠨● ·⠄○⠤○⠤·⠁·⠄·⠅·⠅ ·⠅·⠅·⠅│ +│⠁∘⠉ ⠉∘⠁⠅⠍·⠅⠅⠁·⠅⠅⠅ ⠅⠅⠅·⠅⠅⠅·⠅⠁⠁·⠅⠄⠁●⠁⢤⠉·⠉⠈⠉∘⠁⠈⠁∘⠁⠄⠁∘⠁⠅⠅·⠅⠅⠅ ⠁⠁⠁ ⠁⠅⠁ ⠉⠅⠕ ⠩⠤⠁ ⠁⠈⠁∘⠁⠈⠁∘⠅⠤⠁∘ ⠄⠁·⠁⠅⠅ ⠅⠄⠅ ⠁ │ +│∘⠈·⢀· ·⠅·⠅· ⠅·⠄ ⠅·⠅ ⠅· ⠁∘⠅·⢄○⢠○⠠∘ ∘⢘·⢀·⢀·⠅·⠄·⠅·⠁·⠅ ⠄·⠁ ⠅·⠁·⠄·⠅· ·⠁○⢠● · ○ ●⢀∘⠄·⠅·⠁·⠄· ·⠄·⠅ ⠅·⠁·⠅│ +│⠉⢐⢉⠘⠙⢤⢉⠔⠁⠅⠁⠅⠁⠄⠅⠅⠅⠁⠁⠅⠁⠄⠁⡅⠁⠅⠁⠅ ⠤⠕⢄⠁⢄⠑⠝⢙⠤⢙ ⠉⢀⠁⢅⠁⠕⠝⠔⠁⢁⠁⠅⠁⠄⠅⠁⠁⠁⠅⠅⠅⠅⠅⠕⠄⠐⢁⠅⠑⠅⠉⢄⠱⢐⠑⢠⢑ ⢉⠁⢑⠄⠐⠑⠁⠄⠕⠕⠅⠅⠅ ⠅⠅⠅⠄⠅⠄⠅⠅│ +│ ·⢀ ⠍∘ ∘⠁∘⠄ ·⠄·⠁·⠅ ⠄·⠅ ·⠅·⢄∘⢔·⠅∘⠐·⠐·⢐·⢀·⠔ ⢀∘⢅ ⠅·⠄·⠅·⠅ ⠅·⠄·⠄·⠄·⠄·⢄·⠐· ·⢐∘⢀· ·⢔∘⢕·⠄ ⢄∘⠅·⠅·⠄ ·⠅·⠄· │ +│⠑·⢑⢀⢑·⢑⢀⠁·⠕⢔ ·⠁⠅⠅ ⠅⠆⠅ ⠁⠅⠁ ⠁⢅⠁·⠕⠐⠁·⠙⢄⠁·⠁⢀⠑·⢁ ⠁·⠁ ⠕·⠅⠄⠁ ⠇⠅⠇·⠅⠅⠅·⠅⢀⢑ ⠑⢔⢁∘⠁⢀⠑·⠑⢐⢑∘⢁⢔⠕·⠁⠐⠁·⠁⢐⠁·⠁⠄⠁ ⠁⠅⠁·⠅⠅│ +│·⠐ ⢐· ⢐·⢀· · ·⠄ ⠄· ·⡄·⠄·⠐· · ·⢐·⠐·⢐· ·⢀·⢀ ⠅· · ·⠁ ⠁· ·⢐ ⢐·⢐·⢀·⢀·⢀·⢀·⢄·⢄·⠐·⠕· ·⠁·⠁· ⠄· │ +│⢀ ⠐⢐⠐ ⢀⠑⢀⢀ ⠁ ⠃ ⠁ ⠁ ⠂⠁ ⠑⢀⠐⢀ ⠐⠐⢐⠐⢀⠐⢀⢀⢐⠐⢀⢐ ⠐⠐ ⠑⠐⠁ ⠁ ⠐⠐ ⠐ ⠁ ⢐⢐⢐⠐⢀ ⢐⢐ ⢀⠁⢐⠐⢀ ⢀ ⠁ ⠁ ⠁ │ +│·⠐ ⢀ ⠐·⢀·⢀· · · ·⠄· · · ·⠐· · · ·⢐ ⢀·⢀·⢀·⢀· · ·⡄· · · ·⠐·⢐· ·⢐·⢐ ⢀ ⠐·⢐·⢐·⠐·⢀· · · · · │ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_return_zoom_36x20.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_return_zoom_36x20.snap new file mode 100644 index 000000000..c57ce2318 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_return_zoom_36x20.snap @@ -0,0 +1,24 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +expression: terminal.backend().to_string() +--- +"⠩⠅⠉⠩⠩⠠⠈ ⠌ ⠄⠄⠍⠅⠅⠅⠅⠅⠁⠅⠁⠅⠅⠅⠁⠅⠅⠄ ⠅⠉⠅⠭⠅" +"· ∘ · ∘ ∘⠅○⠁·⠅∘ ·⠁·⠄·⠅ ⠁·⠁ ⠄·⠅∘⠅·⠉" +"⢁·⠉ ⠁∘⠉⢀⠉∘⠑⠄⠉·⠍⢀⠕·⠕⠅⠁ ⠁⠅⠅ ⠁⠅⠅·⠅⠅⠅∘⠅⢕" +"○⢄·⠐·⢀·⠈·⠄·⢔∘⢅ ⢅∘⠁·⠄·⠁ ⠁·⠅ ⠅·⠄·⠅· ·⢅" +"⠁⢀⠑ ⠑ ⠑⠐⠑⢁⠁⠐⠑⠄⠑ ⠁⠄⠅⠄⠁⠅⠁⠄⠁⠄⠅⠅⠅⠁⠁⠄⠅⢑" +" ⠐·⠐ ⢀· ·⢀·⢐ ⢁·⠄·⢐ ⠅ ⠅· ⠄ ⠄·⠅·⠅·⠄·⠄" +"⢑ ⠁⠐⢀ ⢐⢐⢑·⠁⢀⠁·⠑⠄⠓ ⠑⠄⠁ ⠁ ⠁ ⠁⠁⠁ ⠁ ⠑·⠁⢁" +"·⢀·⠐·⢐ ⢐·⠐ ⠐·⠐ ⢀·⢐ · · ·⢀· · ⠐" +"⢑⢐⠁ ⠐⢀⢐⠐⢑⢐⠑⢐⠑ ⠑⢐⠁⢔⠁⠄⠁⡀ ⠂ ⠁ ⠁ ⠓ ⢑ ⠑⠐" +" ⠐· ·⢐·⢀·⢀·⢀· · ⠄· · ⠄ · · · ·⠐·⢀" +"⢀· ⠐·⢀⢐ ·⠁⢔⠐·⢀⠐⠁ ⠁⠁⠁ ⠁⡅ ⠁⠁⠁·⠁ ⠁·⠁⢔" +"·⠐· · ∘ ∘⢔·⢔∘⢅·⠄·⢅∘⠁· ·⠅·⠅·⠄·⠄·⢄·⠄·⢔" +"⠁⠠⠁⠐⢙⠘⠑⢀⠁⠐⠁⢀⠁⢄⠕⢕⠕⠄⠇⠄⠄⠅⠅⠄⠅⠅⠅⠄⠅⠄⠁⠅⠑⠅⠁⢄" +"·⢕·⠐○⠔○⠠· ·⠈·⠄·⠁·⠄·⠅ ⠅·⠄·⠄·⠁·⠅·⢄∘⠤∘⠍" +"⠍· ⠁·⠁ ⠁●⠁⠅⠁○⠁⠄⠁·⠅⠅⠅ ⠅⠅⠅ ⠅⠄⠁ ⠁⠄⠅○⠅ " +"○⠅· ·⠈○⠠· ○⠅·⠅∘⠅·⠅·⠁·⠁ ⠄·⠄·⠅· ∘⠅○⠄ " +"⠁⠁⠍⠠⠠ ⠈ ⠁⠉⠍⠅⠅⠅⠅⠁⠅⠅⠁⠁⠄⠅ ⠅⠄⠅⠅⠅⠁⠅⠁" +"○⠌○⠄●⠬∘ ○⠤∘⠄· ∘⠥·⠤·⠅·⠄·⠄·⠅·⠅·⠄·⠅·⠄·⠩" +"⠁○⠍⠠⠁·⠁ ⠉○⠉ ⠍∘⠉⠥⠅·⠅⠅⠁·⠅⠄⠁ ⠅⠅⠁ ⠁⠅⠅ ⠁ " +"·⢡∘⢤○⠄·⠨∘⠉○⠌∘⠄∘⠄·⠄·⠅∘⠅·⠅·⠅·⠅·⠅·⠅∘⠅∘⠅" diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_36x20_ansi.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_36x20_ansi.snap new file mode 100644 index 000000000..9ef956371 --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_36x20_ansi.snap @@ -0,0 +1,23 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│\x1b[38;2;38;64;49m\x1b[48;2;10;15;12m⠩\x1b[38;2;31;52;39m⠅\x1b[38;2;38;64;49m⠉⠭⠩\x1b[38;2;31;52;39m⠠⠈\x1b[39m \x1b[38;2;38;64;49m⠈\x1b[38;2;31;52;39m⠠\x1b[39m \x1b[38;2;31;52;39m⠤⠄\x1b[38;2;38;64;49m⠉⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅⠁⠄⠁⠄\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠁⠅⠁⠅⠁⠅\x1b[39m \x1b[38;2;38;64;49m⠅⠭⠅│ +│\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠍\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠐\x1b[38;2;45;77;58m∘\x1b[39m \x1b[38;2;45;77;58m○\x1b[39m \x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠅\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄·⠅\x1b[38;2;38;64;49m∘⠄\x1b[38;2;31;52;39m·⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄·⠤·⠅│ +│\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠉⠥\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠉⢀⠉\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠐⠄\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠝\x1b[38;2;31;52;39m⢀\x1b[38;2;38;64;49m⠑\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠕⠅⠅\x1b[38;2;31;52;39m·⠁\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m·⠁\x1b[38;2;38;64;49m⠅⠅\x1b[39m \x1b[38;2;38;64;49m⠅⠄⠅·⠅⢕│ +│\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⢄·⠐\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⢀\x1b[39m \x1b[38;2;38;64;49m⠈·\x1b[39m \x1b[38;2;38;64;49m⠐\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠥\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢄∘⠁\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠁·⠁·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m⠅·⠁·\x1b[38;2;45;77;58m⢅│ +│\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢐⠑\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⠈⠑\x1b[39m \x1b[38;2;38;64;49m⠙\x1b[38;2;31;52;39m⠐⠐\x1b[38;2;38;64;49m⢁\x1b[38;2;31;52;39m⠁⠐\x1b[38;2;38;64;49m⠑⠄⠁\x1b[38;2;31;52;39m⠐⠁\x1b[38;2;38;64;49m⠅⠅\x1b[39m \x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠁⠄⠁⠄⠅\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠁⠁\x1b[38;2;38;64;49m⠄⢅⢑│ +│\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;31;52;39m⢀·\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⢀·⢐·\x1b[38;2;38;64;49m⢀\x1b[38;2;31;52;39m·⠔\x1b[38;2;38;64;49m·⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅·\x1b[39m \x1b[38;2;38;64;49m⡄\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠔│ +│⢑\x1b[38;2;31;52;39m·⢁⠐\x1b[38;2;38;64;49m⢑\x1b[39m \x1b[38;2;38;64;49m⢑\x1b[38;2;31;52;39m⢐⢐\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢄⢁\x1b[38;2;31;52;39m·⠁\x1b[38;2;38;64;49m⠄⠓\x1b[39m \x1b[38;2;38;64;49m⠑⠄\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠁⠅\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠁⠁\x1b[39m \x1b[38;2;31;52;39m⠁⢐\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·⠁\x1b[38;2;38;64;49m⠑│ +│\x1b[38;2;31;52;39m·⢀·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;31;52;39m⢐·⠐\x1b[39m \x1b[38;2;31;52;39m⠐·\x1b[39m \x1b[38;2;31;52;39m⢀·⠐\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m⠐│ +│\x1b[38;2;38;64;49m⠑⢐\x1b[38;2;31;52;39m⠑⢀⠑\x1b[39m \x1b[38;2;31;52;39m⢑⠐\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m⢐⠑⢀\x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;38;64;49m⠑⢐\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢀⠁\x1b[39m \x1b[38;2;38;64;49m⠁⡀\x1b[38;2;31;52;39m⠁⡄⠃\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m \x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;38;64;49m⠑\x1b[39m │ +│ \x1b[38;2;31;52;39m⠐·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢐\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⢀·⢀·⢀·\x1b[38;2;38;64;49m⠐\x1b[39m \x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;31;52;39m·⠄\x1b[39m \x1b[38;2;31;52;39m·⠄·\x1b[39m \x1b[38;2;31;52;39m·⠄·⢐│ +│⢀·\x1b[39m \x1b[38;2;31;52;39m⠄⠐\x1b[39m \x1b[38;2;31;52;39m⢀⠐\x1b[39m \x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;38;64;49m⢐\x1b[39m \x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⢀⠐⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠁⠄\x1b[38;2;31;52;39m⠄\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;38;64;49m⠃\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁⠐│ +│·⠔\x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘\x1b[39m \x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠐·\x1b[38;2;38;64;49m⢔\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⢄\x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⢄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠅·\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⢄\x1b[38;2;38;64;49m·⠅·⠔│ +│⠑⠸\x1b[38;2;31;52;39m⠅⠐\x1b[38;2;38;64;49m⢑⠘\x1b[38;2;31;52;39m⠑\x1b[39m \x1b[38;2;31;52;39m⠁⠐⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⢄⠕⢕⠑\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m⠄⠅\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠄⠁\x1b[38;2;38;64;49m⠅⠕⠅⠁⢄│ +│\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢕\x1b[38;2;31;52;39m·⠐\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠄\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠠·\x1b[39m \x1b[38;2;38;64;49m∘⠌\x1b[38;2;31;52;39m·⠄·\x1b[38;2;38;64;49m⠁\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠄·⠁·\x1b[38;2;38;64;49m⠅·⢅∘⠤\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅│ +│⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[38;2;60;102;76m●\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠍\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m∘\x1b[38;2;31;52;39m⠁⠅\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅⠅⠅\x1b[38;2;31;52;39m·⠁⠁\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠅⠅·⠅\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠅⠄│ +│\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠍\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠠\x1b[38;2;38;64;49m·\x1b[39m \x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠠\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;60;102;76m○\x1b[38;2;38;64;49m⠄∘⠥\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠅∘\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁·⠁·⠄·⠅\x1b[39m \x1b[38;2;31;52;39m⠅\x1b[38;2;24;39;30m·\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m·⠅\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠄\x1b[39m \x1b[38;2;31;52;39m⠁│ +│⠁⠁\x1b[38;2;38;64;49m⠍⠡\x1b[38;2;31;52;39m⠡\x1b[39m \x1b[38;2;31;52;39m⠈\x1b[39m \x1b[38;2;31;52;39m⠁⠉⠅⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁⠅⠅⠁⠁⠄\x1b[38;2;38;64;49m⠅\x1b[39m \x1b[38;2;31;52;39m⠅⠄\x1b[38;2;38;64;49m⠅⠅\x1b[38;2;31;52;39m⠅⠄⠅⠄│ +│\x1b[38;2;45;77;58m∘\x1b[38;2;31;52;39m⠄\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠬\x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⠤\x1b[38;2;53;89;67m○\x1b[39m \x1b[38;2;31;52;39m·\x1b[39m \x1b[38;2;38;64;49m∘⠥·\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠁·⠄·⠄·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠩│ +│\x1b[38;2;31;52;39m⠁\x1b[38;2;45;77;58m∘\x1b[38;2;38;64;49m⠍⠠\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;31;52;39m⠉\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠁\x1b[39m \x1b[38;2;38;64;49m⠅\x1b[38;2;60;102;76m○\x1b[38;2;31;52;39m⠉\x1b[38;2;38;64;49m⠅⠅·\x1b[38;2;31;52;39m⠁\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠁·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m⠄⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠅\x1b[38;2;38;64;49m⠁\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅⠅⠅\x1b[39m \x1b[38;2;31;52;39m⠁⠁│ +│\x1b[38;2;38;64;49m∘⢬\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⢤\x1b[38;2;53;89;67m○\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m∘⠨\x1b[38;2;53;89;67m○\x1b[38;2;38;64;49m⠈\x1b[38;2;60;102;76m○\x1b[39m \x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠄\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·\x1b[38;2;38;64;49m⠅∘⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·\x1b[38;2;38;64;49m⠅\x1b[38;2;31;52;39m·⠅·⠅\x1b[38;2;38;64;49m·\x1b[38;2;31;52;39m⠄\x1b[38;2;38;64;49m∘⠅·⠅│ diff --git a/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_36x20_text.snap b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_36x20_text.snap new file mode 100644 index 000000000..01f5312de --- /dev/null +++ b/nori-rs/tui-components/examples/motion_storybook/snapshots/storybook_motion__platoon_zoom_36x20_text.snap @@ -0,0 +1,23 @@ +--- +source: tui-components/examples/motion_storybook/e2e.rs +--- +│⠩⠅⠉⠭⠩⠠⠈ ⠈⠠ ⠤⠄⠉⠅⠁⠅⠅⠅⠁⠄⠁⠄⠅⠅⠁⠅⠁⠅⠁⠅ ⠅⠭⠅│ +│∘⠄○⠍· ·⠐∘ ○ ○ ∘⠅∘⠄·⠅∘⠄·⠁·⠅·⠅ ·⠄·⠤·⠅│ +│⠁·⠉⠥⠁∘⠉⢀⠉·⠐⠄⠑·⠝⢀⠑·⠕⠅⠅·⠁⠅⠅·⠁⠅⠅ ⠅⠄⠅·⠅⢕│ +│●⢄·⠐∘⢀ ⠈· ⠐∘⠥·⢄∘⠁· ·⠁·⠁·⠅ ⠅·⠄ ⠅·⠁·⢅│ +│⠁⢐⠑ ⢑⠈⠑ ⠙⠐⠐⢁⠁⠐⠑⠄⠁⠐⠁⠅⠅ ⠅⠅⠁⠄⠁⠄⠅⠅⠅⠁⠁⠄⢅⢑│ +│ · ⢀· ·⢀·⢐·⢀·⠔·⢐·⠅ ⠅· ⡄ ⠄·⠅·⠄ ⠅·⠔│ +│⢑·⢁⠐⢑ ⢑⢐⢐ ⠁⢄⢁·⠁⠄⠓ ⠑⠄⠁ ⠁⠅⠁ ⠁⠁⠁ ⠁⢐⠁·⠁⠑│ +│·⢀·⢐·⢐ ⢐·⠐ ⠐· ⢀·⠐ · · · · · ⠐│ +│⠑⢐⠑⢀⠑ ⢑⠐⢐⢐⠑⢀⠑ ⠑⢐⠁⢀⠁ ⠁⡀⠁⡄⠃ ⠁ ⠑ ⠁ ⠑ │ +│ ⠐· ·⢐· ·⢀·⢀·⢀·⠐ ⠄· · ·⠄ ·⠄· ·⠄·⢐│ +│⢀· ⠄⠐ ⢀⠐ · ⢐ ·⢀⠐⠁ ⠁ ⠁⠄⠄ ⠁⠁ ⠃ ⠁ ⠁⠐│ +│·⠔∘ · ∘ ∘⠐·⢔∘⢄·⠄·⢄·⠄·⠅·⠅·⠅· ·⠅·⢄·⠅·⠔│ +│⠑⠸⠅⠐⢑⠘⠑ ⠁⠐⠁ ⠁⢄⠕⢕⠑⠄⠁⠄⠅⠅⠅⠄⠅⠅⠅ ⠅⠄⠁⠅⠕⠅⠁⢄│ +│·⢕·⠐○⠄○⠠· ∘⠌·⠄·⠁ ·⠅·⠅·⠅·⠄·⠁·⠅·⢅∘⠤·⠅│ +│⠅ ⠁ ⠁ ⠁ ⠉●⠁⠍⠁∘⠁⠅ ·⠅⠅⠅·⠁⠁⠅ ⠅⠅⠅·⠅ ⠁∘⠅⠄│ +│○⠍∘⠠· ○⠠· ○⠄∘⠥∘⠅∘⠄·⠁·⠁·⠄·⠅ ⠅·⠁·⠅∘⠄ ⠁│ +│⠁⠁⠍⠡⠡ ⠈ ⠁⠉⠅⠁⠅⠁⠅⠁⠅⠅⠁⠁⠄⠅ ⠅⠄⠅⠅⠅⠄⠅⠄│ +│∘⠄○⠄○⠬· ○⠤○ · ∘⠥·⠄·⠁·⠄·⠄·⠅·⠅·⠅·⠅·⠄·⠩│ +│⠁∘⠍⠠⠁ ⠁ ⠉○⠁ ⠅○⠉⠅⠅·⠁⠅⠁·⠅⠄⠅ ⠁⠅⠁·⠅⠅⠅ ⠁⠁│ +│∘⢬·⢤○⠄∘⠨○⠈○ ·⠄·⠅·⠅·⠅∘⠅·⠅·⠅·⠅·⠅·⠄∘⠅·⠅│ diff --git a/nori-rs/tui-components/examples/support/e2e.rs b/nori-rs/tui-components/examples/support/e2e.rs index 80384bd45..9d5c737e9 100644 --- a/nori-rs/tui-components/examples/support/e2e.rs +++ b/nori-rs/tui-components/examples/support/e2e.rs @@ -90,6 +90,10 @@ pub struct TuiSession { impl TuiSession { pub fn start(example: &str, cols: i32, rows: i32) -> Result { + Self::start_with_args(example, cols, rows, &[]) + } + + pub fn start_with_args(example: &str, cols: i32, rows: i32, args: &[&str]) -> Result { ensure!(cols > 0 && rows > 0, "terminal dimensions must be positive"); let scripts = PathBuf::from( std::env::var_os("TUI_PUPPETEERING_DIR") @@ -137,8 +141,13 @@ impl TuiSession { rows, }; let quoted_binary = binary.to_string_lossy().replace('\'', "'\\''"); + let quoted_args = args + .iter() + .map(|arg| format!("'{}'", arg.replace('\'', "'\\''"))) + .collect::>() + .join(" "); let command = format!( - "env -u NO_COLOR TERM=xterm-256color COLORTERM=truecolor LC_ALL=en_US.UTF-8 '{quoted_binary}'" + "env -u NO_COLOR TERM=xterm-256color COLORTERM=truecolor LC_ALL=en_US.UTF-8 '{quoted_binary}' {quoted_args}" ); session.run("tui-start", &[&session.name, "/bin/sh"])?; session.run(